@engine-room/after-effects-mcp 0.5.1 → 0.6.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 (37) hide show
  1. package/README.md +126 -185
  2. package/bin/server.js +12567 -2478
  3. package/package.json +8 -8
  4. package/panel/CSXS/manifest.xml +44 -4
  5. package/panel/META-INF/signatures.xml +182 -0
  6. package/panel/client/csinterface.js +32 -0
  7. package/panel/client/main.js +522 -632
  8. package/panel/client/panelhash.js +79 -0
  9. package/panel/client/status.html +27 -0
  10. package/panel/client/status.js +112 -0
  11. package/panel/jsx/bundle.jsx +9032 -2393
  12. package/panel/mimetype +1 -0
  13. package/panel/node_modules/ws/LICENSE +20 -0
  14. package/panel/node_modules/ws/README.md +548 -0
  15. package/panel/node_modules/ws/browser.js +8 -0
  16. package/panel/node_modules/ws/index.js +22 -0
  17. package/panel/node_modules/ws/lib/buffer-util.js +131 -0
  18. package/panel/node_modules/ws/lib/constants.js +19 -0
  19. package/panel/node_modules/ws/lib/event-target.js +292 -0
  20. package/panel/node_modules/ws/lib/extension.js +203 -0
  21. package/panel/node_modules/ws/lib/limiter.js +55 -0
  22. package/panel/node_modules/ws/lib/permessage-deflate.js +530 -0
  23. package/panel/node_modules/ws/lib/receiver.js +743 -0
  24. package/panel/node_modules/ws/lib/sender.js +607 -0
  25. package/panel/node_modules/ws/lib/stream.js +161 -0
  26. package/panel/node_modules/ws/lib/subprotocol.js +62 -0
  27. package/panel/node_modules/ws/lib/validation.js +152 -0
  28. package/panel/node_modules/ws/lib/websocket-server.js +562 -0
  29. package/panel/node_modules/ws/lib/websocket.js +1421 -0
  30. package/panel/node_modules/ws/package.json +74 -0
  31. package/panel/node_modules/ws/wrapper.mjs +21 -0
  32. package/panel/package.json +2 -2
  33. package/panel/client/contactsheet.js +0 -347
  34. package/panel/client/framecache.js +0 -98
  35. package/panel/client/framereader.js +0 -248
  36. package/panel/client/mogrt.js +0 -328
  37. package/panel/client/pngcodec.js +0 -524
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@engine-room/after-effects-mcp",
3
- "version": "0.5.1",
3
+ "version": "0.6.0",
4
4
  "type": "module",
5
5
  "description": "Control Adobe After Effects with AI — describe the animation you want and it gets built: layers, keyframes, effects, expressions and text, all editable afterwards.",
6
6
  "license": "MIT",
@@ -11,6 +11,7 @@
11
11
  "url": "git+https://github.com/Engine-Room-Games/after-effects-mcp.git",
12
12
  "directory": "packages/mcp-server"
13
13
  },
14
+ "funding": "https://github.com/sponsors/migus88",
14
15
  "bugs": {
15
16
  "url": "https://github.com/Engine-Room-Games/after-effects-mcp/issues"
16
17
  },
@@ -52,16 +53,15 @@
52
53
  "clean": "rm -rf dist bin panel"
53
54
  },
54
55
  "dependencies": {
55
- "@modelcontextprotocol/sdk": "^1.0.4",
56
- "ws": "^8.21.3",
57
- "zod": "^3.23.8",
58
- "zod-to-json-schema": "^3.23.5"
56
+ "@modelcontextprotocol/sdk": "^1.32.2",
57
+ "ws": "^8.22.0",
58
+ "zod": "^4.6.7"
59
59
  },
60
60
  "devDependencies": {
61
61
  "@engineroom/shared": "*",
62
- "@types/node": "^22",
63
- "@types/ws": "^8.5.13",
62
+ "@types/node": "^22.20.5",
63
+ "@types/ws": "^8.18.2",
64
64
  "esbuild": "^0.28.2",
65
- "typescript": "^5.6.0"
65
+ "typescript": "^6.0.3"
66
66
  }
67
67
  }
@@ -1,8 +1,31 @@
1
1
  <?xml version="1.0" encoding="UTF-8"?>
