packages/core/test-d/index.test-d.ts (216 lines of code) (raw):

/* eslint-disable @typescript-eslint/no-unused-vars */ import { Namespace } from 'cls-hooked'; import * as http from 'http'; import * as https from 'https'; import { Socket } from 'net'; import { expectType, expectError } from 'tsd'; import * as url from 'url'; import * as AWSXRay from '../lib'; import { Segment, TraceID } from '../lib'; expectType<void>(AWSXRay.plugins.EC2Plugin.getData((metadata?: AWSXRay.plugins.EC2Metadata) => { })); expectType<void>(AWSXRay.plugins.ECSPlugin.getData((metadata?: AWSXRay.plugins.ECSMetadata) => { })); expectType<void>( AWSXRay.plugins.ElasticBeanstalkPlugin.getData((metadata?: AWSXRay.plugins.ElasticBeanstalkMetadata) => { }) ); expectType<void>(AWSXRay.config([AWSXRay.plugins.EC2Plugin, AWSXRay.plugins.ECSPlugin])); expectType<void>(AWSXRay.config([AWSXRay.plugins.ElasticBeanstalkPlugin])); expectType<void>(AWSXRay.setAWSWhitelist('/path/here')); expectType<void>(AWSXRay.setAWSWhitelist({})); expectError(AWSXRay.setAWSWhitelist()); expectError(AWSXRay.setAWSWhitelist(null)); expectError(AWSXRay.setAWSWhitelist(0)); expectType<void>(AWSXRay.appendAWSWhitelist('/path/here')); expectType<void>(AWSXRay.appendAWSWhitelist({})); expectError(AWSXRay.appendAWSWhitelist()); expectError(AWSXRay.appendAWSWhitelist(null)); expectError(AWSXRay.appendAWSWhitelist(0)); expectType<void>(AWSXRay.setStreamingThreshold(10)); expectType<void>(AWSXRay.setLogger(console)); AWSXRay.getLogger().debug('debug'); AWSXRay.getLogger().info({ foo: 'bar' }, 'info'); AWSXRay.getLogger().warn('warn', 123); AWSXRay.getLogger().error('error'); expectType<void>(AWSXRay.setDaemonAddress('192.168.0.23:8080')); const traceId = '1-57fbe041-2c7ad569f5d6ff149137be86'; const traceId2 = new TraceID(); const traceId3 = new TraceID('0', '0'); const segment = new AWSXRay.Segment('test', traceId); expectType<TraceID>(TraceID.FromString(traceId)); expectType<TraceID>(TraceID.Invalid()); expectType<string>(traceId2.toString()); expectType<string>(traceId3.toString()); expectType<string>(AWSXRay.captureFunc('tracedFcn', () => 'OK', segment)); expectType<void>(AWSXRay.captureFunc('tracedFcn', () => { return; })); expectType<never>(AWSXRay.captureFunc('tracedFcn', () => { throw new Error(); })); let subseg: AWSXRay.Subsegment | undefined; expectType<void>(AWSXRay.captureFunc('tracedFcn', (sub) => { subseg = sub; }, segment)); async function fcn(seg?: AWSXRay.Subsegment) { if (seg) { seg.close(); } return 'OK'; } expectType<Promise<string>>(AWSXRay.captureAsyncFunc('tracedFcn', fcn, segment)); expectType<Promise<string>>(AWSXRay.captureAsyncFunc('tracedFcn', fcn)); function tracedFcn(callback: (param0: any, param1: any) => any) { callback('hello', 'there'); } function callback(param0: any, param1: any) { console.log({ param0, param1 }); } tracedFcn(AWSXRay.captureCallbackFunc('callback', callback)); tracedFcn(AWSXRay.captureCallbackFunc('callback', callback, segment)); function httpSubsegmentCallback(subsegment: AWSXRay.Subsegment, req: http.ClientRequest, res: http.IncomingMessage | null, error: Error) { console.log({ subsegment, req, res, error }); } expectType<typeof http>(AWSXRay.captureHTTPs(http)); expectType<typeof https>(AWSXRay.captureHTTPs(https)); expectType<typeof http>(AWSXRay.captureHTTPs(http, true)); expectType<typeof https>(AWSXRay.captureHTTPs(https, true)); expectType<typeof http>(AWSXRay.captureHTTPs(http, true, httpSubsegmentCallback)); expectType<typeof https>(AWSXRay.captureHTTPs(https, true, httpSubsegmentCallback)); expectType<void>(AWSXRay.captureHTTPsGlobal(http)); expectType<void>(AWSXRay.captureHTTPsGlobal(https)); expectType<void>(AWSXRay.captureHTTPsGlobal(http, true)); expectType<void>(AWSXRay.captureHTTPsGlobal(https, true)); expectType<void>(AWSXRay.captureHTTPsGlobal(http, true, httpSubsegmentCallback)); expectType<void>(AWSXRay.captureHTTPsGlobal(https, true, httpSubsegmentCallback)); expectType<void>(AWSXRay.capturePromise()); expectType<void>(AWSXRay.capturePromise.patchThirdPartyPromise(Promise)); expectType<'error' | 'fault' | undefined>(AWSXRay.utils.getCauseTypeFromHttpStatus(200)); expectType<boolean>(AWSXRay.utils.wildcardMatch('*', 'foo')); expectType<boolean>(AWSXRay.utils.LambdaUtils.validTraceData('moop')); expectType<boolean>(AWSXRay.utils.LambdaUtils.validTraceData()); expectType<boolean>(AWSXRay.utils.LambdaUtils.populateTraceData(segment, 'moop')); expectType<{ [key: string]: string }>(AWSXRay.utils.processTraceData()); expectType<{ [key: string]: string }>(AWSXRay.utils.processTraceData('Root=1-58ed6027-14afb2e09172c337713486c0;')); const urlWithoutQuery: Omit<url.URL, 'hash'> = AWSXRay.utils.objectWithoutProperties( new url.URL('url'), ['hash'], true ); expectError(urlWithoutQuery.query); new AWSXRay.database.SqlData('databaseVer', 'driverVer', 'user', 'url', 'queryType'); const sqlData: AWSXRay.database.SqlData = new AWSXRay.database.SqlData(); expectType<string | undefined>(sqlData.database_version); expectType<string | undefined>(sqlData.driver_version); expectType<string | undefined>(sqlData.preparation); expectType<string | undefined>(sqlData.url); expectType<string | undefined>(sqlData.user); expectType<void>(AWSXRay.middleware.enableDynamicNaming()); expectType<void>(AWSXRay.middleware.enableDynamicNaming('ww.*-moop.com')); expectType<boolean>(AWSXRay.middleware.dynamicNaming); expectType<string | null>(AWSXRay.middleware.hostPattern); expectType<{ [key: string]: string }>(AWSXRay.middleware.processHeaders()); expectType<{ [key: string]: string }>(AWSXRay.middleware.processHeaders({})); expectType<{ [key: string]: string }>(AWSXRay.middleware.processHeaders({ headers: {} })); expectType<{ [key: string]: string }>( AWSXRay.middleware.processHeaders({ headers: { 'x-amzn-trace-id': 'Root=' + traceId } }) ); expectType<void>(AWSXRay.middleware.setDefaultName('defaultName')); expectType<string>(AWSXRay.middleware.resolveName('www.myhost.com')); expectType<string>(AWSXRay.middleware.resolveName()); expectType<void>(AWSXRay.middleware.disableCentralizedSampling()); expectType<void>(AWSXRay.middleware.setSamplingRules('/path/here')); const rulesConfig: AWSXRay.middleware.RulesConfig = { version: 2, rules: [ { description: 'Player moves.', host: '*', http_method: '*', url_path: '/api/move/*', fixed_target: 0, rate: 1 } ], default: { fixed_target: 0, rate: 0 } }; expectType<void>(AWSXRay.middleware.setSamplingRules(rulesConfig)); expectType<void>(AWSXRay.middleware.middlewareLog('log-message', 'https://example.org', segment)); expectType<Namespace>(AWSXRay.getNamespace()); expectType<AWSXRay.Segment | AWSXRay.Subsegment | undefined>(AWSXRay.resolveSegment(segment)); expectType<AWSXRay.Segment | AWSXRay.Subsegment | undefined>(AWSXRay.resolveSegment(undefined)); expectType<AWSXRay.Segment | AWSXRay.Subsegment | undefined>(AWSXRay.resolveSegment(null)); expectType<AWSXRay.Segment | AWSXRay.Subsegment | undefined>(AWSXRay.resolveSegment()); expectType<AWSXRay.Segment | AWSXRay.Subsegment | undefined>(AWSXRay.getSegment()); expectType<void>(AWSXRay.setSegment(segment)); expectType<boolean>(AWSXRay.isAutomaticMode()); expectType<void>(AWSXRay.enableAutomaticMode()); expectType<void>(AWSXRay.enableManualMode()); expectType<void>(AWSXRay.setContextMissingStrategy('LOG_ERROR')); expectType<void>(AWSXRay.setContextMissingStrategy('RUNTIME_ERROR')); expectType<void>(AWSXRay.setContextMissingStrategy('IGNORE_ERROR')); expectType<void>(AWSXRay.setContextMissingStrategy(function() { })); expectError(AWSXRay.setContextMissingStrategy('moop')); expectError(AWSXRay.setContextMissingStrategy({})); const rootId = '1-57fbe041-2c7ad569f5d6ff149137be86'; const parentId = 'f9c6e4f0b5116501'; new AWSXRay.Segment('foo', rootId); new AWSXRay.Segment('foo', null, parentId); new AWSXRay.Segment('foo'); expectType<void>(segment.setUser('user')); expectType<void>(segment.setSDKData({ sdk_version: '1.0.0-beta' })); expectType<void>(segment.setMatchedSamplingRule('rule')); expectType<void>(segment.setServiceData({ version: '2.3.0', package: 'sample-app' })); expectType<void>(segment.addPluginData({ elastic_beanstalk: { environment: 'my_environment_name' } })); const incomingMessage = new http.IncomingMessage(new Socket()); const serverResponse = new http.ServerResponse(incomingMessage); expectType<void>(segment.addIncomingRequestData(new AWSXRay.middleware.IncomingRequestData(incomingMessage))); expectType<Segment>(AWSXRay.middleware.traceRequestResponseCycle(incomingMessage, serverResponse)); function testSegmentLike(segmentLike: AWSXRay.Segment | AWSXRay.Subsegment) { expectType<void>(segmentLike.addAnnotation('key', true)); expectType<void>(segmentLike.addAnnotation('key', 'value')); expectType<void>(segmentLike.addAnnotation('key', 123)); expectType<void>(segmentLike.addMetadata('key', [1, 2, 3])); expectType<void>(segmentLike.addMetadata('key', 123)); expectType<void>(segmentLike.addMetadata('key', 'value')); expectType<void>(segmentLike.addMetadata('key', [1, 2, 3], 'hello')); expectType<AWSXRay.Subsegment>(segmentLike.addNewSubsegment('newSubsegment')); expectError(segmentLike.addSubsegment({})); expectError(segmentLike.addSubsegment({ key: 'x' })); expectType<void>(segmentLike.addSubsegment(new AWSXRay.Subsegment('new'))); expectType<void>(segmentLike.removeSubsegment(new AWSXRay.Subsegment('old'))); expectType<void>(segmentLike.addError(new Error('error'))); expectType<void>(segmentLike.addError('error')); expectType<void>(segmentLike.addError('error', true)); expectError(segmentLike.addError(3)); expectType<void>(segmentLike.addFaultFlag()); expectType<void>(segmentLike.addErrorFlag()); expectType<void>(segmentLike.addThrottleFlag()); expectType<boolean>(segmentLike.isClosed()); expectType<void>(segmentLike.incrementCounter()); expectType<void>(segmentLike.incrementCounter(3)); expectType<void>(segmentLike.decrementCounter()); expectType<void>(segmentLike.close()); expectType<void>(segmentLike.close(new Error('error'))); expectType<void>(segmentLike.close('error', true)); expectType<void>(segmentLike.close(null, false)); expectType<void>(segmentLike.flush()); expectType<string>(segmentLike.format()); expectType<string>(segmentLike.toString()); } const subsegment = new AWSXRay.Subsegment('foo'); expectType<void>(subsegment.addAttribute('name', 'value')); expectType<void>(subsegment.addPrecursorId('id')); expectType<void>(subsegment.addSqlData({})); const clientRequest = new http.ClientRequest('http://localhost'); expectType<void>(subsegment.addRemoteRequestData(clientRequest, incomingMessage)); expectType<void>(subsegment.addRemoteRequestData(clientRequest, incomingMessage, true)); expectType<true | undefined>(subsegment.streamSubsegments()); expectType<{ [key: string]: any }>(subsegment.toJSON()); expectType<number>(AWSXRay.SegmentUtils.streamingThreshold); expectType<number>(AWSXRay.SegmentUtils.getCurrentTime()); expectType<void>(AWSXRay.SegmentUtils.setOrigin('hello')); expectType<void>(AWSXRay.SegmentUtils.setPluginData({ data: 'hello' })); expectType<void>(AWSXRay.SegmentUtils.setSDKData({ sdk_version: '1.0.0-beta' })); expectType<void>(AWSXRay.SegmentUtils.setServiceData({ version: '2.3.0', package: 'sample-app' })); expectType<number>(AWSXRay.SegmentUtils.getStreamingThreshold()); expectType<void>(AWSXRay.SegmentUtils.setStreamingThreshold(0));