@storacha/encrypt-upload-client 1.1.58 → 1.1.60

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 (72) hide show
  1. package/dist/config/constants.d.ts +3 -3
  2. package/dist/config/constants.js +3 -4
  3. package/dist/config/env.d.ts +6 -9
  4. package/dist/config/service.d.ts +13 -13
  5. package/dist/core/client.d.ts +41 -54
  6. package/dist/core/client.js +56 -68
  7. package/dist/core/errors.d.ts +6 -6
  8. package/dist/core/metadata/encrypted-metadata.d.ts +8 -13
  9. package/dist/core/metadata/kms-metadata.d.ts +36 -68
  10. package/dist/core/metadata/lit-metadata.d.ts +28 -63
  11. package/dist/crypto/adapters/kms-crypto-adapter.d.ts +137 -172
  12. package/dist/crypto/adapters/lit-crypto-adapter.d.ts +86 -107
  13. package/dist/crypto/factories.browser.d.ts +5 -9
  14. package/dist/crypto/factories.browser.js +7 -15
  15. package/dist/crypto/factories.node.d.ts +6 -13
  16. package/dist/crypto/factories.node.js +13 -19
  17. package/dist/crypto/index.d.ts +5 -5
  18. package/dist/crypto/index.js +5 -5
  19. package/dist/crypto/symmetric/generic-aes-ctr-streaming-crypto.d.ts +54 -58
  20. package/dist/crypto/symmetric/generic-aes-ctr-streaming-crypto.js +146 -174
  21. package/dist/crypto/symmetric/node-aes-cbc-crypto.d.ts +32 -36
  22. package/dist/crypto/symmetric/node-aes-cbc-crypto.js +95 -101
  23. package/dist/examples/decrypt-test.d.ts +2 -2
  24. package/dist/examples/decrypt-test.js +69 -78
  25. package/dist/examples/encrypt-test.d.ts +3 -5
  26. package/dist/examples/encrypt-test.js +55 -58
  27. package/dist/handlers/decrypt-handler.d.ts +5 -19
  28. package/dist/handlers/encrypt-handler.d.ts +3 -9
  29. package/dist/handlers/encrypt-handler.js +57 -93
  30. package/dist/index.d.ts +2 -2
  31. package/dist/index.js +2 -2
  32. package/dist/protocols/lit.d.ts +9 -33
  33. package/dist/protocols/lit.js +98 -134
  34. package/dist/test/cid-verification.spec.d.ts +2 -2
  35. package/dist/test/cid-verification.spec.js +313 -341
  36. package/dist/test/crypto-compatibility.spec.d.ts +2 -2
  37. package/dist/test/crypto-compatibility.spec.js +120 -184
  38. package/dist/test/crypto-counter-security.spec.d.ts +2 -2
  39. package/dist/test/crypto-counter-security.spec.js +138 -177
  40. package/dist/test/crypto-streaming.spec.d.ts +2 -2
  41. package/dist/test/crypto-streaming.spec.js +126 -208
  42. package/dist/test/encrypted-metadata.spec.d.ts +2 -2
  43. package/dist/test/encrypted-metadata.spec.js +62 -89
  44. package/dist/test/factories.spec.d.ts +2 -2
  45. package/dist/test/factories.spec.js +139 -275
  46. package/dist/test/file-metadata.spec.d.ts +2 -2
  47. package/dist/test/file-metadata.spec.js +416 -472
  48. package/dist/test/fixtures/test-fixtures.d.ts +20 -25
  49. package/dist/test/fixtures/test-fixtures.js +53 -61
  50. package/dist/test/helpers/test-file-utils.d.ts +14 -19
  51. package/dist/test/helpers/test-file-utils.js +76 -78
  52. package/dist/test/https-enforcement.spec.d.ts +2 -2
  53. package/dist/test/https-enforcement.spec.js +124 -278
  54. package/dist/test/kms-crypto-adapter.spec.d.ts +2 -2
  55. package/dist/test/kms-crypto-adapter.spec.js +304 -473
  56. package/dist/test/lit-crypto-adapter.spec.d.ts +2 -2
  57. package/dist/test/lit-crypto-adapter.spec.js +118 -206
  58. package/dist/test/memory-efficiency.spec.d.ts +2 -2
  59. package/dist/test/memory-efficiency.spec.js +87 -100
  60. package/dist/test/mocks/key-manager.d.ts +38 -71
  61. package/dist/test/mocks/key-manager.js +113 -129
  62. package/dist/test/node-crypto-adapter.spec.d.ts +2 -2
  63. package/dist/test/node-crypto-adapter.spec.js +102 -155
  64. package/dist/test/node-generic-crypto-adapter.spec.d.ts +2 -2
  65. package/dist/test/node-generic-crypto-adapter.spec.js +94 -134
  66. package/dist/test/setup.d.ts +2 -2
  67. package/dist/test/setup.js +9 -8
  68. package/dist/tsconfig.spec.tsbuildinfo +1 -1
  69. package/dist/types.d.ts +181 -219
  70. package/dist/utils/file-metadata.d.ts +13 -19
  71. package/dist/utils.d.ts +5 -14
  72. package/package.json +2 -2