2
- <ExtensionManifest Version="11.0" ExtensionBundleId="games.engine-room.ae-mcp" ExtensionBundleVersion="0.5.1"
2
+ <!--
3
+ Two extensions, one bundle (issue #283).
4
+
5
+ games.engine-room.ae-mcp.bridge is the bridge: client/index.html + main.js,
6
+ the HTTP/WS server, Node enabled. It is an invisible extension (Type Custom,
7
+ AutoVisible false, no Menu) started by After Effects' activate event, so it
8
+ runs at every launch and never opens a window. check_setup's CEP-log match
9
+ is on the bundle id, so it covers both extensions.
10
+
11
+ games.engine-room.ae-mcp.panel is the optional window under
12
+ Window > Extensions > AE MCP Bridge. No Node, no server: it shows what the
13
+ bridge reports over a CEP event (client/status.js), and closing or opening
14
+ it never touches the bridge. It keeps the id the old visible bridge had, so
15
+ a workspace saved with that panel docked restores this window into the same
16
+ frame, still a Panel, instead of a Panel slot naming a hidden extension.
17
+
18
+ If a host turns out not to start the hidden extension, the fallback is to
19
+ give the bridge back its old Lifecycle and UI (Type Panel, AutoVisible true,
20
+ a Menu) under the .panel id and drop the status extension; index.html still
21
+ renders the status.
22
+ See docs/fragile-areas-bridge.md, "CEP and the panel".
23
+ -->
24
+ <ExtensionManifest Version="11.0" ExtensionBundleId="games.engine-room.ae-mcp" ExtensionBundleVersion="0.6.0"
3
25
  ExtensionBundleName="AE MCP Bridge" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
4
26
  <ExtensionList>
5
- <Extension Id="games.engine-room.ae-mcp.panel" Version="0.5.1" />
27
+ <Extension Id="games.engine-room.ae-mcp.bridge" Version="0.6.0" />
28
+ <Extension Id="games.engine-room.ae-mcp.panel" Version="0.6.0" />
6
29
  </ExtensionList>
7
30
  <ExecutionEnvironment>
8
31
  <HostList>
@@ -16,7 +39,7 @@
16
39
  </RequiredRuntimeList>
17
40
  </ExecutionEnvironment>
18
41
  <DispatchInfoList>
19
- <Extension Id="games.engine-room.ae-mcp.panel">
42
+ <Extension Id="games.engine-room.ae-mcp.bridge">
20
43
  <DispatchInfo>
21
44
  <Resources>
22
45
  <MainPath>./client/index.html</MainPath>
@@ -29,11 +52,28 @@
29
52
  </CEFCommandLine>
30
53
  </Resources>
31
54
  <Lifecycle>
32
- <AutoVisible>true</AutoVisible>
55
+ <AutoVisible>false</AutoVisible>
33
56
  <StartOn>
34
57
  <Event>com.adobe.csxs.events.ApplicationActivate</Event>
58
+ <Event>applicationActivate</Event>
35
59
  </StartOn>
36
60
  </Lifecycle>
61
+ <UI>
62
+ <Type>Custom</Type>
63
+ <Geometry>
64
+ <Size><Height>1</Height><Width>1</Width></Size>
65
+ </Geometry>
66
+ </UI>
67
+ </DispatchInfo>
68
+ </Extension>
69
+ <Extension Id="games.engine-room.ae-mcp.panel">
70
+ <DispatchInfo>
71
+ <Resources>
72
+ <MainPath>./client/status.html</MainPath>
73
+ </Resources>
74
+ <Lifecycle>
75
+ <AutoVisible>true</AutoVisible>
76
+ </Lifecycle>
37
77
  <UI>
38
78
  <Type>Panel</Type>
39
79
  <Menu>AE MCP Bridge</Menu>
@@ -0,0 +1,182 @@
1
+ <signatures>
2
+ <Signature xmlns="http://www.w3.org/2000/09/xmldsig#" Id="PackageSignature">
3
+ <SignedInfo>
4
+ <CanonicalizationMethod Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315"/>
5
+ <SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1"/>
6
+ <Reference Type="http://www.w3.org/2000/09/xmldsig#Manifest" URI="#PackageContents">
7
+ <Transforms>
8
+ <Transform Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315"/>
9
+ </Transforms>
10
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256"/>
11
+ <DigestValue>CsAGv62Ji65kurXoCGbYJ9tC7UUdfVPx/ayfeacaxqE=</DigestValue>
12
+ </Reference>
13
+ </SignedInfo>
14
+ <SignatureValue Id="PackageSignatureValue">BuEee41kb0hkrm1E1U8zkwREVVJA9GAx4/QRwtfkE/llm0p9Mm4GVjv8jOjOGfFA
15
+ AI6E57E/UaVrLkoQdLvrUewdUgPdQtk3kD+khH2iTwwsIfd9/dI0WnahP7ClGvgw
16
+ y9tnlTnG3Fo+ctGNvIsqOU0n3R1lbT3ZU9szus1XQcw=</SignatureValue>
17
+
18
+ <KeyInfo>
19
+ <X509Data>
20
+ <X509Certificate>MIICCTCCAXICCQDHHG5toa2KVTANBgkqhkiG9w0BAQsFADBIMQswCQYDVQQGEwJV
21
+ UzELMAkGA1UECAwCQ0ExFDASBgNVBAoMC0VuZ2luZSBSb29tMRYwFAYDVQQDDA1B
22
+ RSBNQ1AgQnJpZGdlMCAXDTI2MTEwNzE2MzI1N1oYDzIxMjYxMDE0MTYzMjU3WjBI
23
+ MQswCQYDVQQGEwJVUzELMAkGA1UECAwCQ0ExFDASBgNVBAoMC0VuZ2luZSBSb29t
24
+ MRYwFAYDVQQDDA1BRSBNQ1AgQnJpZGdlMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCB
25
+ iQKBgQDKZxPnOxKLZAGnN8JOdOvupuLVvkX7DQJQWyvFzNz0xFJi8ycyn3o32X8k
26
+ 3EOxEceTRLI4/FecI+DL4yYSKH6XmFvfs1S5RAIA9oEkpnYoDF6iuMrjybcYzKjJ
27
+ cCkGY0SyytkzYdnqUFMri/Lsq6Y2cN4PiUJgGinkyDaWvwpkGQIDAQABMA0GCSqG
28
+ SIb3DQEBCwUAA4GBAEM48/1/ebNDjbzPcYyBEcdnXRydPOZv5/xEo+MPmTQNd4Ww
29
+ SVqDw+Ejp+SxCAG3N0PsbEe5scFLdUijQ4G6wwoLLTxmooO4ROcDk41d7cZH0BXd
30
+ Vs7SX9RsnPQ+XZOfpXvuqhglyBSmFugkPqogVmp6HKGe4Qo5DLk/aNVlANaT
31
+ </X509Certificate>
32
+ </X509Data>
33
+ </KeyInfo>
34
+ <Object>
35
+ <Manifest Id="PackageContents">
36
+ <Reference URI="mimetype"><DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256"/><DigestValue>b07Onu9cTlGK1WpvgtFOlfk+Tl0HscuNIt6GZtesPX8=</DigestValue></Reference><Reference URI="node_modules/ws/LICENSE"><DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256"/><DigestValue>Kync/g1kcffoySxfs4yfk+3uEDMJNwVUQBkvGDKx7O8=</DigestValue></Reference><Reference URI="node_modules/ws/wrapper.mjs"><DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256"/><DigestValue>/hVGYjAf1Vj5NfnCF/zL56fawC/znmSKAAWJQD/yfH8=</DigestValue></Reference><Reference URI="node_modules/ws/index.js"><DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256"/><DigestValue>kkVk1b4m1ZuWgsQmP2gyDkjd5yQL0tGtF+wwVTdCndI=</DigestValue></Reference><Reference URI="node_modules/ws/README.md"><DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256"/><DigestValue>u5eRMvPL/wjOR/NtBB4YBx+PU00B9ZHAsSm6er8eSA4=</DigestValue></Reference><Reference URI="node_modules/ws/package.json"><DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256"/><DigestValue>we+RygTrR1TAEcXw52OLUHj/cRBPraQAxErHYc+T4LE=</DigestValue></Reference><Reference URI="node_modules/ws/lib/constants.js"><DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256"/><DigestValue>OR6CMUK4s3DlWi/TKwIt6vA7hBXFYAAAlnTryGoLT4Y=</DigestValue></Reference><Reference URI="node_modules/ws/lib/websocket-server.js"><DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256"/><DigestValue>bY3YmoQXSMgERf1fzbW6gAU2m1PMNSUTXhEwTIucVeU=</DigestValue></Reference><Reference URI="node_modules/ws/lib/stream.js"><DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256"/><DigestValue>pW/LbisVIJfuggtvVBCx9x5ZgZtF0I2fi9pYj+OQcOw=</DigestValue></Reference><Reference URI="node_modules/ws/lib/event-target.js"><DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256"/><DigestValue>xF08bhLRcMhgwMPxoFCqD4ZNmAZjK2CaHmB9Z1q6Eow=</DigestValue></Reference><Reference URI="node_modules/ws/lib/permessage-deflate.js"><DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256"/><DigestValue>FqkVNpiKU8IwR+5YgjkgaHKKg5okQXjDsJuMVJgvWLA=</DigestValue></Reference><Reference URI="node_modules/ws/lib/receiver.js"><DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256"/><DigestValue>pq2jPJotVOr1lYJLgh6onKLGOV+JqgZ1XFIUIUgnSIQ=</DigestValue></Reference><Reference URI="node_modules/ws/lib/sender.js"><DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256"/><DigestValue>0HkdMMPe/UTcq73bh5qQHHV5k/6iwAp//qAdU7I7S3c=</DigestValue></Reference><Reference URI="node_modules/ws/lib/subprotocol.js"><DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256"/><DigestValue>vj9jI9b1SVaFd9y6kATBR52Vxlp6uw/gxYKHW5+sC3w=</DigestValue></Reference><Reference URI="node_modules/ws/lib/limiter.js"><DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256"/><DigestValue>4EadS4P2unZLFfgOF2a3XBNvv/aPBI9MBQ8LHH8GX2k=</DigestValue></Reference><Reference URI="node_modules/ws/lib/websocket.js"><DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256"/><DigestValue>fM8wWSXwzbdOBrdbTITeE0sb13GiIO9AmyRSDe8IEo8=</DigestValue></Reference><Reference URI="node_modules/ws/lib/validation.js"><DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256"/><DigestValue>Qc6Og9DUNBMuFwSJX+25H2cDpwG0LZHICVSrKbKEVZM=</DigestValue></Reference><Reference URI="node_modules/ws/lib/buffer-util.js"><DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256"/><DigestValue>iwpFc5Ey+C4l6hMWN4Cr9UfM/piSZ/PrertHW+7JLaM=</DigestValue></Reference><Reference URI="node_modules/ws/lib/extension.js"><DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256"/><DigestValue>hSVk8Pa0YChwQ4A+rnMmZvtWEPZ2h0NU/InwaqTphu0=</DigestValue></Reference><Reference URI="node_modules/ws/browser.js"><DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256"/><DigestValue>AQ2kSt3qHYiytzJUDD8f0MvLKJJrlmI9TGQiLg6tLQ4=</DigestValue></Reference><Reference URI="CSXS/manifest.xml"><DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256"/><DigestValue>LhANC5RCeU3JY5J4blYyFeEJg/iIi33TzqO8bKhKRRk=</DigestValue></Reference><Reference URI="package.json"><DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256"/><DigestValue>sZdzBqlryx/vd257t/vK20IHHXJHeKAcxcTxnuwCtS0=</DigestValue></Reference><Reference URI="client/status.html"><DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256"/><DigestValue>NIxip0GmnoJZ+03Olpz6JDe0JgdvY8DzjM4kHgg5KzE=</DigestValue></Reference><Reference URI="client/index.html"><DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256"/><DigestValue>EH0+oyTQUFeG/Rgq5/UQlMu4sZNuH+D/4rn10kDGE0c=</DigestValue></Reference><Reference URI="client/panelhash.js"><DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256"/><DigestValue>u90YEz9q4kSGgs9xxFV1GWio5pG9YjIoAhbPJXzC+8c=</DigestValue></Reference><Reference URI="client/main.js"><DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256"/><DigestValue>++cb2r8aoRk56FdqPEDGJFoWxxpueLuwRCnJz2N3aFo=</DigestValue></Reference><Reference URI="client/status.js"><DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256"/><DigestValue>gbWV4IiLaec7pVR1atUmGxY212LSn+O6yseEfSDAx3k=</DigestValue></Reference><Reference URI="client/csinterface.js"><DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256"/><DigestValue>vIqcRet2HtALihQrxUxnQ39+3zCNLzisen0/T/aqC5k=</DigestValue></Reference><Reference URI="jsx/boot.jsx"><DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256"/><DigestValue>RyijmqjUIdubLklfmxb19fpfltXC7I6W6a8EWdIDLdk=</DigestValue></Reference><Reference URI="jsx/bundle.jsx"><DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256"/><DigestValue>plv0C8y3JNjfkCh4ZNA5kfn1au63xoKsBgyUewvYnI0=</DigestValue></Reference></Manifest>
37
+ </Object>
38
+ <Object xmlns:xades="http://uri.etsi.org/01903/v1.1.1#" >
39
+ <xades:QualifyingProperties>
40
+ <xades:UnsignedProperties>
41
+ <xades:UnsignedSignatureProperties>
42
+ <xades:SignatureTimeStamp>
43
+ <xades:HashDataInfo uri="SignatureValue">
44
+ <Transforms>
45
+ <Transform Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315"/>
46
+ </Transforms>
47
+ </xades:HashDataInfo>
48
+ <xades:EncapsulatedTimeStamp>
49
+ MIIXdDADAgEAMIIXawYJKoZIhvcNAQcCoIIXXDCCF1gCAQMxDzANBglghkgBZQME
50
+ AgEFADCBgwYLKoZIhvcNAQkQAQSgdARyMHACAQEGCWCGSAGG/WwHATAxMA0GCWCG
51
+ SAFlAwQCAQUABCBiJ6Qk5/R8UmX1UedSYk5C2zZLD2culqpgOnc+tGzvCwIRANeo
52
+ 46gEuIvUuieOq4COLicYDzIwMjYxMTA3MTYzMjU3WgIJAJ9FJlhyIlQRoIITOjCC
53
+ Bu0wggTVoAMCAQICEAhP3DNPfkVO28MPj/mSGDUwDQYJKoZIhvcNAQELBQAwaTEL
54
+ MAkGA1UEBhMCVVMxFzAVBgNVBAoTDkRpZ2lDZXJ0LCBJbmMuMUEwPwYDVQQDEzhE
55
+ aWdpQ2VydCBUcnVzdGVkIEc0IFRpbWVTdGFtcGluZyBSU0E0MDk2IFNIQTI1NiAy
56
+ MDI1IENBMTAeFw0yNjA4MDUwMDAwMDBaFw0zNzExMDQyMzU5NTlaMGMxCzAJBgNV
57
+ BAYTAlVTMRcwFQYDVQQKEw5EaWdpQ2VydCwgSW5jLjE7MDkGA1UEAxMyRGlnaUNl
58
+ cnQgU0hBMjU2IFJTQTQwOTYgVGltZXN0YW1wIFJlc3BvbmRlciAyMDI2IDEwggIi
59
+ MA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQC2e6byyf7NSvjUm0xls/04xjD4
60
+ fAkOkbnGQi7+Wpx81iYxfzViaxSIctuH3KSl5YEYpMuFgGsA31N2D9ATMbfZdw5u
61
+ aAhuWevQKhDdZIB4NnqcfpfpWQXJiQnDdAElETC+bhSEvNLGbA8DtwUpFMQ4yyYQ
62
+ SPqomT92osQAv6hBi47ATZS6JfVWe6XxhF4jJZ3iSAuf2Cros1czRSmWRHqMv9Af
63
+ GZvp8ygYElhudpQjtcPpwoOl6QrZJUyV3iINvN4cO05prGV0fkjG426xDr2d3z9l
64
+ cSIHkdvGPdGUrXdxfVbgOUVcp2/8ISEzwKPW++Wa+E2ujI91EZtukGWDJ/xZ27k3
65
+ oHKEXBRGfRTqjOU+jE3ba/5++JSE/7oNHnjs5mekExYN96LV/mxUbCKJb8pBNY4r
66
+ 3uD7hEmk/M81XhVgwDA7aMzYC3LZBg9WY5BMmbSay5ecmtJuXaB/0nKWmQmVZeqT
67
+ VDgsmzHP5MQuhAJkiWNuC9MmCg9TZHXbJ2/yLVSov9p16UDTLtT0+aa1vN71fHeu
68
+ 1qMLlLNB3WOB/ADCxr3S/1hxI92Z6jKgEED/btwIvbfuXkNNhg8MtDg43c4tMZae
69
+ 9FvqMOt/9PvmAxF9TNIsIFB8G6yb36ZJZGUL8N/pL971DyLXcK6HM5PYnH5X+eVt
70
+ czhCgHCVQCF6XDAlPQIDAQABo4IBlTCCAZEwDAYDVR0TAQH/BAIwADAdBgNVHQ4E
71
+ FgQUFMljijAu1Er7bpTz5uNAfvXszeIwHwYDVR0jBBgwFoAU729TSunkBnx6yuKQ
72
+ VvYv1Ensy04wDgYDVR0PAQH/BAQDAgeAMBYGA1UdJQEB/wQMMAoGCCsGAQUFBwMI
73
+ MIGVBggrBgEFBQcBAQSBiDCBhTAkBggrBgEFBQcwAYYYaHR0cDovL29jc3AuZGln
74
+ aWNlcnQuY29tMF0GCCsGAQUFBzAChlFodHRwOi8vY2FjZXJ0cy5kaWdpY2VydC5j
75
+ b20vRGlnaUNlcnRUcnVzdGVkRzRUaW1lU3RhbXBpbmdSU0E0MDk2U0hBMjU2MjAy
76
+ NUNBMS5jcnQwXwYDVR0fBFgwVjBUoFKgUIZOaHR0cDovL2NybDMuZGlnaWNlcnQu
77
+ Y29tL0RpZ2lDZXJ0VHJ1c3RlZEc0VGltZVN0YW1waW5nUlNBNDA5NlNIQTI1NjIw
78
+ MjVDQTEuY3JsMCAGA1UdIAQZMBcwCAYGZ4EMAQQCMAsGCWCGSAGG/WwHATANBgkq
79
+ hkiG9w0BAQsFAAOCAgEAjcU6YR6dUgrfmawJgH59KECxa9Ji8sEi2g10CBDaMiqs
80
+ axWyW5cwlT/6ZF5sFznazqVsoC85U9dqLOYqQwst+UQQoNlDHgKRLa3xoc+OReFr
81
+ eFhnTXSG0Vrd2E2CZqUfm+5a+He1MJ/h+tNLuA+0Zzhn/Fo+FDYAHWZHx4R79Zsf
82
+ RFYe9UiXpXBDf6DkUo183Y38NYmR/XfDYf7YZ+oR9t3flbDwK+hgGMs0gNNp1w9Z
83
+ 2CyOyI5or/sSwomAuNQ0hWC9xoU4stD8aWsD7RkcmgVRs6vlIk3zPKQ+ylcheWkM
84
+ lj+CoVRlFE55pv0ZWCaFt04lwP/rdGHE9qEVQZtyRE42ox7oNgC/r+Y4bSlZ3dw9
85
+ K2x1xLtu6PkPKeLBFjzKigwfqm3Hm+k/+lnME8F5kPZTgiy2HLEHklpryqs6QHnP
86
+ XrRNeIzkAMyylnRN8P0wmirS0WkU+ywpEWFZ4QNg+9xS43tTuW9x0eXh7NDc1P/s
87
+ V+zWxHXKH8tFt1ncHdVzqrZaYPyYMLSn2TOXajveJW1L3joiQSPsWRGxkbDDW15j
88
+ ERFE4LvjnGu2O9zD1nLJSMdlYZEikl4w2w+q4IN/R+TIe0H4ngCI1moJCTbevGH4
89
+ punIxM1Uoi0nmX3ZK+XbRT01uowE5ViXWHng0RgsmrX/EdYUo80r3TfMlkD0/YMw
90
+ gga0MIIEnKADAgECAhANx6xXBf8hmS5AQyIMOkmGMA0GCSqGSIb3DQEBCwUAMGIx
91
+ CzAJBgNVBAYTAlVTMRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3
92
+ dy5kaWdpY2VydC5jb20xITAfBgNVBAMTGERpZ2lDZXJ0IFRydXN0ZWQgUm9vdCBH
93
+ NDAeFw0yNTA1MDcwMDAwMDBaFw0zODAxMTQyMzU5NTlaMGkxCzAJBgNVBAYTAlVT
94
+ MRcwFQYDVQQKEw5EaWdpQ2VydCwgSW5jLjFBMD8GA1UEAxM4RGlnaUNlcnQgVHJ1
95
+ c3RlZCBHNCBUaW1lU3RhbXBpbmcgUlNBNDA5NiBTSEEyNTYgMjAyNSBDQTEwggIi
96
+ MA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQC0eDHTCphBcr48RsAcrHXbo0Zo
97
+ dLRRF51NrY0NlLWZloMsVO1DahGPNRcybEKq+RuwOnPhof6pvF4uGjwjqNjfEvUi
98
+ 6wuim5bap+0lgloM2zX4kftn5B1IpYzTqpyFQ/4Bt0mAxAHeHYNnQxqXmRinvuNg
99
+ xVBdJkf77S2uPoCj7GH8BLuxBG5AvftBdsOECS1UkxBvMgEdgkFiDNYiOTx4OtiF
100
+ cMSkqTtF2hfQz3zQSku2Ws3IfDReb6e3mmdglTcaarps0wjUjsZvkgFkriK9tUKJ
101
+ m/s80FiocSk1VYLZlDwFt+cVFBURJg6zMUjZa/zbCclF83bRVFLeGkuAhHiGPMvS
102
+ GmhgaTzVyhYn4p0+8y9oHRaQT/aofEnS5xLrfxnGpTXiUOeSLsJygoLPp66bkDX1
103
+ ZlAeSpQl92QOMeRxykvq6gbylsXQskBBBnGy3tW/AMOMCZIVNSaz7BX8VtYGqLt9
104
+ MmeOreGPRdtBx3yGOP+rx3rKWDEJlIqLXvJWnY0v5ydPpOjL6s36czwzsucuoKs7
105
+ Yk/ehb//Wx+5kMqIMRvUBDx6z1ev+7psNOdgJMoiwOrUG2ZdSoQbU2rMkpLiQ6bG
106
+ RinZbI4OLu9BMIFm1UUl9VnePs6BaaeEWvjJSjNm2qA+sdFUeEY0qVjPKOWug/G6
107
+ X5uAiynM7Bu2ayBjUwIDAQABo4IBXTCCAVkwEgYDVR0TAQH/BAgwBgEB/wIBADAd
108
+ BgNVHQ4EFgQU729TSunkBnx6yuKQVvYv1Ensy04wHwYDVR0jBBgwFoAU7NfjgtJx
109
+ XWRM3y5nP+e6mK4cD08wDgYDVR0PAQH/BAQDAgGGMBMGA1UdJQQMMAoGCCsGAQUF
110
+ BwMIMHcGCCsGAQUFBwEBBGswaTAkBggrBgEFBQcwAYYYaHR0cDovL29jc3AuZGln
111
+ aWNlcnQuY29tMEEGCCsGAQUFBzAChjVodHRwOi8vY2FjZXJ0cy5kaWdpY2VydC5j
112
+ b20vRGlnaUNlcnRUcnVzdGVkUm9vdEc0LmNydDBDBgNVHR8EPDA6MDigNqA0hjJo
113
+ dHRwOi8vY3JsMy5kaWdpY2VydC5jb20vRGlnaUNlcnRUcnVzdGVkUm9vdEc0LmNy
114
+ bDAgBgNVHSAEGTAXMAgGBmeBDAEEAjALBglghkgBhv1sBwEwDQYJKoZIhvcNAQEL
115
+ BQADggIBABfO+xaAHP4HPRF2cTC9vgvItTSmf83Qh8WIGjB/T8ObXAZz8OjuhUxj
116
+ aaFdleMM0lBryPTQM2qEJPe36zwbSI/mS83afsl3YTj+IQhQE7jU/kXjjytJgnn0
117
+ hvrV6hqWGd3rLAUt6vJy9lMDPjTLxLgXf9r5nWMQwr8Myb9rEVKChHyfpzee5kH0
118
+ F8HABBgr0UdqirZ7bowe9Vj2AIMD8liyrukZ2iA/wdG2th9y1IsA0QF8dTXqvcnT
119
+ mpfeQh35k5zOCPmSNq1UH410ANVko43+Cdmu4y81hjajV/gxdEkMx1NKU4uHQcKf
120
+ ZxAvBAKqMVuqte69M9J6A47OvgRaPs+2ykgcGV00TYr2Lr3ty9qIijanrUR3anzE
121
+ wlvzZiiyfTPjLbnFRsjsYg39OlV8cipDoq7+qNNjqFzeGxcytL5TTLL4ZaoBdqbh
122
+ OhZ3ZRDUphPvSRmMThi0vw9vODRzW6AxnJll38F0cuJG7uEBYTptMSbhdhGQDpOX
123
+ gpIUsWTjd6xpR6oaQf/DJbg3s6KCLPAlZ66RzIg9sC+NJpud/v4+7RWsWCiKi9EO
124
+ LLHfMR2ZyJ/+xhCx9yHbxtl5TPau1j/1MIDpMPx0LckTetiSuEtQvLsNz3Qbp7wG
125
+ WqbIiOWCnb5WqxL3/BAPvIXKUjPSxyZsq8WhbaM2tszWkPZPubdcMIIFjTCCBHWg
126
+ AwIBAgIQDpsYjvnQLefv21DiCEAYWjANBgkqhkiG9w0BAQwFADBlMQswCQYDVQQG
127
+ EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNl
128
+ cnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgQ0EwHhcN
129
+ MjIwODAxMDAwMDAwWhcNMzExMTA5MjM1OTU5WjBiMQswCQYDVQQGEwJVUzEVMBMG
130
+ A1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSEw
131
+ HwYDVQQDExhEaWdpQ2VydCBUcnVzdGVkIFJvb3QgRzQwggIiMA0GCSqGSIb3DQEB
132
+ AQUAA4ICDwAwggIKAoICAQC/5pBzaN675F1KPDAiMGkz7MKnJS7JIT3yithZwuEp
133
+ pz1Yq3aaza57G4QNxDAf8xukOBbrVsaXbR2rsnnyyhHS5F/WBTxSD1Ifxp4VpX6+
134
+ n6lXFllVcq9ok3DCsrp1mWpzMpTREEQQLt+C8weE5nQ7bXHiLQwb7iDVySAdYykt
135
+ zuxeTsiT+CFhmzTrBcZe7FsavOvJz82sNEBfsXpm7nfISKhmV1efVFiODCu3T6cw
136
+ 2Vbuyntd463JT17lNecxy9qTXtyOj4DatpGYQJB5w3jHtrHEtWoYOAMQjdjUN6Qu
137
+ BX2I9YI+EJFwq1WCQTLX2wRzKm6RAXwhTNS8rhsDdV14Ztk6MUSaM0C/CNdaSaTC
138
+ 5qmgZ92kJ7yhTzm1EVgX9yRcRo9k98FpiHaYdj1ZXUJ2h4mXaXpI8OCiEhtmmnTK
139
+ 3kse5w5jrubU75KSOp493ADkRSWJtppEGSt+wJS00mFt6zPZxd9LBADMfRyVw4/3
140
+ IbKyEbe7f/LVjHAsQWCqsWMYRJUadmJ+9oCw++hkpjPRiQfhvbfmQ6QYuKZ3AeEP
141
+ lAwhHbJUKSWJbOUOUlFHdL4mrLZBdd56rF+NP8m800ERElvlEFDrMcXKchYiCd98
142
+ THU/Y+whX8QgUWtvsauGi0/C1kVfnSD8oR7FwI+isX4KJpn15GkvmB0t9dmpsh3l
143
+ GwIDAQABo4IBOjCCATYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQU7NfjgtJx
144
+ XWRM3y5nP+e6mK4cD08wHwYDVR0jBBgwFoAUReuir/SSy4IxLVGLp6chnfNtyA8w
145
+ DgYDVR0PAQH/BAQDAgGGMHkGCCsGAQUFBwEBBG0wazAkBggrBgEFBQcwAYYYaHR0
146
+ cDovL29jc3AuZGlnaWNlcnQuY29tMEMGCCsGAQUFBzAChjdodHRwOi8vY2FjZXJ0
147
+ cy5kaWdpY2VydC5jb20vRGlnaUNlcnRBc3N1cmVkSURSb290Q0EuY3J0MEUGA1Ud
148
+ HwQ+MDwwOqA4oDaGNGh0dHA6Ly9jcmwzLmRpZ2ljZXJ0LmNvbS9EaWdpQ2VydEFz
149
+ c3VyZWRJRFJvb3RDQS5jcmwwEQYDVR0gBAowCDAGBgRVHSAAMA0GCSqGSIb3DQEB
150
+ DAUAA4IBAQBwoL9DXFXnOF+go3QbPbYW1/e/Vwe9mqyhhyzshV6pGrsi+IcaaVQi
151
+ 7aSId229GhT0E0p6Ly23OO/0/4C5+KH38nLeJLxSA8hO0Cre+i1Wz/n096wwepqL
152
+ sl7Uz9FDRJtDIeuWcqFItJnLnU+nBgMTdydE1Od/6Fmo8L8vC6bp8jQ87PcDx4eo
153
+ 0kxAGTVGamlUsLihVo7spNU96LHc/RzY9HdaXFSMb++hUD38dglohJ9vytsgjTVg
154
+ HAIDyyCwrFigDkBjxZgiwbJZ9VVrzyerbHbObyMt9H5xaiNrIv8SuFQtJ37YOtnw
155
+ toeW/VvRXKwYw02fc7cBqZ9Xql4o4rmUMYIDfDCCA3gCAQEwfTBpMQswCQYDVQQG
156
+ EwJVUzEXMBUGA1UEChMORGlnaUNlcnQsIEluYy4xQTA/BgNVBAMTOERpZ2lDZXJ0
157
+ IFRydXN0ZWQgRzQgVGltZVN0YW1waW5nIFJTQTQwOTYgU0hBMjU2IDIwMjUgQ0Ex
158
+ AhAIT9wzT35FTtvDD4/5khg1MA0GCWCGSAFlAwQCAQUAoIHRMBoGCSqGSIb3DQEJ
159
+ AzENBgsqhkiG9w0BCRABBDAcBgkqhkiG9w0BCQUxDxcNMjYxMTA3MTYzMjU3WjAr
160
+ BgsqhkiG9w0BCRACDDEcMBowGDAWBBRR2avaA0lz2E9CZqykgkjms2nEOTAvBgkq
161
+ hkiG9w0BCQQxIgQgxit6zHjfRa6R6zI+khNJFNfzWe6Ipu+9OFAw8TKXrL4wNwYL
162
+ KoZIhvcNAQkQAi8xKDAmMCQwIgQgLaCdp/QTH5/nLbbF5unJZWdVrwQ/HqdCzA0h
163
+ IOFB6/wwDQYJKoZIhvcNAQEBBQAEggIAPMF0Cf2QOhah2A/KzcPYIG/w/XnUkmMq
164
+ 71KC06n33wBgLZAhdLhztECRtYUy/z+8v0lXScW1gY6CdrBCs3qVcPiCHXJN5IL1
165
+ nbqsHLJO3BixzdNq8fNrQ5Et+0xLIiLXxak8Gq9hySTul8CPiHvNWhWRXNDbx/82
166
+ SMAU3OdojIa9zFDeCb8AeWawtETNl9JydEOuArU/nsCaxmEFG2OJxapWokw/j3Hw
167
+ /T8W718XQlyBNckQH36gEuuvqNBmrJelJNSj/4Icu2YjYjrUzUVD7CLpHJt9qZzK
168
+ HVj05aPe3ogebLVUu96OgCl+vivNFmp5vjVp1u5oyc18XgFFTuCHSevTb35EN+MB
169
+ 2iUOm1K9zlCKeHTLA2bSpxMy3eNxEQo830EpX5TNHdTLgFMkWHsPvvv4g4z+DVFj
170
+ PALBi7HcsePPGPENpzTirUQlRvyS9eC1Mc7cFNK+uFe5qKQ1OEMqLbgnSd+OSr7i
171
+ XJPU9czg9p66/thkLAPL8BRX1jNNPE0CP/3RHLIoe4OothjfJW/CqJ3P0/obW2Bn
172
+ Nie6ky+AwRHoFLTcsFhiS5s5ZcPEbetz/KbmUjSMmNkTM3r29JovC/GOKpa6zP/o
173
+ ZoabuC8vs24gejZ9pIpMqYpDd9cqWWgq6ywRchNYHA1aOD2DDGFjQ/zvjeeBHXrY
174
+ fqOTSkLAvsU=
175
+ </xades:EncapsulatedTimeStamp>
176
+ </xades:SignatureTimeStamp>
177
+ </xades:UnsignedSignatureProperties>
178
+ </xades:UnsignedProperties>
179
+ </xades:QualifyingProperties>
180
+ </Object>
181
+ </Signature>
182
+ </signatures>
@@ -37,3 +37,35 @@ var SystemPath = {
37
37
  EXTENSION: "extension",
38
38
  HOST_APPLICATION: "hostApplication",
39
39
  };
40
+
41
+ // Events between the extensions of this bundle (issue #283): the bridge runs
42
+ // as a hidden extension and the visible status panel is a separate one, with
43
+ // its own page and no Node, so the two talk over CEP's application-scoped
44
+ // events. Each method is guarded: a host without the native call (and the
45
+ // unit tests' stub) must cost the caller nothing.
46
+ function CSEvent(type, scope, appId, extensionId) {
47
+ this.type = type;
48
+ this.scope = scope || "APPLICATION";
49
+ this.appId = appId;
50
+ this.extensionId = extensionId;
51
+ this.data = "";
52
+ }
53
+
54
+ CSInterface.prototype.dispatchEvent = function (event) {
55
+ if (!window.__adobe_cep__ || !window.__adobe_cep__.dispatchEvent) return false;
56
+ if (typeof event.data === "object") event.data = JSON.stringify(event.data);
57
+ window.__adobe_cep__.dispatchEvent(event);
58
+ return true;
59
+ };
60
+
61
+ CSInterface.prototype.addEventListener = function (type, listener, obj) {
62
+ if (!window.__adobe_cep__ || !window.__adobe_cep__.addEventListener) return false;
63
+ window.__adobe_cep__.addEventListener(type, listener, obj);
64
+ return true;
65
+ };
66
+
67
+ CSInterface.prototype.requestOpenExtension = function (extensionId, params) {
68
+ if (!window.__adobe_cep__ || !window.__adobe_cep__.requestOpenExtension) return false;
69
+ window.__adobe_cep__.requestOpenExtension(extensionId, params === undefined ? "" : params);
70
+ return true;
71
+ };