@storacha/encrypt-upload-client 0.0.39 → 1.0.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 (55) hide show
  1. package/dist/config/env.d.ts.map +1 -1
  2. package/dist/config/env.js +19 -6
  3. package/dist/core/client.d.ts +8 -12
  4. package/dist/core/client.d.ts.map +1 -1
  5. package/dist/core/client.js +12 -21
  6. package/dist/core/metadata/encrypted-metadata.d.ts +8 -0
  7. package/dist/core/metadata/encrypted-metadata.d.ts.map +1 -0
  8. package/dist/core/metadata/encrypted-metadata.js +69 -0
  9. package/dist/core/metadata/kms-metadata.d.ts +36 -0
  10. package/dist/core/metadata/kms-metadata.d.ts.map +1 -0
  11. package/dist/core/metadata/kms-metadata.js +156 -0
  12. package/dist/core/{encrypted-metadata.d.ts → metadata/lit-metadata.d.ts} +11 -11
  13. package/dist/core/metadata/lit-metadata.d.ts.map +1 -0
  14. package/dist/core/{encrypted-metadata.js → metadata/lit-metadata.js} +32 -42
  15. package/dist/crypto/adapters/kms-crypto-adapter.d.ts +148 -0
  16. package/dist/crypto/adapters/kms-crypto-adapter.d.ts.map +1 -0
  17. package/dist/crypto/adapters/kms-crypto-adapter.js +321 -0
  18. package/dist/crypto/adapters/lit-crypto-adapter.d.ts +96 -0
  19. package/dist/crypto/adapters/lit-crypto-adapter.d.ts.map +1 -0
  20. package/dist/crypto/adapters/lit-crypto-adapter.js +210 -0
  21. package/dist/crypto/factories.browser.d.ts +11 -0
  22. package/dist/crypto/factories.browser.d.ts.map +1 -0
  23. package/dist/crypto/factories.browser.js +16 -0
  24. package/dist/crypto/factories.node.d.ts +26 -0
  25. package/dist/crypto/factories.node.d.ts.map +1 -0
  26. package/dist/crypto/factories.node.js +38 -0
  27. package/dist/crypto/index.d.ts +5 -0
  28. package/dist/crypto/index.d.ts.map +1 -0
  29. package/dist/crypto/index.js +7 -0
  30. package/dist/crypto/symmetric/generic-aes-ctr-streaming-crypto.d.ts +76 -0
  31. package/dist/crypto/symmetric/generic-aes-ctr-streaming-crypto.d.ts.map +1 -0
  32. package/dist/crypto/symmetric/generic-aes-ctr-streaming-crypto.js +177 -0
  33. package/dist/crypto/symmetric/node-aes-cbc-crypto.d.ts +43 -0
  34. package/dist/crypto/symmetric/node-aes-cbc-crypto.d.ts.map +1 -0
  35. package/dist/crypto/symmetric/node-aes-cbc-crypto.js +110 -0
  36. package/dist/handlers/decrypt-handler.d.ts +9 -4
  37. package/dist/handlers/decrypt-handler.d.ts.map +1 -1
  38. package/dist/handlers/decrypt-handler.js +62 -93
  39. package/dist/handlers/encrypt-handler.d.ts +1 -1
  40. package/dist/handlers/encrypt-handler.d.ts.map +1 -1
  41. package/dist/handlers/encrypt-handler.js +31 -41
  42. package/dist/index.d.ts +0 -1
  43. package/dist/index.js +0 -1
  44. package/dist/protocols/lit.d.ts +1 -3
  45. package/dist/protocols/lit.d.ts.map +1 -1
  46. package/dist/types.d.ts +135 -20
  47. package/dist/types.d.ts.map +1 -1
  48. package/package.json +27 -18
  49. package/dist/core/encrypted-metadata.d.ts.map +0 -1
  50. package/dist/crypto-adapters/browser-crypto-adapter.d.ts +0 -42
  51. package/dist/crypto-adapters/browser-crypto-adapter.d.ts.map +0 -1
  52. package/dist/crypto-adapters/browser-crypto-adapter.js +0 -109
  53. package/dist/crypto-adapters/node-crypto-adapter.d.ts +0 -17
  54. package/dist/crypto-adapters/node-crypto-adapter.d.ts.map +0 -1
  55. package/dist/crypto-adapters/node-crypto-adapter.js +0 -66
@@ -1,42 +1,39 @@
1
1
  import { CARWriterStream } from 'carstream';
2
- import { base64 } from 'multiformats/bases/base64';
3
2
  import { createFileEncoderStream } from '@storacha/upload-client/unixfs';
4
3
  import * as Type from '../types.js';
5
- import * as Lit from '../protocols/lit.js';
6
- import * as EncryptedMetadata from '../core/encrypted-metadata.js';
7
4
  /**
8
5
  * Encrypt and upload a file to the Storacha network
9
6
  *
10
7
  * @param {import('@storacha/client').Client} storachaClient - The Storacha client
11
- * @param {import('@lit-protocol/lit-node-client').LitNodeClient} litClient - The Lit client
12
8
  * @param {Type.CryptoAdapter} cryptoAdapter - The crypto adapter responsible for performing
13
9
  * encryption and decryption operations.
14
10
  * @param {Type.BlobLike} file - The file to upload
11
+ * @param {Type.EncryptionConfig} encryptionConfig - User-provided encryption configuration
12
+ * @param {Type.UploadOptions} [uploadOptions] - User-provided upload options
15
13
  * @returns {Promise<Type.AnyLink>} - The link to the uploaded file
16
14
  */
