{"version":3,"file":"gcp.mjs","names":[],"sources":["../src/gcp.ts"],"sourcesContent":["import { context, SpanKind, trace } from '@opentelemetry/api';\nimport { SemanticAttributes } from '@opentelemetry/semantic-conventions';\nimport { initSDK } from './sdk/initSDK.ts';\nimport type { SDKConfig } from './sdk/types.ts';\n\nexport function registerGCPCloudFunctionEventHandler<T = unknown>(\n  handler: (event: T) => Promise<unknown>,\n  sdkConfig: SDKConfig = {},\n) {\n  initSDK(sdkConfig);\n\n  return async (event: T & { data?: any; type?: string }) => {\n    const tracer = trace.getTracer('@safaricom-mxl/node-sdk');\n    let parentSpanContext;\n    let spanName = 'cloudFunctionEventHandler';\n    let attributes: Record<string, unknown> | undefined;\n\n    if (\n      event.type === 'google.cloud.pubsub.topic.v1.messagePublished' &&\n      event.data?.message?.attributes?.googclient_OpenTelemetrySpanContext\n    ) {\n      if (event.data.subscription) {\n        spanName = `${event.data.subscription} process`;\n      }\n      const message = event.data.message;\n      parentSpanContext = JSON.parse(message.attributes.googclient_OpenTelemetrySpanContext);\n      attributes = {\n        [SemanticAttributes.MESSAGING_SYSTEM]: 'pubsub',\n        [SemanticAttributes.MESSAGING_OPERATION]: 'process',\n        [SemanticAttributes.MESSAGING_DESTINATION]: event.data.subscription,\n        [SemanticAttributes.MESSAGING_DESTINATION_KIND]: 'topic',\n        [SemanticAttributes.MESSAGING_MESSAGE_ID]: message.id,\n        [SemanticAttributes.MESSAGING_PROTOCOL]: 'pubsub',\n        [SemanticAttributes.MESSAGING_MESSAGE_PAYLOAD_SIZE_BYTES]: message.data?.length,\n      };\n    }\n\n    return tracer.startActiveSpan(\n      spanName,\n      {\n        kind: SpanKind.CONSUMER,\n        attributes: attributes as never,\n      },\n      parentSpanContext\n        ? trace.setSpanContext(context.active(), parentSpanContext)\n        : context.active(),\n      async (span) => {\n        try {\n          await handler(event);\n        } catch (error) {\n          span.recordException(error as Error);\n          throw error;\n        } finally {\n          span.end();\n        }\n      },\n    );\n  };\n}\n"],"mappings":";;;;AAKA,SAAgB,qCACd,SACA,YAAuB,CAAC,GACxB;CACA,QAAQ,SAAS;CAEjB,OAAO,OAAO,UAA6C;EACzD,MAAM,SAAS,MAAM,UAAU,yBAAyB;EACxD,IAAI;EACJ,IAAI,WAAW;EACf,IAAI;EAEJ,IACE,MAAM,SAAS,mDACf,MAAM,MAAM,SAAS,YAAY,qCACjC;GACA,IAAI,MAAM,KAAK,cACb,WAAW,GAAG,MAAM,KAAK,aAAa;GAExC,MAAM,UAAU,MAAM,KAAK;GAC3B,oBAAoB,KAAK,MAAM,QAAQ,WAAW,mCAAmC;GACrF,aAAa;KACV,mBAAmB,mBAAmB;KACtC,mBAAmB,sBAAsB;KACzC,mBAAmB,wBAAwB,MAAM,KAAK;KACtD,mBAAmB,6BAA6B;KAChD,mBAAmB,uBAAuB,QAAQ;KAClD,mBAAmB,qBAAqB;KACxC,mBAAmB,uCAAuC,QAAQ,MAAM;GAC3E;EACF;EAEA,OAAO,OAAO,gBACZ,UACA;GACE,MAAM,SAAS;GACH;EACd,GACA,oBACI,MAAM,eAAe,QAAQ,OAAO,GAAG,iBAAiB,IACxD,QAAQ,OAAO,GACnB,OAAO,SAAS;GACd,IAAI;IACF,MAAM,QAAQ,KAAK;GACrB,SAAS,OAAO;IACd,KAAK,gBAAgB,KAAc;IACnC,MAAM;GACR,UAAU;IACR,KAAK,IAAI;GACX;EACF,CACF;CACF;AACF"}