@@ -9,70 +9,42 @@
9
9
  * @param {Function} [options.onKeyDecrypt] - Optional callback for decrypt calls
10
10
  */
11
11
  export function createMockKeyManagerService(options: {
12
- mockPublicKey: string
13
- mockProvider?: string | undefined
14
- mockAlgorithm?: string | undefined
15
- onEncryptionSetup?: Function | undefined
16
- onKeyDecrypt?: Function | undefined
12
+ mockPublicKey: string;
13
+ mockProvider?: string | undefined;
14
+ mockAlgorithm?: string | undefined;
15
+ onEncryptionSetup?: Function | undefined;
16
+ onKeyDecrypt?: Function | undefined;
17
17
  }): {
18
- space: {
19
- encryption: {
20
- setup: Server.ServiceMethod<
21
- Server.API.Capability<
22
- 'space/encryption/setup',
23
- `did:key:${string}` &
24
- `did:${string}` &
25
- Server.API.Phantom<{
26
- protocol: 'did:'
27
- }>,
28
- Partial<
29
- Pick<
30
- {
31
- location: string | undefined
32
- keyring: string | undefined
33
- },
34
- 'location' | 'keyring'
35
- >
36
- >
37
- >,
38
- {
39
- publicKey: string
40
- provider: string
41
- algorithm: string
42
- },
43
- Server.API.Failure & {
44
- name: string
45
- message: string
46
- }
47
- >
48
- key: {
49
- decrypt: Server.ServiceMethod<
50
- Server.API.Capability<
51
- 'space/encryption/key/decrypt',
52
- `did:key:${string}` &
53
- `did:${string}` &
54
- Server.API.Phantom<{
55
- protocol: 'did:'
56
- }>,
57
- Pick<
58
- {
59
- key: Uint8Array<ArrayBufferLike>
60
- },
61
- 'key'
62
- >
63
- >,
64
- {
65
- decryptedSymmetricKey: string
66
- },
67
- Server.API.Failure & {
68
- name: string
69
- message: string
70
- }
71
- >
72
- }
73
- }
74
- }
75
- }
18
+ space: {
19
+ encryption: {
20
+ setup: Server.ServiceMethod<Server.API.Capability<"space/encryption/setup", `did:key:${string}` & `did:${string}` & Server.API.Phantom<{
21
+ protocol: "did:";
22
+ }>, Partial<Pick<{
23
+ location: string | undefined;
24
+ keyring: string | undefined;
25
+ }, "location" | "keyring">>>, {
26
+ publicKey: string;
27
+ provider: string;
28
+ algorithm: string;
29
+ }, Server.API.Failure & {
30
+ name: string;
31
+ message: string;
32
+ }>;
33
+ key: {
34
+ decrypt: Server.ServiceMethod<Server.API.Capability<"space/encryption/key/decrypt", `did:key:${string}` & `did:${string}` & Server.API.Phantom<{
35
+ protocol: "did:";
36
+ }>, Pick<{
37
+ key: Uint8Array<ArrayBufferLike>;
38
+ }, "key">>, {
39
+ decryptedSymmetricKey: string;
40
+ }, Server.API.Failure & {
41
+ name: string;
42
+ message: string;
43
+ }>;
44
+ };
45
+ };
46
+ };
47
+ };
76
48
  /**
77
49
  * Create a mock key manager service server
78
50
  *
@@ -81,11 +53,6 @@ export function createMockKeyManagerService(options: {
81
53
  * @param {number} port - The port to listen on
82
54
  * @param {boolean} [useHttps] - Whether to use HTTPS URLs (testing HTTPS scenarios)
83
55
  */