17
- export const encryptAndUpload = async (storachaClient, litClient, cryptoAdapter, file) => {
18
- const spaceDID = /** @type {Type.SpaceDID | undefined} */ (storachaClient.agent.currentSpace());
19
- if (!spaceDID)
15
+ export const encryptAndUpload = async (storachaClient, cryptoAdapter, file, encryptionConfig, uploadOptions = {}) => {
16
+ // Step 1: Validate required configuration
17
+ if (!encryptionConfig.spaceDID)
20
18
  throw new Error('No space selected!');
21
- const accessControlConditions = Lit.getAccessControlConditions(spaceDID);
22
- const encryptedPayload = await encryptFile(litClient, cryptoAdapter, file, accessControlConditions);
23
- const rootCid = await uploadEncryptedMetadata(storachaClient, encryptedPayload, accessControlConditions);
19
+ // Step 2: Encrypt the file using the crypto adapter
20
+ const encryptedPayload = await encryptFile(cryptoAdapter, file, encryptionConfig);
21
+ // Step 3: Build and upload the encrypted metadata to the Storacha network
22
+ const rootCid = await buildAndUploadEncryptedMetadata(storachaClient, encryptedPayload, cryptoAdapter, uploadOptions);
23
+ // Step 4: Return the root CID of the encrypted metadata
24
24
  return rootCid;
25
25
  };
26
26
  /**
27
27
  * Upload encrypted metadata to the Storacha network
28
28
  *
29
29
  * @param {import('@storacha/client').Client} storachaClient - The Storacha client
30
- * @param {Type.EncryptedPayload} encryptedPayload - The encrypted payload
31
- * @param {import('@lit-protocol/types').AccessControlConditions} accessControlConditions - The access control conditions
32
- * @param {object} [options] - The upload options
33
- * @param {boolean} [options.publishToFilecoin] - Whether to publish the data to Filecoin
30
+ * @param {Type.EncryptionPayload} encryptedPayload - The encrypted payload
31
+ * @param {Type.CryptoAdapter} cryptoAdapter - The crypto adapter for formatting metadata
32
+ * @param {Type.UploadOptions} [uploadOptions] - The upload options
34
33
  * @returns {Promise<Type.AnyLink>} - The link to the uploaded metadata
35
34
  */
36
- const uploadEncryptedMetadata = async (storachaClient, encryptedPayload, accessControlConditions, options = {
37
- publishToFilecoin: false,
38
- }) => {
39
- const { identityBoundCiphertext, plaintextKeyHash, encryptedBlobLike } = encryptedPayload;
35
+ const buildAndUploadEncryptedMetadata = async (storachaClient, encryptedPayload, cryptoAdapter, uploadOptions) => {
36
+ const { encryptedKey, metadata, encryptedBlobLike } = encryptedPayload;
40
37
  return storachaClient.uploadCAR({
41
38
  stream() {
42
39
  /** @type {any} */
@@ -50,45 +47,38 @@ const uploadEncryptedMetadata = async (storachaClient, encryptedPayload, accessC
50
47
  async flush(controller) {
51
48
  if (!root)
52
49
  throw new Error('missing root block');
53
- /** @type {Type.EncryptedMetadataInput} */
54
- const uploadData = {
55
- encryptedDataCID: root.cid.toString(),
56
- identityBoundCiphertext,
57
- plaintextKeyHash,
58
- accessControlConditions:
59
- /** @type {[Record<string, any>]} */ (
60
- /** @type {unknown} */ (accessControlConditions)),
61
- };
62
- const encryptedMetadata = EncryptedMetadata.create(uploadData);
63
- const { cid, bytes } = await encryptedMetadata.archiveBlock();
50
+ const { cid, bytes } = await cryptoAdapter.encodeMetadata(root.cid.toString(), encryptedKey, metadata);
64
51
  controller.enqueue({ cid, bytes });
65
52
  },
66
53
  }))
67
54
  .pipeThrough(new CARWriterStream());
68
55
  },
69
56
  }, {
70
- // if publishToFilecoin is false, the data won't be published to Filecoin, so we need to set pieceHasher to undefined
71
- ...(options.publishToFilecoin === true ? {} : { pieceHasher: undefined }),
57
+ ...uploadOptions,
58
+ // the encrypted data won't be published to Filecoin, so we need to set pieceHasher to undefined
59
+ pieceHasher: undefined,
72
60
  });
73
61
  };
74
62
  /**
75
- * Encrypt a file
63
+ * Encrypt a file using the crypto adapter and return the encrypted payload.
64
+ * The encrypted payload contains the encrypted file, the encrypted symmetric key, and the metadata.
76
65
  *
77
- * @param {import('@lit-protocol/lit-node-client').LitNodeClient} litClient - The Lit client
78
66
  * @param {Type.CryptoAdapter} cryptoAdapter - The crypto adapter responsible for performing
79
67
  * encryption and decryption operations.
80
68
  * @param {Type.BlobLike} file - The file to encrypt
81
- * @param {import('@lit-protocol/types').AccessControlConditions} accessControlConditions - The access control conditions
82
- * @returns {Promise<Type.EncryptedPayload>} - The encrypted file
69
+ * @param {Type.EncryptionConfig} encryptionConfig - The encryption configuration
70
+ * @returns {Promise<Type.EncryptionPayload>} - The encrypted file
83
71
  */
