@imgly/codesign-mcp 0.1.1 → 0.1.2

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 (115) hide show
  1. package/dist/cli/stdio.d.ts.map +1 -1
  2. package/dist/cli/stdio.js +54 -21
  3. package/dist/cli/stdio.js.map +1 -1
  4. package/dist/engine/cesdk-adapter.d.ts +7 -1
  5. package/dist/engine/cesdk-adapter.d.ts.map +1 -1
  6. package/dist/engine/cesdk-adapter.js +7 -1
  7. package/dist/engine/cesdk-adapter.js.map +1 -1
  8. package/dist/http/server.d.ts.map +1 -1
  9. package/dist/http/server.js +0 -1
  10. package/dist/http/server.js.map +1 -1
  11. package/dist/server.d.ts +0 -2
  12. package/dist/server.d.ts.map +1 -1
  13. package/dist/server.js.map +1 -1
  14. package/dist/test/test/cli/redirect-console.test.d.ts +2 -0
  15. package/dist/test/test/cli/redirect-console.test.d.ts.map +1 -0
  16. package/dist/test/test/cli/redirect-console.test.js +47 -0
  17. package/dist/test/test/cli/redirect-console.test.js.map +1 -0
  18. package/dist/test/test/cli/resolve-license.test.d.ts +2 -0
  19. package/dist/test/test/cli/resolve-license.test.d.ts.map +1 -0
  20. package/dist/test/test/cli/resolve-license.test.js +20 -0
  21. package/dist/test/test/cli/resolve-license.test.js.map +1 -0
  22. package/dist/test/test/cli/stdio-license.test.d.ts +2 -0
  23. package/dist/test/test/cli/stdio-license.test.d.ts.map +1 -0
  24. package/dist/test/test/cli/stdio-license.test.js +19 -0
  25. package/dist/test/test/cli/stdio-license.test.js.map +1 -0
  26. package/dist/test/test/config.test.d.ts +2 -0
  27. package/dist/test/test/config.test.d.ts.map +1 -0
  28. package/dist/test/test/config.test.js +91 -0
  29. package/dist/test/test/config.test.js.map +1 -0
  30. package/dist/test/test/engine/asset-sources.test.d.ts +2 -0
  31. package/dist/test/test/engine/asset-sources.test.d.ts.map +1 -0
  32. package/dist/test/test/engine/asset-sources.test.js +100 -0
  33. package/dist/test/test/engine/asset-sources.test.js.map +1 -0
  34. package/dist/test/test/engine/mutex.test.d.ts +2 -0
  35. package/dist/test/test/engine/mutex.test.d.ts.map +1 -0
  36. package/dist/test/test/engine/mutex.test.js +63 -0
  37. package/dist/test/test/engine/mutex.test.js.map +1 -0
  38. package/dist/test/test/engine/session.test.js +15 -0
  39. package/dist/test/test/engine/session.test.js.map +1 -1
  40. package/dist/test/test/engine/unsplash-source.test.d.ts +2 -0
  41. package/dist/test/test/engine/unsplash-source.test.d.ts.map +1 -0
  42. package/dist/test/test/engine/unsplash-source.test.js +129 -0
  43. package/dist/test/test/engine/unsplash-source.test.js.map +1 -0
  44. package/dist/test/test/handbook-contract.test.js +8 -4
  45. package/dist/test/test/handbook-contract.test.js.map +1 -1
  46. package/dist/test/test/http/server.test.js +129 -0
  47. package/dist/test/test/http/server.test.js.map +1 -1
  48. package/dist/test/test/http/session-id-header.test.d.ts +2 -0
  49. package/dist/test/test/http/session-id-header.test.d.ts.map +1 -0
  50. package/dist/test/test/http/session-id-header.test.js +76 -0
  51. package/dist/test/test/http/session-id-header.test.js.map +1 -0
  52. package/dist/test/test/http/session-manager.test.js +14 -0
  53. package/dist/test/test/http/session-manager.test.js.map +1 -1
  54. package/dist/test/test/http/workspace-auth.test.d.ts +2 -0
  55. package/dist/test/test/http/workspace-auth.test.d.ts.map +1 -0
  56. package/dist/test/test/http/workspace-auth.test.js +41 -0
  57. package/dist/test/test/http/workspace-auth.test.js.map +1 -0
  58. package/dist/test/test/metrics/mount.test.d.ts +2 -0
  59. package/dist/test/test/metrics/mount.test.d.ts.map +1 -0
  60. package/dist/test/test/metrics/mount.test.js +59 -0
  61. package/dist/test/test/metrics/mount.test.js.map +1 -0
  62. package/dist/test/test/metrics/recorder.test.d.ts +2 -0
  63. package/dist/test/test/metrics/recorder.test.d.ts.map +1 -0
  64. package/dist/test/test/metrics/recorder.test.js +118 -0
  65. package/dist/test/test/metrics/recorder.test.js.map +1 -0
  66. package/dist/test/test/revisions/store.test.js +81 -11
  67. package/dist/test/test/revisions/store.test.js.map +1 -1
  68. package/dist/test/test/server.metrics.test.d.ts +2 -0
  69. package/dist/test/test/server.metrics.test.d.ts.map +1 -0
  70. package/dist/test/test/server.metrics.test.js +87 -0
  71. package/dist/test/test/server.metrics.test.js.map +1 -0
  72. package/dist/test/test/server.test.js +33 -4
  73. package/dist/test/test/server.test.js.map +1 -1
  74. package/dist/test/test/tools/asset-search.test.d.ts +2 -0
  75. package/dist/test/test/tools/asset-search.test.d.ts.map +1 -0
  76. package/dist/test/test/tools/asset-search.test.js +121 -0
  77. package/dist/test/test/tools/asset-search.test.js.map +1 -0
  78. package/dist/test/test/tools/edit.test.js +71 -9
  79. package/dist/test/test/tools/edit.test.js.map +1 -1
  80. package/dist/test/test/tools/export.test.js +60 -30
  81. package/dist/test/test/tools/export.test.js.map +1 -1
  82. package/dist/test/test/tools/index.test.d.ts +2 -0
  83. package/dist/test/test/tools/index.test.d.ts.map +1 -0
  84. package/dist/test/test/tools/index.test.js +55 -0
  85. package/dist/test/test/tools/index.test.js.map +1 -0
  86. package/dist/test/test/tools/metrics.test.d.ts +2 -0
  87. package/dist/test/test/tools/metrics.test.d.ts.map +1 -0
  88. package/dist/test/test/tools/metrics.test.js +29 -0
  89. package/dist/test/test/tools/metrics.test.js.map +1 -0
  90. package/dist/test/test/tools/preview.test.js +6 -4
  91. package/dist/test/test/tools/preview.test.js.map +1 -1
  92. package/dist/test/test/tools/rename.test.js +1 -2
  93. package/dist/test/test/tools/rename.test.js.map +1 -1
  94. package/dist/test/test/tools/save.test.d.ts +2 -0
  95. package/dist/test/test/tools/save.test.d.ts.map +1 -0
  96. package/dist/test/test/tools/save.test.js +137 -0
  97. package/dist/test/test/tools/save.test.js.map +1 -0
  98. package/dist/test/test/viewer/router.test.js +56 -0
  99. package/dist/test/test/viewer/router.test.js.map +1 -1
  100. package/dist/test/test/viewer/session-mount.test.d.ts +2 -0
  101. package/dist/test/test/viewer/session-mount.test.d.ts.map +1 -0
  102. package/dist/test/test/viewer/session-mount.test.js +52 -0
  103. package/dist/test/test/viewer/session-mount.test.js.map +1 -0
  104. package/dist/test/test/viewer/url-builder.test.js +76 -9
  105. package/dist/test/test/viewer/url-builder.test.js.map +1 -1
  106. package/dist/test/test/workspace/s3.test.d.ts +2 -0
  107. package/dist/test/test/workspace/s3.test.d.ts.map +1 -0
  108. package/dist/test/test/workspace/s3.test.js +153 -0
  109. package/dist/test/test/workspace/s3.test.js.map +1 -0
  110. package/dist/test/test/workspace/scoped.test.d.ts +2 -0
  111. package/dist/test/test/workspace/scoped.test.d.ts.map +1 -0
  112. package/dist/test/test/workspace/scoped.test.js +59 -0
  113. package/dist/test/test/workspace/scoped.test.js.map +1 -0
  114. package/dist/test/tsconfig.test.tsbuildinfo +1 -1
  115. package/package.json +1 -1