84
- export function createMockKeyManagerServer(
85
- service: object,
86
- keyManagerServiceDID: any,
87
- port: number,
88
- useHttps?: boolean
89
- ): Promise<any>
90
- import * as Server from '@ucanto/server'
91
- //# sourceMappingURL=key-manager.d.ts.map
56
+ export function createMockKeyManagerServer(service: object, keyManagerServiceDID: any, port: number, useHttps?: boolean): Promise<any>;
57
+ import * as Server from '@ucanto/server';
58
+ //# sourceMappingURL=key-manager.d.ts.map
@@ -1,8 +1,8 @@
1
- import { createServer } from 'node:http'
2
- import * as Server from '@ucanto/server'
3
- import { CAR } from '@ucanto/transport'
4
- import * as Space from '@storacha/capabilities/space'
5
- import { base64 } from 'multiformats/bases/base64'
1
+ import { createServer } from 'node:http';
2
+ import * as Server from '@ucanto/server';
3
+ import { CAR } from '@ucanto/transport';
4
+ import * as Space from '@storacha/capabilities/space';
5
+ import { base64 } from 'multiformats/bases/base64';
6
6
  /**
7
7
  * Create mock KMS service with proper capability handlers
8
8
  *
@@ -14,68 +14,62 @@ import { base64 } from 'multiformats/bases/base64'
14
14
  * @param {Function} [options.onKeyDecrypt] - Optional callback for decrypt calls
15
15
  */
