import { expectAssignable, expectError, expectType, expectNotType, expectNotAssignable } from 'tsd'; import { RangeOptions, AWSEncryptionKeyOptions, AzureEncryptionKeyOptions, ClientEncryption, GCPEncryptionKeyOptions, ClientEncryptionEncryptOptions, KMSProviders } from '../..'; type RequiredCreateEncryptedCollectionSettings = Parameters< ClientEncryption['createEncryptedCollection'] >[2]; expectError({}); expectError({ provider: 'blah!', createCollectionOptions: { encryptedFields: {} } }); expectError({ provider: 'aws', createCollectionOptions: {} }); expectError({ provider: 'aws', createCollectionOptions: { encryptedFields: null } }); expectAssignable({ provider: 'aws', createCollectionOptions: { encryptedFields: {} } }); expectAssignable({ provider: 'aws', createCollectionOptions: { encryptedFields: {} }, masterKey: { } as AWSEncryptionKeyOptions | AzureEncryptionKeyOptions | GCPEncryptionKeyOptions }); { // NODE-5041 - incorrect spelling of rangeOpts in typescript definitions const options = {} as ClientEncryptionEncryptOptions; expectType(options.rangeOptions) } { // KMSProviders // aws expectAssignable({ accessKeyId: '', secretAccessKey: '' }); expectAssignable({ accessKeyId: '', secretAccessKey: '', sessionToken: undefined }); expectAssignable({ accessKeyId: '', secretAccessKey: '', sessionToken: '' }); // automatic expectAssignable({}); // azure expectAssignable({ tenantId: 'a', clientId: 'a', clientSecret: 'a' }); expectAssignable({ tenantId: 'a', clientId: 'a', clientSecret: 'a' }); expectAssignable({ tenantId: 'a', clientId: 'a', clientSecret: 'a', identityPlatformEndpoint: undefined }); expectAssignable({ tenantId: 'a', clientId: 'a', clientSecret: 'a', identityPlatformEndpoint: '' }); expectAssignable({ accessToken: 'a' }); expectAssignable({}); // gcp expectAssignable({ email: 'a', privateKey: 'a' }); expectAssignable({ email: 'a', privateKey: 'a', endpoint: undefined }); expectAssignable({ email: 'a', privateKey: 'a', endpoint: 'a' }); expectAssignable({ accessToken: 'a' }); // automatic expectAssignable({}); }