84
- const encryptFile = async (litClient, cryptoAdapter, file, accessControlConditions) => {
72
+ const encryptFile = async (cryptoAdapter, file, encryptionConfig) => {
73
+ // Step 1: Encrypt the file using the crypto adapter
85
74
  const { key, iv, encryptedStream } = await cryptoAdapter.encryptStream(file);
86
- // Combine key and initializationVector for Lit encryption
87
- const dataToEncrypt = base64.encode(new Uint8Array([...key, ...iv]));
88
- const { ciphertext, dataToEncryptHash } = await Lit.encryptString({ dataToEncrypt, accessControlConditions }, litClient);
75
+ // Step 2: Use crypto adapter to encrypt the symmetric key
76
+ const keyResult = await cryptoAdapter.encryptSymmetricKey(key, iv, encryptionConfig);
77
+ // Step 3: Return the encrypted payload
89
78
  return {
90
- identityBoundCiphertext: ciphertext,
91
- plaintextKeyHash: dataToEncryptHash,
79
+ strategy: keyResult.strategy,
80
+ encryptedKey: keyResult.encryptedKey,
81
+ metadata: keyResult.metadata,
92
82
  encryptedBlobLike: { stream: () => encryptedStream },
93
83
  };
94
84
  };
package/dist/index.d.ts CHANGED
@@ -1,3 +1,2 @@
1
- export { Wallet } from "ethers";
2
1
  export { create } from "./core/client.js";
3
2
  //# sourceMappingURL=index.d.ts.map
package/dist/index.js CHANGED
@@ -1,3 +1,2 @@
1
- export { Wallet } from 'ethers';
2
1
  export { create } from './core/client.js';
3
2
  //# sourceMappingURL=index.js.map
@@ -18,9 +18,7 @@ export function getSessionSigs(litClient: LitNodeClient, { wallet, accessControl
18
18
  */
19
19
  export function getPkpSessionSigs(litClient: LitNodeClient, { pkpPublicKey, authMethod, accessControlConditions, dataToEncryptHash, expiration, capabilityAuthSigs, }: Type.PkpSessionSignatureOptions): Promise<import("@lit-protocol/types").SessionSigsMap>;
20
20
  export { encryptString } from "@lit-protocol/encryption";
21
- export function getAccessControlConditions(spaceDID: import("@ucanto/core/schema").Schema<`did:key:${string}` & `did:${string}` & import("multiformats").Phantom<{
22
- protocol: "did:";
23
- }>, any>): import("@lit-protocol/types").AccessControlConditions;
21
+ export function getAccessControlConditions(spaceDID: Type.SpaceDID): import("@lit-protocol/types").AccessControlConditions;
24
22
  export function executeUcanValidationAction(litClient: LitNodeClient, options: Type.ExecuteUcanValidationOptions): Promise<any>;
25
23
  import { LitNodeClient } from '@lit-protocol/lit-node-client';
26
24
  import * as Type from '../types.js';
@@ -1 +1 @@
1
- {"version":3,"file":"lit.d.ts","sourceRoot":"","sources":["../../src/protocols/lit.js"],"names":[],"mappings":"AAsCA;;GAEG;AACH,uDAQC;AAED;;;;GAIG;AACH,0CAJW,aAAa,2FACb,IAAI,CAAC,uBAAuB,GAC1B,OAAO,CAAC,OAAO,qBAAqB,EAAE,cAAc,CAAC,CAsDjE;AAED;;;;;;;GAOG;AACH,6CAJW,aAAa,6GACb,IAAI,CAAC,0BAA0B,GAC7B,OAAO,CAAC,OAAO,qBAAqB,EAAE,cAAc,CAAC,CAqCjE;;AAnIM;;WAFM,OAAO,qBAAqB,EAAE,uBAAuB,CAgBjE;AA6HM,uDAJI,aAAa,WACb,IAAI,CAAC,4BAA4B,gBA4B3C;8BA1L6B,+BAA+B;sBAUvC,aAAa"}
1
+ {"version":3,"file":"lit.d.ts","sourceRoot":"","sources":["../../src/protocols/lit.js"],"names":[],"mappings":"AAsCA;;GAEG;AACH,uDAQC;AAED;;;;GAIG;AACH,0CAJW,aAAa,2FACb,IAAI,CAAC,uBAAuB,GAC1B,OAAO,CAAC,OAAO,qBAAqB,EAAE,cAAc,CAAC,CAsDjE;AAED;;;;;;;GAOG;AACH,6CAJW,aAAa,6GACb,IAAI,CAAC,0BAA0B,GAC7B,OAAO,CAAC,OAAO,qBAAqB,EAAE,cAAc,CAAC,CAqCjE;;AAnIM,qDAHI,IAAI,CAAC,QAAQ,GACX,OAAO,qBAAqB,EAAE,uBAAuB,CAgBjE;AA6HM,uDAJI,aAAa,WACb,IAAI,CAAC,4BAA4B,gBA4B3C;8BA1L6B,+BAA+B;sBAUvC,aAAa"}
package/dist/types.d.ts CHANGED
@@ -1,57 +1,153 @@
1
1
  import { Wallet } from 'ethers';
2
2
  import { UnknownLink } from 'multiformats';
3
3
  import { Client as StorachaClient } from '@storacha/client';
4
- import { Result, Failure, Block } from '@ucanto/interface';
5
- import { LitNodeClient } from '@lit-protocol/lit-node-client';
4
+ import { Result, Failure, Block, Proof } from '@ucanto/interface';
6
5
  import { AccessControlConditions, AuthMethod, AuthSig, SessionSigsMap } from '@lit-protocol/types';
7
- import type { BlobLike, AnyLink, Signer, DID, SigAlg } from '@storacha/client/types';
6
+ import type { BlobLike, AnyLink, Signer, DID, SigAlg, UploadOptions } from '@storacha/client/types';
8
7
  export type { IPLDBlock } from '@ucanto/interface';
9
- export type { SpaceDID } from '@storacha/capabilities/utils';
8
+ export type { SpaceDID } from '@storacha/capabilities/types';
10
9
  export type { UnknownFormat } from '@storacha/capabilities/types';
11
10
  export type { Result, UnknownLink };
12
11
  export type { BlobLike, AnyLink };
12
+ export type { UploadOptions } from '@storacha/client/types';
13
+ import type { SpaceDID } from '@storacha/capabilities/types';
13
14
  export interface EncryptedClient {
14
- uploadEncryptedFile(file: BlobLike): Promise<AnyLink>;
15
- retrieveAndDecryptFile(signer: LitWalletSigner | LitPkpSigner, cid: AnyLink, delegationCAR: Uint8Array): Promise<ReadableStream>;
15
+ encryptAndUploadFile(file: BlobLike, config: EncryptionConfig, uploadOptions?: UploadOptions): Promise<AnyLink>;
16
+ retrieveAndDecryptFile(cid: AnyLink, delegationCAR: Uint8Array, decryptionOptions: DecryptionOptions): Promise<ReadableStream>;
16
17
  }
17
18
  export type EncryptedClientOptions = {
18
19
  storachaClient: StorachaClient;
19
20
  cryptoAdapter: CryptoAdapter;
20
- litClient?: LitNodeClient;
21
21
  gatewayURL?: URL;
22
22
  };
23
- export interface CryptoAdapter {
24
- encryptStream(data: BlobLike): Promise<EncryptOutput>;
25
- decryptStream(encryptedData: ReadableStream, key: Uint8Array, iv: Uint8Array): Promise<ReadableStream>;
26
- }
27
23
  export interface EncryptOutput {
28
24
  key: Uint8Array;
29
25
  iv: Uint8Array;
30
26
  encryptedStream: ReadableStream;
31
27
  }
32
- export type EncryptedPayload = {
33
- identityBoundCiphertext: string;
28
+ export interface SymmetricCrypto {
29
+ encryptStream(data: BlobLike): Promise<EncryptOutput>;
30
+ decryptStream(encryptedData: ReadableStream, key: Uint8Array, iv: Uint8Array): Promise<ReadableStream>;
31
+ combineKeyAndIV(key: Uint8Array, iv: Uint8Array): Uint8Array;
32
+ splitKeyAndIV(combined: Uint8Array): {
33
+ key: Uint8Array;
34
+ iv: Uint8Array;
35
+ };
36
+ }
37
+ export interface CryptoAdapter {
38
+ encryptStream(data: BlobLike): Promise<EncryptOutput>;
39
+ decryptStream(encryptedData: ReadableStream, key: Uint8Array, iv: Uint8Array): Promise<ReadableStream>;
40
+ encryptSymmetricKey(key: Uint8Array, iv: Uint8Array, encryptionConfig: EncryptionConfig): Promise<EncryptedKeyResult>;
41
+ decryptSymmetricKey(encryptedKey: string, configs: {
42
+ decryptionOptions: DecryptionOptions;
43
+ metadata: ExtractedMetadata;
44
+ delegationCAR: Uint8Array;
45
+ resourceCID: AnyLink;
46
+ issuer: Signer<DID, SigAlg>;
47
+ audience: DID;
48
+ }): Promise<{
49
+ key: Uint8Array;
50
+ iv: Uint8Array;
51
+ }>;
52
+ extractEncryptedMetadata(car: Uint8Array): ExtractedMetadata;
53
+ getEncryptedKey(metadata: ExtractedMetadata): string;
54
+ encodeMetadata(encryptedDataCID: string, encryptedKey: string, metadata: LitKeyMetadata | KMSKeyMetadata): Promise<{
55
+ cid: AnyLink;
56
+ bytes: Uint8Array;
57
+ }>;
58
+ }
59
+ export interface EncryptionConfig {
60
+ /**
61
+ * The issuer of the encryption request
62
+ */
63
+ issuer: Signer<DID, SigAlg>;
64
+ /**
65
+ * The DID of the space to encrypt the file for
66
+ */
67
+ spaceDID: SpaceDID;
68
+ /**
69
+ * The location of the KMS key to use for encryption
70
+ */
71
+ location?: string;
72
+ /**
73
+ * The keyring of the KMS key to use for encryption
74
+ */
75
+ keyring?: string;
76
+ }
77
+ export interface DecryptionOptions {
78
+ wallet?: Wallet;
79
+ sessionSigs?: SessionSigsMap;
80
+ pkpPublicKey?: string;
81
+ authMethod?: AuthMethod;
82
+ spaceDID?: SpaceDID;
83
+ delegationProof?: Proof;
84
+ }
85
+ export interface EncryptedKeyResult {
86
+ strategy: EncryptionStrategy;
87
+ encryptedKey: string;
88
+ metadata: LitKeyMetadata | KMSKeyMetadata;
89
+ }
90
+ export type EncryptionStrategy = 'lit' | 'kms';
91
+ export interface LitKeyMetadata {
34
92
  plaintextKeyHash: string;
93
+ accessControlConditions: AccessControlConditions;
94
+ }
95
+ export interface KMSKeyMetadata {
96
+ space: SpaceDID;
97
+ kms: {
98
+ provider: string;
99
+ keyId: string;
100
+ algorithm: string;
101
+ };
102
+ }
103
+ export type EncryptionPayload = {
104
+ strategy: EncryptionStrategy;
105
+ encryptedKey: string;
106
+ metadata: LitKeyMetadata | KMSKeyMetadata;
35
107
  encryptedBlobLike: BlobLike;
36
108
  };
37
109
  export type GenericAccessControlCondition = [Record<string, any>];
38
- export interface EncryptedMetadataInput {
110
+ export interface LitMetadataInput {
39
111
  encryptedDataCID: string;
40
112
  identityBoundCiphertext: string;
41
113
  plaintextKeyHash: string;
42
- accessControlConditions: GenericAccessControlCondition;
114
+ accessControlConditions: AccessControlConditions;
43
115
  }
44
- export interface EncryptedMetadata {
116
+ export interface LitMetadata {
45
117
  encryptedDataCID: UnknownLink;
46
118
  identityBoundCiphertext: Uint8Array;
47
119
  plaintextKeyHash: Uint8Array;
48
- accessControlConditions: GenericAccessControlCondition;
120
+ accessControlConditions: AccessControlConditions;
49
121
  }
50
- export interface EncryptedMetadataView extends EncryptedMetadata {
122
+ export interface LitMetadataView extends LitMetadata {
51
123
  /** Encode it to a CAR file. */
52
- archive(): Promise<Result<Uint8Array>>;
53
124
  archiveBlock(): Promise<Block>;
54
- toJSON(): EncryptedMetadataInput;
125
+ toJSON(): LitMetadataInput;
126
+ }
127
+ export interface KMSMetadata {
128
+ encryptedDataCID: UnknownLink;
129
+ encryptedSymmetricKey: string;
130
+ space: SpaceDID;
131
+ kms: {
132
+ provider: string;
133
+ keyId: string;
134
+ algorithm: string;
135
+ };
136
+ }
137
+ export interface KMSMetadataInput {
138
+ encryptedDataCID: string;
139
+ encryptedSymmetricKey: string;
140
+ space: string;
141
+ kms: {
142
+ provider: string;
143
+ keyId: string;
144
+ algorithm: string;
145
+ };
146
+ }
147
+ export interface KMSMetadataView extends KMSMetadata {
148
+ /** Encode it to a CAR file. */
149
+ archiveBlock(): Promise<Block>;
150
+ toJSON(): KMSMetadataInput;
55
151
  }
56
152
  export interface DecodeFailure extends Failure {
57
153
  name: 'DecodeFailure';
@@ -94,4 +190,23 @@ export interface ExecuteUcanValidationOptions {
94
190
  accessControlConditions: AccessControlConditions;
95
191
  wrappedInvocationJSON: string;
96
192
  }
193
+ export type ExtractedMetadata = LitExtractedMetadata | KMSExtractedMetadata;
194
+ export interface LitExtractedMetadata {
195
+ strategy: 'lit';
196
+ encryptedDataCID: string;
197
+ identityBoundCiphertext: string;
198
+ plaintextKeyHash: string;
199
+ accessControlConditions: AccessControlConditions;
200
+ }
201
+ export interface KMSExtractedMetadata {
202
+ strategy: 'kms';
203
+ encryptedDataCID: string;
204
+ encryptedSymmetricKey: string;
205
+ space: SpaceDID;
206
+ kms: {
207
+ provider: string;
208
+ keyId: string;
209
+ algorithm: string;
210
+ };
211
+ }
97
212
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@storacha/encrypt-upload-client",
3
3
  "type": "module",
4
- "version": "0.0.39",
4
+ "version": "1.0.0",
5
5
  "license": "Apache-2.0 OR MIT",
6
6
  "description": "Client for upload and download encrypted files",
7
7
  "author": "Storacha",
@@ -37,21 +37,21 @@
37
37
  "import": "./dist/index.js",
38
38
  "require": "./dist/index.js"
39
39
  },
40
- "./node": {
41
- "import": "./dist/crypto-adapters/node-crypto-adapter.js",
42
- "require": "./dist/crypto-adapters/node-crypto-adapter.js"
40
+ "./factories.node": {
41
+ "import": "./dist/crypto/factories.node.js",
42
+ "require": "./dist/crypto/factories.node.js"
43
43
  },
44
- "./browser": {
45
- "import": "./dist/crypto-adapters/browser-crypto-adapter.js",
46
- "require": "./dist/crypto-adapters/browser-crypto-adapter.js"
44
+ "./factories.browser": {
45
+ "import": "./dist/crypto/factories.browser.js",
46
+ "require": "./dist/crypto/factories.browser.js"
47
47
  },
48
- "./crypto-adapters/browser-crypto-adapter": {
49
- "import": "./dist/crypto-adapters/browser-crypto-adapter.js",
50
- "types": "./dist/crypto-adapters/browser-crypto-adapter.d.ts"
48
+ "./node": {
49
+ "import": "./dist/crypto/symmetric/node-aes-cbc-crypto.js",
50
+ "require": "./dist/crypto/symmetric/node-aes-cbc-crypto.js"
51
51
  },
52
- "./crypto-adapters/node-crypto-adapter": {
53
- "import": "./dist/crypto-adapters/node-crypto-adapter.js",
54
- "types": "./dist/crypto-adapters/node-crypto-adapter.d.ts"
52
+ "./browser": {
53
+ "import": "./dist/crypto/symmetric/generic-aes-ctr-streaming-crypto.js",
54
+ "require": "./dist/crypto/symmetric/generic-aes-ctr-streaming-crypto.js"
55
55
  },
56
56
  "./types": "./dist/types.js"
57
57
  },
@@ -80,13 +80,15 @@
80
80
  "ethers": "5.7.1",
81
81
  "ipfs-unixfs-exporter": "^10.0.0",
82
82
  "multiformats": "^13.3.3",
83
- "@storacha/capabilities": "^1.7.0",
84
- "@storacha/upload-client": "^1.2.4",
85
- "@storacha/client": "^1.4.2"
83
+ "@storacha/capabilities": "^1.8.0",
84
+ "@storacha/client": "^1.5.0",
85
+ "@storacha/upload-client": "^1.2.5"
86
86
  },
87
87
  "devDependencies": {
88
88
  "@lit-protocol/types": "^7.0.8",
89
+ "@playwright/test": "^1.29.2",
89
90
  "esbuild": "^0.25.1",
91
+ "mkcert": "^3.2.0",
90
92
  "typescript": "^5.8.3",
91
93
  "@storacha/eslint-config": "^0.0.0"
92
94
  },
@@ -110,7 +112,11 @@
110
112
  "coverage",
111
113
  "lit-actions",
112
114
  "src/types.js",
113
- "*.min.js"
115
+ "*.min.js",
116
+ "**/*.playwright.spec.js",
117
+ "test/mocks/playwright/**",
118
+ "playwright.config.js",
119
+ "playwright-report/**/*"
114
120
  ]
115
121
  },
116
122
  "depcheck": {
@@ -135,7 +141,10 @@
135
141
  "lint:fix": "tsc --build && eslint '**/*.{js,ts}' --fix && prettier --write '**/*.{js,ts,yml,json}' --ignore-path ../../.gitignore",
136
142
  "build-actions": "node lit-actions/esbuild.js",
137
143
  "attw": "attw --pack .",
144
+ "prepare-environment": "playwright install",
138
145
  "rc": "npm version prerelease --preid rc",
139
- "test": "node --test test/*.spec.js"
146
+ "test": "node --test $(find test -name '*.spec.js' ! -name '*.playwright.spec.js')",
147
+ "test:setup-certs": "mkdir -p test/mocks/playwright && cd test/mocks/playwright && (test -f cert.key || (npx mkcert create-ca && npx mkcert create-cert --domains localhost 127.0.0.1 ::1))",
148
+ "test:browser": "npm run test:setup-certs && npx playwright test"
140
149
  }
141
150
  }
@@ -1 +0,0 @@
1
- {"version":3,"file":"encrypted-metadata.d.ts","sourceRoot":"","sources":["../../src/core/encrypted-metadata.js"],"names":[],"mappings":"AAUA,sBAAuB,wBAAwB,CAAA;AAE/C;;;;;;;YAUE;AAEF;;;;;YAQE;AA8EK,+CAHI,KAAK,CAAC,iBAAiB,GAAC,KAAK,CAAC,sBAAsB,GAClD,KAAK,CAAC,qBAAqB,CAGO;AAMxC,0CAHI,KAAK,CAAC,qBAAqB,GACzB,KAAK,CAAC,sBAAsB,CASvC;AAMK,8CAHI,KAAK,CAAC,sBAAsB,GAC1B,KAAK,CAAC,iBAAiB,CASlC;AAMK,qDAHI,KAAK,CAAC,iBAAiB,GACrB,OAAO,CAAC,OAAO,mBAAmB,EAAE,KAAK,CAAC,CAOtD;AAMM,gDAHI,KAAK,CAAC,iBAAiB,GACrB,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAK7C;AAMM,iCAHI,UAAU,GACR,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,qBAAqB,EAAE,KAAK,CAAC,aAAa,CAAC,CAiB1E;AAOM,+BAHJ;IAAgC,IAAI,EAA5B,KAAK,CAAC,SAAS;CACvB,GAAU,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,qBAAqB,EAAE,KAAK,CAAC,aAAa,CAAC,CAe1E;sBApMqB,mBAAmB;uBAEF,cAAc;uBAE9B,aAAa"}
@@ -1,42 +0,0 @@
1
- /**
2
- * BrowserCryptoAdapter implements the CryptoAdapter interface for browser environments.
3
- * It uses AES-CTR mode for encryption via the Web Crypto API.
4
- *
5
- * Why AES-CTR?
6
- * - We use AES-CTR with pseudo-streaming (buffering chunks before emitting) for simplicity and streaming support.
7
- * - AES-CTR allows chunked processing without padding, making it suitable for large files and browser environments.
8
- * - The Web Crypto API supports AES-CTR natively in all modern browsers and in Node.js 19+ as globalThis.crypto.
9
- * - For Node.js <19, you must polyfill globalThis.crypto (e.g., with `node --experimental-global-webcrypto` or a package like @peculiar/webcrypto).
10
- * - This allows for processing large files in chunks with no padding issues found in other libraries such as node-forge.
11
- *
12
- * Note: This implementation is currently pseudo-streaming: it buffers all encrypted/decrypted chunks before emitting them as a stream.
13
- * For true streaming (lower memory usage), we need to refactor it to emit each chunk as soon as it is processed.
14
- *
15
- * @class
16
- * @implements {Type.CryptoAdapter}
17
- */
18
- export class BrowserCryptoAdapter implements Type.CryptoAdapter {
19
- generateKey(): Promise<Uint8Array<ArrayBuffer>>;
20
- /**
21
- * Encrypt a stream of data using AES-CTR (chunked, Web Crypto API).
22
- *
23
- * @param {Blob} data The data to encrypt.
24
- * @returns {Promise<{ key: Uint8Array, iv: Uint8Array, encryptedStream: ReadableStream }>}
25
- */
26
- encryptStream(data: Blob): Promise<{
27
- key: Uint8Array;
28
- iv: Uint8Array;
29
- encryptedStream: ReadableStream;
30
- }>;
31
- /**
32
- * Decrypt a stream of data using AES-CTR (chunked, Web Crypto API).
33
- *
34
- * @param {ReadableStream} encryptedData The encrypted data stream.
35
- * @param {Uint8Array} key The encryption key.
36
- * @param {Uint8Array} iv The initialization vector (counter).
37
- * @returns {Promise<ReadableStream>} A stream of decrypted data.
38
- */
39
- decryptStream(encryptedData: ReadableStream, key: Uint8Array, iv: Uint8Array): Promise<ReadableStream>;
40
- }
41
- import * as Type from '../types.js';
42
- //# sourceMappingURL=browser-crypto-adapter.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"browser-crypto-adapter.d.ts","sourceRoot":"","sources":["../../src/crypto-adapters/browser-crypto-adapter.js"],"names":[],"mappings":"AAOA;;;;;;;;;;;;;;;;GAgBG;AACH,6CAFgB,IAAI,CAAC,aAAa;IAGhC,gDAEC;IAED;;;;;OAKG;IACH,oBAHW,IAAI,GACF,OAAO,CAAC;QAAE,GAAG,EAAE,UAAU,CAAC;QAAC,EAAE,EAAE,UAAU,CAAC;QAAC,eAAe,EAAE,cAAc,CAAA;KAAE,CAAC,CAoDzF;IAED;;;;;;;OAOG;IACH,6BALW,cAAc,OACd,UAAU,MACV,UAAU,GACR,OAAO,CAAC,cAAc,CAAC,CA8CnC;CACF;sBA5IqB,aAAa"}
@@ -1,109 +0,0 @@
1
- import * as Type from '../types.js';
2
- const ENCRYPTION_ALGORITHM = 'AES-CTR';
3
- const KEY_LENGTH = 256; // bits
4
- const IV_LENGTH = 16; // bytes (128 bits, used as counter)
5
- const COUNTER_LENGTH = 64; // bits (Web Crypto API default for AES-CTR)
6
- /**
7
- * BrowserCryptoAdapter implements the CryptoAdapter interface for browser environments.
8
- * It uses AES-CTR mode for encryption via the Web Crypto API.
9
- *
10
- * Why AES-CTR?
11
- * - We use AES-CTR with pseudo-streaming (buffering chunks before emitting) for simplicity and streaming support.
12
- * - AES-CTR allows chunked processing without padding, making it suitable for large files and browser environments.
13
- * - The Web Crypto API supports AES-CTR natively in all modern browsers and in Node.js 19+ as globalThis.crypto.
14
- * - For Node.js <19, you must polyfill globalThis.crypto (e.g., with `node --experimental-global-webcrypto` or a package like @peculiar/webcrypto).
15
- * - This allows for processing large files in chunks with no padding issues found in other libraries such as node-forge.
16
- *
17
- * Note: This implementation is currently pseudo-streaming: it buffers all encrypted/decrypted chunks before emitting them as a stream.
18
- * For true streaming (lower memory usage), we need to refactor it to emit each chunk as soon as it is processed.
19
- *
20
- * @class
21
- * @implements {Type.CryptoAdapter}
22
- */
23
- export class BrowserCryptoAdapter {
24
- async generateKey() {
25
- return globalThis.crypto.getRandomValues(new Uint8Array(KEY_LENGTH / 8));
26
- }
27
- /**
28
- * Encrypt a stream of data using AES-CTR (chunked, Web Crypto API).
29
- *
30
- * @param {Blob} data The data to encrypt.
31
- * @returns {Promise<{ key: Uint8Array, iv: Uint8Array, encryptedStream: ReadableStream }>}
32
- */
33
- async encryptStream(data) {
34
- const key = await this.generateKey();
35
- const iv = globalThis.crypto.getRandomValues(new Uint8Array(IV_LENGTH));
36
- const cryptoKey = await globalThis.crypto.subtle.importKey('raw', key, { name: ENCRYPTION_ALGORITHM }, false, ['encrypt', 'decrypt']);
37
- const reader = data.stream().getReader();
38
- let counter = new Uint8Array(iv); // Copy the IV for counter
39
- let chunkIndex = 0;
40
- /** @type {Uint8Array[]} */
41
- const encryptedChunks = [];
42
- // eslint-disable-next-line no-constant-condition
43
- while (true) {
44
- const { done, value } = await reader.read();
45
- if (done)
46
- break;
47
- // Increment counter for each chunk
48
- const chunkCounter = new Uint8Array(counter);
49
- // For each chunk, increment the last byte of the counter
50
- chunkCounter[chunkCounter.length - 1] += chunkIndex;
51
- chunkIndex++;
52
- const encrypted = new Uint8Array(await globalThis.crypto.subtle.encrypt({
53
- name: ENCRYPTION_ALGORITHM,
54
- counter: chunkCounter,
55
- length: COUNTER_LENGTH,
56
- }, cryptoKey, value));
57
- encryptedChunks.push(encrypted);
58
- }
59
- const encryptedStream = new ReadableStream({
60
- start(controller) {
61
- for (const chunk of encryptedChunks) {
62
- controller.enqueue(chunk);
63
- }
64
- controller.close();
65
- },
66
- });
67
- return { key, iv, encryptedStream };
68
- }
69
- /**
70
- * Decrypt a stream of data using AES-CTR (chunked, Web Crypto API).
71
- *
72
- * @param {ReadableStream} encryptedData The encrypted data stream.
73
- * @param {Uint8Array} key The encryption key.
74
- * @param {Uint8Array} iv The initialization vector (counter).
75
- * @returns {Promise<ReadableStream>} A stream of decrypted data.
76
- */
77
- async decryptStream(encryptedData, key, iv) {
78
- const cryptoKey = await globalThis.crypto.subtle.importKey('raw', key, { name: ENCRYPTION_ALGORITHM }, false, ['encrypt', 'decrypt']);
79
- const reader = encryptedData.getReader();
80
- let counter = new Uint8Array(iv);
81
- let chunkIndex = 0;
82
- /** @type {Uint8Array[]} */
83
- const decryptedChunks = [];
84
- // eslint-disable-next-line no-constant-condition
85
- while (true) {
86
- const { done, value } = await reader.read();
87
- if (done)
88
- break;
89
- const chunkCounter = new Uint8Array(counter);
90
- chunkCounter[chunkCounter.length - 1] += chunkIndex;
91
- chunkIndex++;
92
- const decrypted = new Uint8Array(await globalThis.crypto.subtle.decrypt({
93
- name: ENCRYPTION_ALGORITHM,
94
- counter: chunkCounter,
95
- length: COUNTER_LENGTH,
96
- }, cryptoKey, value));
97
- decryptedChunks.push(decrypted);
98
- }
99
- return new ReadableStream({
100
- start(controller) {
101
- for (const chunk of decryptedChunks) {
102
- controller.enqueue(chunk);
103
- }
104
- controller.close();
105
- },
106
- });
107
- }
108
- }
109
- //# sourceMappingURL=browser-crypto-adapter.js.map
@@ -1,17 +0,0 @@
1
- /** @implements {Type.CryptoAdapter} */
2
- export class NodeCryptoAdapter implements Type.CryptoAdapter {
3
- /** @param {Type.BlobLike} data */
4
- encryptStream(data: Type.BlobLike): Promise<{
5
- key: Buffer<ArrayBufferLike>;
6
- iv: Buffer<ArrayBufferLike>;
7
- encryptedStream: ReadableStream<any>;
8
- }>;
9
- /**
10
- * @param {ReadableStream} encryptedData
11
- * @param {Uint8Array} key
12
- * @param {Uint8Array} iv
13
- */
14
- decryptStream(encryptedData: ReadableStream, key: Uint8Array, iv: Uint8Array): Promise<ReadableStream<any>>;
15
- }
16
- import * as Type from '../types.js';
17
- //# sourceMappingURL=node-crypto-adapter.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"node-crypto-adapter.d.ts","sourceRoot":"","sources":["../../src/crypto-adapters/node-crypto-adapter.js"],"names":[],"mappings":"AAMA,uCAAuC;AACvC,0CADiB,IAAI,CAAC,aAAa;IAEjC,mCAAmC;IACnC,oBADY,IAAI,CAAC,QAAQ;;;;OA+BxB;IAED;;;;OAIG;IACH,6BAJW,cAAc,OACd,UAAU,MACV,UAAU,gCA8BpB;CACF;sBAzEqB,aAAa"}