@@ -0,0 +1,59 @@
1
+ import { describe, expect, it } from 'vitest';
2
+ import { InMemoryWorkspaceFS } from '../../src/workspace/in-memory.js';
3
+ import { sanitizeWorkspaceId, ScopedWorkspaceFS } from '../../src/workspace/scoped.js';
4
+ describe('sanitizeWorkspaceId', () => {
5
+ it('accepts a plain id and a namespaced id', () => {
6
+ expect(sanitizeWorkspaceId('default')).toBe('default');
7
+ expect(sanitizeWorkspaceId('u/usr_8842')).toBe('u/usr_8842');
8
+ expect(sanitizeWorkspaceId('s/abc-123')).toBe('s/abc-123');
9
+ });
10
+ it.each([
11
+ ['', 'empty'],
12
+ ['/abs', 'leading slash'],
13
+ ['..', 'dot-dot'],
14
+ ['a/../b', 'traversal segment'],
15
+ ['a//b', 'empty segment'],
16
+ ['a/', 'trailing slash'],
17
+ ['a\\b', 'backslash'],
18
+ ['a\x01b', 'control char']
19
+ ])('rejects %s (%s) with EINVAL', (id) => {
20
+ expect(() => sanitizeWorkspaceId(id)).toThrowError(expect.objectContaining({ code: 'EINVAL' }));
21
+ });
22
+ });
23
+ describe('ScopedWorkspaceFS', () => {
24
+ it('prefixes writes/reads under workspaces/<id>/', async () => {
25
+ const inner = new InMemoryWorkspaceFS();
26
+ const scoped = new ScopedWorkspaceFS(inner, 'u/usr_8842');
27
+ await scoped.writeFile('objects/ab/cd.scene', 'hello');
28
+ expect(await inner.readFile('workspaces/u/usr_8842/objects/ab/cd.scene', 'utf8')).toBe('hello');
29
+ expect(await scoped.readFile('objects/ab/cd.scene', 'utf8')).toBe('hello');
30
+ });
31
+ it('isolates two workspaces sharing one inner fs', async () => {
32
+ const inner = new InMemoryWorkspaceFS();
33
+ const a = new ScopedWorkspaceFS(inner, 'u/a');
34
+ const b = new ScopedWorkspaceFS(inner, 'u/b');
35
+ await a.writeFile('f', 'A');
36
+ await b.writeFile('f', 'B');
37
+ expect(await a.readFile('f', 'utf8')).toBe('A');
38
+ expect(await b.readFile('f', 'utf8')).toBe('B');
39
+ });
40
+ it('scopes readdir input and returns unprefixed names', async () => {
41
+ const inner = new InMemoryWorkspaceFS();
42
+ const scoped = new ScopedWorkspaceFS(inner, 'ws');
43
+ await scoped.writeFile('journal/root1/0000000000000005-abc', '');
44
+ expect(await scoped.readdir('journal')).toEqual(['root1']);
45
+ });
46
+ it('scopes both paths of a rename', async () => {
47
+ const inner = new InMemoryWorkspaceFS();
48
+ const scoped = new ScopedWorkspaceFS(inner, 'ws');
49
+ await scoped.writeFile('a', 'x');
50
+ await scoped.rename('a', 'b');
51
+ expect(await scoped.exists('a')).toBe(false);
52
+ expect(await scoped.readFile('b', 'utf8')).toBe('x');
53
+ expect(await inner.exists('workspaces/ws/b')).toBe(true);
54
+ });
55
+ it('rejects an illegal workspaceId at construction', () => {
56
+ expect(() => new ScopedWorkspaceFS(new InMemoryWorkspaceFS(), '../escape')).toThrowError(expect.objectContaining({ code: 'EINVAL' }));
57
+ });
58
+ });
59
+ //# sourceMappingURL=scoped.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scoped.test.js","sourceRoot":"","sources":["../../../../test/workspace/scoped.test.ts"],"names":[],"mappings":"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","sourcesContent":["import { describe, expect, it } from 'vitest';\nimport { InMemoryWorkspaceFS } from '../../src/workspace/in-memory.js';\nimport {\n sanitizeWorkspaceId,\n ScopedWorkspaceFS\n} from '../../src/workspace/scoped.js';\n\ndescribe('sanitizeWorkspaceId', () => {\n it('accepts a plain id and a namespaced id', () => {\n expect(sanitizeWorkspaceId('default')).toBe('default');\n expect(sanitizeWorkspaceId('u/usr_8842')).toBe('u/usr_8842');\n expect(sanitizeWorkspaceId('s/abc-123')).toBe('s/abc-123');\n });\n\n it.each([\n ['', 'empty'],\n ['/abs', 'leading slash'],\n ['..', 'dot-dot'],\n ['a/../b', 'traversal segment'],\n ['a//b', 'empty segment'],\n ['a/', 'trailing slash'],\n ['a\\\\b', 'backslash'],\n ['a\\x01b', 'control char']\n ])('rejects %s (%s) with EINVAL', (id) => {\n expect(() => sanitizeWorkspaceId(id)).toThrowError(\n expect.objectContaining({ code: 'EINVAL' })\n );\n });\n});\n\ndescribe('ScopedWorkspaceFS', () => {\n it('prefixes writes/reads under workspaces/<id>/', async () => {\n const inner = new InMemoryWorkspaceFS();\n const scoped = new ScopedWorkspaceFS(inner, 'u/usr_8842');\n await scoped.writeFile('objects/ab/cd.scene', 'hello');\n expect(\n await inner.readFile('workspaces/u/usr_8842/objects/ab/cd.scene', 'utf8')\n ).toBe('hello');\n expect(await scoped.readFile('objects/ab/cd.scene', 'utf8')).toBe('hello');\n });\n\n it('isolates two workspaces sharing one inner fs', async () => {\n const inner = new InMemoryWorkspaceFS();\n const a = new ScopedWorkspaceFS(inner, 'u/a');\n const b = new ScopedWorkspaceFS(inner, 'u/b');\n await a.writeFile('f', 'A');\n await b.writeFile('f', 'B');\n expect(await a.readFile('f', 'utf8')).toBe('A');\n expect(await b.readFile('f', 'utf8')).toBe('B');\n });\n\n it('scopes readdir input and returns unprefixed names', async () => {\n const inner = new InMemoryWorkspaceFS();\n const scoped = new ScopedWorkspaceFS(inner, 'ws');\n await scoped.writeFile('journal/root1/0000000000000005-abc', '');\n expect(await scoped.readdir('journal')).toEqual(['root1']);\n });\n\n it('scopes both paths of a rename', async () => {\n const inner = new InMemoryWorkspaceFS();\n const scoped = new ScopedWorkspaceFS(inner, 'ws');\n await scoped.writeFile('a', 'x');\n await scoped.rename('a', 'b');\n expect(await scoped.exists('a')).toBe(false);\n expect(await scoped.readFile('b', 'utf8')).toBe('x');\n expect(await inner.exists('workspaces/ws/b')).toBe(true);\n });\n\n it('rejects an illegal workspaceId at construction', () => {\n expect(\n () => new ScopedWorkspaceFS(new InMemoryWorkspaceFS(), '../escape')\n ).toThrowError(expect.objectContaining({ code: 'EINVAL' }));\n });\n});\n"]}