16
16
  export function createMockKeyManagerService(options) {
17
- const {
18
- mockPublicKey,
19
- mockProvider = 'google-kms',
20
- mockAlgorithm = 'RSA-OAEP-2048-SHA256',
21
- onEncryptionSetup,
22
- onKeyDecrypt,
23
- } = options
24
- return {
25
- space: {
26
- encryption: {
27
- setup: Server.provide(Space.EncryptionSetup, async (input) => {
28
- // Call optional callback for testing
29
- if (onEncryptionSetup) {
30
- onEncryptionSetup(input)
31
- }
32
- // Validate the space DID format
33
- if (!input.capability.with.startsWith('did:key:')) {
34
- return Server.error({
35
- name: 'InvalidSpace',
36
- message: 'Space DID must be a did:key',
37
- })
38
- }
39
- // Return mock RSA public key and metadata
40
- return Server.ok({
41
- publicKey: mockPublicKey,
42
- provider: mockProvider,
43
- algorithm: mockAlgorithm,
44
- })
45
- }),
46
- key: {
47
- decrypt: Server.provide(Space.EncryptionKeyDecrypt, async (input) => {
48
- // Call optional callback for testing
49
- if (onKeyDecrypt) {
50
- onKeyDecrypt(input)
51
- }
52
- // Validate the space DID
53
- if (!input.capability.with.startsWith('did:key:')) {
54
- return Server.error({
55
- name: 'InvalidSpace',
56
- message: 'Space DID must be a did:key',
57
- })
58
- }
59
- // Validate encrypted key is provided
60
- if (!input.capability.nb.key) {
61
- return Server.error({
62
- name: 'KeyNotFound',
63
- message: 'key is required',
64
- })
65
- }
66
- // For testing purposes, "decrypt" by converting bytes back to base64 string
67
- // In real implementation, this would call Google KMS
68
- const keyBytes = input.capability.nb.key
69
- // No base64 decode here, just return the bytes as base64 string for mock
70
- const mockDecryptedKey = base64.encode(keyBytes)
71
- return Server.ok({
72
- decryptedSymmetricKey: mockDecryptedKey,
73
- })
74
- }),
17
+ const { mockPublicKey, mockProvider = 'google-kms', mockAlgorithm = 'RSA-OAEP-2048-SHA256', onEncryptionSetup, onKeyDecrypt, } = options;
18
+ return {
19
+ space: {
20
+ encryption: {
21
+ setup: Server.provide(Space.EncryptionSetup, async (input) => {
22
+ // Call optional callback for testing
23
+ if (onEncryptionSetup) {
24
+ onEncryptionSetup(input);
25
+ }
26
+ // Validate the space DID format
27
+ if (!input.capability.with.startsWith('did:key:')) {
28
+ return Server.error({
29
+ name: 'InvalidSpace',
30
+ message: 'Space DID must be a did:key',
31
+ });
32
+ }
33
+ // Return mock RSA public key and metadata
34
+ return Server.ok({
35
+ publicKey: mockPublicKey,
36
+ provider: mockProvider,
37
+ algorithm: mockAlgorithm,
38
+ });
39
+ }),
40
+ key: {
41
+ decrypt: Server.provide(Space.EncryptionKeyDecrypt, async (input) => {
42
+ // Call optional callback for testing
43
+ if (onKeyDecrypt) {
44
+ onKeyDecrypt(input);
45
+ }
46
+ // Validate the space DID
47
+ if (!input.capability.with.startsWith('did:key:')) {
48
+ return Server.error({
49
+ name: 'InvalidSpace',
50
+ message: 'Space DID must be a did:key',
51
+ });
52
+ }
53
+ // Validate encrypted key is provided
54
+ if (!input.capability.nb.key) {
55
+ return Server.error({
56
+ name: 'KeyNotFound',
57
+ message: 'key is required',
58
+ });
59
+ }
60
+ // For testing purposes, "decrypt" by converting bytes back to base64 string
61
+ // In real implementation, this would call Google KMS
62
+ const keyBytes = input.capability.nb.key;
63
+ // No base64 decode here, just return the bytes as base64 string for mock
64
+ const mockDecryptedKey = base64.encode(keyBytes);
65
+ return Server.ok({
66
+ decryptedSymmetricKey: mockDecryptedKey,
67
+ });
68
+ }),
69
+ },
70
+ },
75
71
  },
76
- },
77
- },
78
- }
72
+ };
79
73
  }
80
74
  /**
81
75
  * Create a mock key manager service server
@@ -85,69 +79,59 @@ export function createMockKeyManagerService(options) {
85
79
  * @param {number} port - The port to listen on
86
80
  * @param {boolean} [useHttps] - Whether to use HTTPS URLs (testing HTTPS scenarios)
87
81
  */
88
- export function createMockKeyManagerServer(
89
- service,
90
- keyManagerServiceDID,
91
- port,
92
- useHttps = false
93
- ) {
94
- const ucantoServer = Server.create({
95
- id: keyManagerServiceDID,
96
- service,
97
- codec: CAR.inbound,
98
- validateAuthorization: () => ({ ok: {} }), // Skip auth validation for tests
99
- })
100
- const httpServer = createServer(async (req, res) => {
101
- res.setHeader('Access-Control-Allow-Origin', '*')
102
- res.setHeader('Access-Control-Allow-Methods', '*')
103
- res.setHeader('Access-Control-Allow-Headers', '*')
104
- if (req.method === 'OPTIONS') return res.end()
105
- if (req.method === 'POST') {
106
- const bodyBuffer = Buffer.concat(await collect(req))
107
- const reqHeaders = /** @type {Record<string, string>} */ (
108
- Object.fromEntries(Object.entries(req.headers))
109
- )
110
- const { headers, body, status } = await ucantoServer.request({
111
- body: new Uint8Array(
112
- bodyBuffer.buffer,
113
- bodyBuffer.byteOffset,
114
- bodyBuffer.byteLength
115
- ),
116
- headers: reqHeaders,
117
- })
118
- for (const [key, value] of Object.entries(headers)) {
119
- res.setHeader(key, value)
120
- }
121
- res.writeHead(status ?? 200)
122
- res.end(body)
123
- } else {
124
- res.end()
125
- }
126
- })
127
- return new Promise((resolve, reject) => {
128
- httpServer.listen(port, (/** @type {Error | undefined} */ err) => {
129
- if (err) {
130
- reject(err)
131
- } else {
132
- const protocol = useHttps ? 'https' : 'http'
133
- resolve({
134
- server: httpServer,
135
- url: `${protocol}://localhost:${port}`,
136
- close: () => new Promise((resolve) => httpServer.close(resolve)),
137
- })
138
- }
139
- })
140
- })
82
+ export function createMockKeyManagerServer(service, keyManagerServiceDID, port, useHttps = false) {
83
+ const ucantoServer = Server.create({
84
+ id: keyManagerServiceDID,
85
+ service,
86
+ codec: CAR.inbound,
87
+ validateAuthorization: () => ({ ok: {} }), // Skip auth validation for tests
88
+ });
89
+ const httpServer = createServer(async (req, res) => {
90
+ res.setHeader('Access-Control-Allow-Origin', '*');
91
+ res.setHeader('Access-Control-Allow-Methods', '*');
92
+ res.setHeader('Access-Control-Allow-Headers', '*');
93
+ if (req.method === 'OPTIONS')
94
+ return res.end();
95
+ if (req.method === 'POST') {
96
+ const bodyBuffer = Buffer.concat(await collect(req));
97
+ const reqHeaders = /** @type {Record<string, string>} */ (Object.fromEntries(Object.entries(req.headers)));
98
+ const { headers, body, status } = await ucantoServer.request({
99
+ body: new Uint8Array(bodyBuffer.buffer, bodyBuffer.byteOffset, bodyBuffer.byteLength),
100
+ headers: reqHeaders,
101
+ });
102
+ for (const [key, value] of Object.entries(headers)) {
103
+ res.setHeader(key, value);
104
+ }
105
+ res.writeHead(status ?? 200);
106
+ res.end(body);
107
+ }
108
+ else {
109
+ res.end();
110
+ }
111
+ });
112
+ return new Promise((resolve, reject) => {
113
+ httpServer.listen(port, (/** @type {Error | undefined} */ err) => {
114
+ if (err) {
115
+ reject(err);
116
+ }
117
+ else {
118
+ const protocol = useHttps ? 'https' : 'http';
119
+ resolve({
120
+ server: httpServer,
121
+ url: `${protocol}://localhost:${port}`,
122
+ close: () => new Promise((resolve) => httpServer.close(resolve)),
123
+ });
124
+ }
125
+ });
126
+ });
141
127
  }
142
128
  /** @param {import('node:stream').Readable} stream */
143
129
  const collect = (stream) => {
144
- return /** @type {Promise<Buffer[]>} */ (
145
- new Promise((resolve, reject) => {
146
- const chunks = /** @type {Buffer[]} */ ([])
147
- stream.on('data', (chunk) => chunks.push(Buffer.from(chunk)))
148
- stream.on('error', (err) => reject(err))
149
- stream.on('end', () => resolve(chunks))
150
- })
151
- )
152
- }
153
- //# sourceMappingURL=key-manager.js.map
130
+ return /** @type {Promise<Buffer[]>} */ (new Promise((resolve, reject) => {
131
+ const chunks = /** @type {Buffer[]} */ ([]);
132
+ stream.on('data', (chunk) => chunks.push(Buffer.from(chunk)));
133
+ stream.on('error', (err) => reject(err));
134
+ stream.on('end', () => resolve(chunks));
135
+ }));
136
+ };
137
+ //# sourceMappingURL=key-manager.js.map
@@ -1,2 +1,2 @@
1
- export {}
2
- //# sourceMappingURL=node-crypto-adapter.spec.d.ts.map
1
+ export {};
2
+ //# sourceMappingURL=node-crypto-adapter.spec.d.ts.map