{"_id":"@modainteract/moda-interact-shared","_rev":"31-e41184f007cb7cd3216cb676fef35994","name":"@modainteract/moda-interact-shared","dist-tags":{"latest":"1.1.0"},"versions":{"0.1.0":{"name":"@modainteract/moda-interact-shared","version":"0.1.0","_id":"@modainteract/moda-interact-shared@0.1.0","maintainers":[{"name":"kwadwoafriyie","email":"kodjo_baah@hotmail.com"}],"dist":{"shasum":"37599ebda9344ceb40c50279a89fbb72bb573e87","tarball":"https://registry.npmjs.org/@modainteract/moda-interact-shared/-/moda-interact-shared-0.1.0.tgz","fileCount":13,"integrity":"sha512-kBSwHwtkpp4ESErA29rVskL4ztBbQoKPAyOr/kRu45iLr0UkO9WJqoMX3zhNNSoSz8CfXDFdYYCaPHtpEFdVCQ==","signatures":[{"sig":"MEUCIQCxMY1dfFMtVb6N71vGv448tchomff8g/oDrKHqu5hQgwIgabfqa/S6MFju91M1SX0ZpQEmHESJejVQKN6Rmi9w3gA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":39912},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./shopify":{"types":"./dist/shopify/index.d.ts","import":"./dist/shopify/index.js"},"./shopify/node":{"types":"./dist/shopify/node.d.ts","import":"./dist/shopify/node.js"}},"scripts":{"test":"tsx --test src/**/*.test.ts","build":"tsup","prepack":"npm run build","typecheck":"tsc --noEmit"},"_npmUser":{"name":"kwadwoafriyie","email":"kodjo_baah@hotmail.com"},"_npmVersion":"11.17.0","description":"Shared, runtime-validated TypeScript contracts used by more than one Moda Interact service. This package is a library, not a service: it has no transport, persistence, or framework code of its own.","directories":{},"_nodeVersion":"24.19.0","dependencies":{"zod":"^4.0.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.23.12","tsup":"^8.0.0","typescript":"^5.0.0","@types/node":"^26.4.0"},"_npmOperationalInternal":{"tmp":"tmp/moda-interact-shared_0.1.0_1787863051113_0.360771500397699","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"@modainteract/moda-interact-shared","version":"0.2.0","_id":"@modainteract/moda-interact-shared@0.2.0","maintainers":[{"name":"kwadwoafriyie","email":"kodjo_baah@hotmail.com"}],"dist":{"shasum":"3963a516c8840be98f995aaa8ff85c317ebba765","tarball":"https://registry.npmjs.org/@modainteract/moda-interact-shared/-/moda-interact-shared-0.2.0.tgz","fileCount":16,"integrity":"sha512-3UUO46fLgWiDUJDp84yC66llZ0dSPhY9vphbqkCuoEUOYJi7lwP3Tcri5eLLx9AtMda/Bur/4bhnx4CAGVPKBg==","signatures":[{"sig":"MEUCIQDilyC3aTGsVI9jXmpHmCnDswwWDvXf/QT72C8VUOXPzAIgGTrBFx1VuFikXW6wtIh9lMKQhyc8aM76Aeg/+GYTtQM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":97332},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./logging":{"types":"./dist/logging/index.d.ts","import":"./dist/logging/index.js"},"./shopify":{"types":"./dist/shopify/index.d.ts","import":"./dist/shopify/index.js"},"./shopify/node":{"types":"./dist/shopify/node.d.ts","import":"./dist/shopify/node.js"}},"scripts":{"test":"tsx --test src/**/*.test.ts","build":"tsup","prepack":"npm run build","typecheck":"tsc --noEmit"},"_npmUser":{"name":"kwadwoafriyie","email":"kodjo_baah@hotmail.com"},"_npmVersion":"11.17.0","description":"Shared TypeScript contracts and reusable platform primitives used by multiple Moda Interact services.","directories":{},"_nodeVersion":"24.19.0","dependencies":{"zod":"^4.0.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.23.12","tsup":"^8.0.0","typescript":"^5.0.0","@types/node":"^26.4.0"},"_npmOperationalInternal":{"tmp":"tmp/moda-interact-shared_0.2.0_1788111199671_0.6707044396495365","host":"s3://npm-registry-packages-npm-production"}},"0.3.0":{"name":"@modainteract/moda-interact-shared","version":"0.3.0","_id":"@modainteract/moda-interact-shared@0.3.0","maintainers":[{"name":"kwadwoafriyie","email":"kodjo_baah@hotmail.com"}],"dist":{"shasum":"9dd88fcc45f774e0811718b7b928e0d446cc086c","tarball":"https://registry.npmjs.org/@modainteract/moda-interact-shared/-/moda-interact-shared-0.3.0.tgz","fileCount":21,"integrity":"sha512-hxhoL+lDv9KkhqRsjD9ZeNAQ/gxQoDFZmt62qifOKp9SYo9JjKkN8tR76Q+ZACQD4hOAZ/kT6Oae24ZdTbvtig==","signatures":[{"sig":"MEQCIDFM51Vrhetz7M/hLgz6Wirqg446Cai4LB9olxS0eGKBAiBYbFQ4hLZxSd+LL81rqCeLPvkdrIEQL4TsGN3oSVghFA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":147283},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./logging":{"types":"./dist/logging/index.d.ts","import":"./dist/logging/index.js"},"./shopify":{"types":"./dist/shopify/index.d.ts","import":"./dist/shopify/index.js"},"./logging/node":{"types":"./dist/logging/node.d.ts","import":"./dist/logging/node.js"},"./shopify/node":{"types":"./dist/shopify/node.d.ts","import":"./dist/shopify/node.js"}},"scripts":{"test":"tsx --test \"src/**/*.test.ts\"","build":"tsup","prepack":"npm run build","typecheck":"tsc --noEmit"},"_npmUser":{"name":"kwadwoafriyie","email":"kodjo_baah@hotmail.com"},"_npmVersion":"11.17.0","description":"Shared TypeScript contracts and reusable platform primitives used by multiple Moda Interact services.","directories":{},"_nodeVersion":"24.19.0","dependencies":{"zod":"^4.0.0","winston":"3.19.0","winston-loki":"6.1.7","@opentelemetry/api":"^1.9.0","@opentelemetry/api-logs":"0.221.0","@opentelemetry/sdk-logs":"0.221.0","@opentelemetry/resources":"^2.10.0","@opentelemetry/exporter-logs-otlp-http":"0.221.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.23.12","tsup":"^8.0.0","typescript":"^5.0.0","@types/node":"^26.4.0"},"_npmOperationalInternal":{"tmp":"tmp/moda-interact-shared_0.3.0_1788135504219_0.2559544600268786","host":"s3://npm-registry-packages-npm-production"}},"0.4.0":{"name":"@modainteract/moda-interact-shared","version":"0.4.0","_id":"@modainteract/moda-interact-shared@0.4.0","maintainers":[{"name":"kwadwoafriyie","email":"kodjo_baah@hotmail.com"}],"dist":{"shasum":"95a733215066ed33608482237003e8b1b902aa60","tarball":"https://registry.npmjs.org/@modainteract/moda-interact-shared/-/moda-interact-shared-0.4.0.tgz","fileCount":37,"integrity":"sha512-eBSbjnQpGdAGYJO8BwqwwypbI2RvxMYob9xw5kuO0Qm9jmA2MjZUCskAw1aqdvYHrLZCHOApVAW8zrfYpl+7og==","signatures":[{"sig":"MEUCICCV839jPAbsP+Fbj+gVmnubVdCahrb0PAzsF3SL4u5ZAiEApd/NLS547G19eCkqaQPokIEok/qLKkV1BdXZnCwo5Uk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":200335},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./logging":{"types":"./dist/logging/index.d.ts","import":"./dist/logging/index.js"},"./shopify":{"types":"./dist/shopify/index.d.ts","import":"./dist/shopify/index.js"},"./logging/node":{"types":"./dist/logging/node.d.ts","import":"./dist/logging/node.js"},"./shopify/node":{"types":"./dist/shopify/node.d.ts","import":"./dist/shopify/node.js"},"./observability":{"types":"./dist/observability/index.d.ts","import":"./dist/observability/index.js"},"./observability/node":{"types":"./dist/observability/node.d.ts","import":"./dist/observability/node.js"},"./observability/genai":{"types":"./dist/observability/genai.d.ts","import":"./dist/observability/genai.js"},"./observability/bullmq":{"types":"./dist/observability/bullmq.d.ts","import":"./dist/observability/bullmq.js"}},"scripts":{"test":"tsx --test \"src/**/*.test.ts\"","build":"tsup","prepack":"npm run build","typecheck":"tsc --noEmit"},"_npmUser":{"name":"kwadwoafriyie","email":"kodjo_baah@hotmail.com"},"_npmVersion":"11.17.0","description":"Shared TypeScript contracts and reusable platform primitives used by multiple Moda Interact services.","directories":{},"_nodeVersion":"24.19.0","dependencies":{"zod":"^4.0.0","winston":"3.19.0","bullmq-otel":"^2.0.1","winston-loki":"6.1.7","@opentelemetry/api":"^1.9.0","@opentelemetry/api-logs":"0.221.0","@opentelemetry/sdk-logs":"0.221.0","@opentelemetry/sdk-node":"0.221.0","@prisma/instrumentation":"^6.19.3","@opentelemetry/resources":"^2.10.0","@opentelemetry/sdk-metrics":"^2.10.0","@opentelemetry/sdk-trace-base":"^2.10.0","@opentelemetry/context-async-hooks":"^2.10.0","@opentelemetry/instrumentation-http":"0.221.0","@opentelemetry/instrumentation-undici":"0.31.0","@opentelemetry/exporter-logs-otlp-http":"0.221.0","@opentelemetry/exporter-trace-otlp-http":"0.221.0","@opentelemetry/exporter-metrics-otlp-http":"0.221.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.23.12","tsup":"^8.0.0","bullmq":"^6.3.1","ioredis":"^6.0.0","typescript":"^5.0.0","@types/node":"^26.4.0"},"_npmOperationalInternal":{"tmp":"tmp/moda-interact-shared_0.4.0_1788185877462_0.22623689426944993","host":"s3://npm-registry-packages-npm-production"}},"0.5.0":{"name":"@modainteract/moda-interact-shared","version":"0.5.0","_id":"@modainteract/moda-interact-shared@0.5.0","maintainers":[{"name":"kwadwoafriyie","email":"kodjo_baah@hotmail.com"}],"dist":{"shasum":"1bff8406de3c0c4bdfcf989b520e17bda7e26e18","tarball":"https://registry.npmjs.org/@modainteract/moda-interact-shared/-/moda-interact-shared-0.5.0.tgz","fileCount":37,"integrity":"sha512-TJaybKw1NIIHbyTlB87nho3ZEKPpQHTfBxYJqgYwSqVGf4u0IDGjrDrr9SOFX0RyD3MhlYeo6KVgKhIhJlR9Eg==","signatures":[{"sig":"MEUCIHZcdB/E6hSI5fMLV3Gk/GI4fzexUb1dgZpFg9JWrZEzAiEA70vYd4n7BTAIp5H8THF904+K5trv3pTLu1W+CigJeZc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":207735},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./logging":{"types":"./dist/logging/index.d.ts","import":"./dist/logging/index.js"},"./shopify":{"types":"./dist/shopify/index.d.ts","import":"./dist/shopify/index.js"},"./logging/node":{"types":"./dist/logging/node.d.ts","import":"./dist/logging/node.js"},"./shopify/node":{"types":"./dist/shopify/node.d.ts","import":"./dist/shopify/node.js"},"./observability":{"types":"./dist/observability/index.d.ts","import":"./dist/observability/index.js"},"./observability/node":{"types":"./dist/observability/node.d.ts","import":"./dist/observability/node.js"},"./observability/genai":{"types":"./dist/observability/genai.d.ts","import":"./dist/observability/genai.js"},"./observability/bullmq":{"types":"./dist/observability/bullmq.d.ts","import":"./dist/observability/bullmq.js"}},"scripts":{"test":"tsx --test \"src/**/*.test.ts\"","build":"tsup","prepack":"npm run build","typecheck":"tsc --noEmit"},"_npmUser":{"name":"kwadwoafriyie","email":"kodjo_baah@hotmail.com"},"_npmVersion":"11.17.0","description":"Shared TypeScript contracts and reusable platform primitives used by multiple Moda Interact services.","directories":{},"_nodeVersion":"24.19.0","dependencies":{"zod":"^4.0.0","winston":"3.19.0","bullmq-otel":"^2.0.1","winston-loki":"6.1.7","@opentelemetry/api":"^1.9.0","@opentelemetry/api-logs":"0.221.0","@opentelemetry/sdk-logs":"0.221.0","@opentelemetry/sdk-node":"0.221.0","@prisma/instrumentation":"^6.19.3","@opentelemetry/resources":"^2.10.0","@opentelemetry/sdk-metrics":"^2.10.0","@opentelemetry/sdk-trace-base":"^2.10.0","@opentelemetry/context-async-hooks":"^2.10.0","@opentelemetry/instrumentation-http":"0.221.0","@opentelemetry/instrumentation-undici":"0.31.0","@opentelemetry/exporter-logs-otlp-http":"0.221.0","@opentelemetry/exporter-trace-otlp-http":"0.221.0","@opentelemetry/exporter-metrics-otlp-http":"0.221.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.23.12","tsup":"^8.0.0","bullmq":"^6.3.1","ioredis":"^6.0.0","typescript":"^5.0.0","@types/node":"^26.4.0"},"_npmOperationalInternal":{"tmp":"tmp/moda-interact-shared_0.5.0_1788200006923_0.9206614848410646","host":"s3://npm-registry-packages-npm-production"}},"0.6.0":{"name":"@modainteract/moda-interact-shared","version":"0.6.0","_id":"@modainteract/moda-interact-shared@0.6.0","maintainers":[{"name":"kwadwoafriyie","email":"kodjo_baah@hotmail.com"}],"dist":{"shasum":"571669c11d6cab5af3cae77a09e685f3f6029eb1","tarball":"https://registry.npmjs.org/@modainteract/moda-interact-shared/-/moda-interact-shared-0.6.0.tgz","fileCount":37,"integrity":"sha512-zXfRUxPaEtCfxTzvH8H6d3igwL7jcPk66b370YuElZUWrtjiNrpehLbzeZkyg+ARJkCPkXyt1ojdjt3NCJitsw==","signatures":[{"sig":"MEQCIG+uFzvk8SYkH6PIypMC/mVRuaW3L/rLAGT3YOM8HhE0AiAQvYYl9i2Y4eKUV0S0ro5qBu/CnyrfKTD5SGmENm9iPA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":214904},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./logging":{"types":"./dist/logging/index.d.ts","import":"./dist/logging/index.js"},"./shopify":{"types":"./dist/shopify/index.d.ts","import":"./dist/shopify/index.js"},"./logging/node":{"types":"./dist/logging/node.d.ts","import":"./dist/logging/node.js"},"./shopify/node":{"types":"./dist/shopify/node.d.ts","import":"./dist/shopify/node.js"},"./observability":{"types":"./dist/observability/index.d.ts","import":"./dist/observability/index.js"},"./observability/node":{"types":"./dist/observability/node.d.ts","import":"./dist/observability/node.js"},"./observability/genai":{"types":"./dist/observability/genai.d.ts","import":"./dist/observability/genai.js"},"./observability/bullmq":{"types":"./dist/observability/bullmq.d.ts","import":"./dist/observability/bullmq.js"}},"scripts":{"test":"tsx --test \"src/**/*.test.ts\"","build":"tsup","prepack":"npm run build","typecheck":"tsc --noEmit"},"_npmUser":{"name":"kwadwoafriyie","email":"kodjo_baah@hotmail.com"},"_npmVersion":"11.17.0","description":"Shared TypeScript contracts and reusable platform primitives used by multiple Moda Interact services.","directories":{},"_nodeVersion":"24.19.0","dependencies":{"zod":"^4.0.0","winston":"3.19.0","bullmq-otel":"^2.0.1","winston-loki":"6.1.7","@opentelemetry/api":"^1.9.0","@opentelemetry/api-logs":"0.221.0","@opentelemetry/sdk-logs":"0.221.0","@opentelemetry/sdk-node":"0.221.0","@prisma/instrumentation":"^6.19.3","@opentelemetry/resources":"^2.10.0","@opentelemetry/sdk-metrics":"^2.10.0","@opentelemetry/sdk-trace-base":"^2.10.0","@opentelemetry/context-async-hooks":"^2.10.0","@opentelemetry/instrumentation-http":"0.221.0","@opentelemetry/instrumentation-undici":"0.31.0","@opentelemetry/exporter-logs-otlp-http":"0.221.0","@opentelemetry/exporter-trace-otlp-http":"0.221.0","@opentelemetry/exporter-metrics-otlp-http":"0.221.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.23.12","tsup":"^8.0.0","bullmq":"^6.3.1","ioredis":"^6.0.0","typescript":"^5.0.0","@types/node":"^26.4.0"},"_npmOperationalInternal":{"tmp":"tmp/moda-interact-shared_0.6.0_1788617858677_0.3624898846916913","host":"s3://npm-registry-packages-npm-production"}},"0.6.1":{"name":"@modainteract/moda-interact-shared","version":"0.6.1","_id":"@modainteract/moda-interact-shared@0.6.1","maintainers":[{"name":"kwadwoafriyie","email":"kodjo_baah@hotmail.com"}],"dist":{"shasum":"d018c17b2158afa4fa40e7bcefa1935aed02cd3c","tarball":"https://registry.npmjs.org/@modainteract/moda-interact-shared/-/moda-interact-shared-0.6.1.tgz","fileCount":42,"integrity":"sha512-nU6mf4bVEJezkJ5g4KtJj8Rh38IMfJlYMEPvW9Hmr4n02wHPhQxq2CbsqJEezSv2R4ZlxStKtMkTNU9LFATRvA==","signatures":[{"sig":"MEUCID2wiO30qLxevdonARsAcOLbcb7QLj5S99tDCTMmZBv2AiEA3HZ/ZbpB41DREhk3ylULXeKynZ1jD5iQLAVDGEsrPmQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":234337},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./logging":{"types":"./dist/logging/index.d.ts","import":"./dist/logging/index.js"},"./shopify":{"types":"./dist/shopify/index.d.ts","import":"./dist/shopify/index.js"},"./logging/node":{"types":"./dist/logging/node.d.ts","import":"./dist/logging/node.js"},"./shopify/node":{"types":"./dist/shopify/node.d.ts","import":"./dist/shopify/node.js"},"./observability":{"types":"./dist/observability/index.d.ts","import":"./dist/observability/index.js"},"./observability/node":{"types":"./dist/observability/node.d.ts","import":"./dist/observability/node.js"},"./observability/genai":{"types":"./dist/observability/genai.d.ts","import":"./dist/observability/genai.js"},"./internationalization":{"types":"./dist/internationalization.d.ts","import":"./dist/internationalization.js"},"./observability/bullmq":{"types":"./dist/observability/bullmq.d.ts","import":"./dist/observability/bullmq.js"}},"scripts":{"test":"tsx --test \"src/**/*.test.ts\"","build":"tsup","prepack":"npm run build","typecheck":"tsc --noEmit"},"_npmUser":{"name":"kwadwoafriyie","email":"kodjo_baah@hotmail.com"},"_npmVersion":"11.17.0","description":"Shared TypeScript contracts and reusable platform primitives used by multiple Moda Interact services.","directories":{},"_nodeVersion":"24.19.0","dependencies":{"zod":"^4.0.0","winston":"3.19.0","bullmq-otel":"^2.0.1","winston-loki":"6.1.7","@opentelemetry/api":"^1.9.0","@opentelemetry/api-logs":"0.221.0","@opentelemetry/sdk-logs":"0.221.0","@opentelemetry/sdk-node":"0.221.0","@prisma/instrumentation":"^6.19.3","@opentelemetry/resources":"^2.10.0","@opentelemetry/sdk-metrics":"^2.10.0","@opentelemetry/sdk-trace-base":"^2.10.0","@opentelemetry/context-async-hooks":"^2.10.0","@opentelemetry/instrumentation-http":"0.221.0","@opentelemetry/instrumentation-undici":"0.31.0","@opentelemetry/exporter-logs-otlp-http":"0.221.0","@opentelemetry/exporter-trace-otlp-http":"0.221.0","@opentelemetry/exporter-metrics-otlp-http":"0.221.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.23.12","tsup":"^8.0.0","bullmq":"^6.3.1","ioredis":"^6.0.0","typescript":"^5.0.0","@types/node":"^26.4.0"},"_npmOperationalInternal":{"tmp":"tmp/moda-interact-shared_0.6.1_1788635345439_0.5426961008443019","host":"s3://npm-registry-packages-npm-production"}},"0.6.2":{"name":"@modainteract/moda-interact-shared","version":"0.6.2","_id":"@modainteract/moda-interact-shared@0.6.2","maintainers":[{"name":"kwadwoafriyie","email":"kodjo_baah@hotmail.com"}],"dist":{"shasum":"12c99fb7d6dbbc5dd98afcffc7e32fb4ac8aa436","tarball":"https://registry.npmjs.org/@modainteract/moda-interact-shared/-/moda-interact-shared-0.6.2.tgz","fileCount":42,"integrity":"sha512-/dDwRQqzWiZ1cO9sfCVZpg2ZVusztfca8PFJs9/zjIqCiVwdhWPISbSkeHEpM7PnhepMmmWy1KN9joB27vx75g==","signatures":[{"sig":"MEUCIHeLiI3rQj8cAKt8obHgnox4kL4jn3MLHuQWs9QXDs6KAiEA7EbZokPknPBySMSfvB1p1MWNCJyccdVvREYXTUtLN8M=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":241771},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./logging":{"types":"./dist/logging/index.d.ts","import":"./dist/logging/index.js"},"./shopify":{"types":"./dist/shopify/index.d.ts","import":"./dist/shopify/index.js"},"./logging/node":{"types":"./dist/logging/node.d.ts","import":"./dist/logging/node.js"},"./shopify/node":{"types":"./dist/shopify/node.d.ts","import":"./dist/shopify/node.js"},"./observability":{"types":"./dist/observability/index.d.ts","import":"./dist/observability/index.js"},"./observability/node":{"types":"./dist/observability/node.d.ts","import":"./dist/observability/node.js"},"./observability/genai":{"types":"./dist/observability/genai.d.ts","import":"./dist/observability/genai.js"},"./internationalization":{"types":"./dist/internationalization.d.ts","import":"./dist/internationalization.js"},"./observability/bullmq":{"types":"./dist/observability/bullmq.d.ts","import":"./dist/observability/bullmq.js"}},"scripts":{"test":"tsx --test \"src/**/*.test.ts\"","build":"tsup","prepack":"npm run build","typecheck":"tsc --noEmit"},"_npmUser":{"name":"kwadwoafriyie","email":"kodjo_baah@hotmail.com"},"_npmVersion":"11.17.0","description":"Shared TypeScript contracts and reusable platform primitives used by multiple Moda Interact services.","directories":{},"_nodeVersion":"24.19.0","dependencies":{"zod":"^4.0.0","winston":"3.19.0","bullmq-otel":"^2.0.1","winston-loki":"6.1.7","@opentelemetry/api":"^1.9.0","@opentelemetry/api-logs":"0.221.0","@opentelemetry/sdk-logs":"0.221.0","@opentelemetry/sdk-node":"0.221.0","@prisma/instrumentation":"^6.19.3","@opentelemetry/resources":"^2.10.0","@opentelemetry/sdk-metrics":"^2.10.0","@opentelemetry/sdk-trace-base":"^2.10.0","@opentelemetry/context-async-hooks":"^2.10.0","@opentelemetry/instrumentation-http":"0.221.0","@opentelemetry/instrumentation-undici":"0.31.0","@opentelemetry/exporter-logs-otlp-http":"0.221.0","@opentelemetry/exporter-trace-otlp-http":"0.221.0","@opentelemetry/exporter-metrics-otlp-http":"0.221.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.23.12","tsup":"^8.0.0","bullmq":"^6.3.1","ioredis":"^6.0.0","typescript":"^5.0.0","@types/node":"^26.4.0"},"_npmOperationalInternal":{"tmp":"tmp/moda-interact-shared_0.6.2_1788647488727_0.2277176928309863","host":"s3://npm-registry-packages-npm-production"}},"0.6.3":{"name":"@modainteract/moda-interact-shared","version":"0.6.3","_id":"@modainteract/moda-interact-shared@0.6.3","maintainers":[{"name":"kwadwoafriyie","email":"kodjo_baah@hotmail.com"}],"dist":{"shasum":"209050b78dcbaade180aaf9f45d8991dd0834990","tarball":"https://registry.npmjs.org/@modainteract/moda-interact-shared/-/moda-interact-shared-0.6.3.tgz","fileCount":42,"integrity":"sha512-QdGfpV+hX5ut/vmR+RD3fQ/Tyy978A1J58hVf9+Ro2f6jq+f09jB4Jf5fPFxzgsAIsXx0/ftO+FChpa+w1cAAg==","signatures":[{"sig":"MEQCIE9UY85ezsAdkaLBfoEgPfWTDt1mk9yDHxq+360R5YxoAiBXB4CNQjJiZelsPjW9a79i4Z+U3GpYOzojEgw9J3mYTA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":257705},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./logging":{"types":"./dist/logging/index.d.ts","import":"./dist/logging/index.js"},"./shopify":{"types":"./dist/shopify/index.d.ts","import":"./dist/shopify/index.js"},"./logging/node":{"types":"./dist/logging/node.d.ts","import":"./dist/logging/node.js"},"./shopify/node":{"types":"./dist/shopify/node.d.ts","import":"./dist/shopify/node.js"},"./observability":{"types":"./dist/observability/index.d.ts","import":"./dist/observability/index.js"},"./observability/node":{"types":"./dist/observability/node.d.ts","import":"./dist/observability/node.js"},"./observability/genai":{"types":"./dist/observability/genai.d.ts","import":"./dist/observability/genai.js"},"./internationalization":{"types":"./dist/internationalization.d.ts","import":"./dist/internationalization.js"},"./observability/bullmq":{"types":"./dist/observability/bullmq.d.ts","import":"./dist/observability/bullmq.js"}},"scripts":{"test":"tsx --test \"src/**/*.test.ts\"","build":"tsup","prepack":"npm run build","typecheck":"tsc --noEmit","validate:internationalization-entrypoint":"npm run build && node scripts/validate-internationalization-entrypoint.mjs"},"_npmUser":{"name":"kwadwoafriyie","email":"kodjo_baah@hotmail.com"},"_npmVersion":"11.17.0","description":"Shared TypeScript contracts and reusable platform primitives used by multiple Moda Interact services.","directories":{},"_nodeVersion":"24.19.0","dependencies":{"zod":"^4.0.0","winston":"3.19.0","bullmq-otel":"^2.0.1","winston-loki":"6.1.7","@opentelemetry/api":"^1.9.0","intl-messageformat":"^10.7.18","@opentelemetry/api-logs":"0.221.0","@opentelemetry/sdk-logs":"0.221.0","@opentelemetry/sdk-node":"0.221.0","@prisma/instrumentation":"^6.19.3","@opentelemetry/resources":"^2.10.0","@opentelemetry/sdk-metrics":"^2.10.0","@opentelemetry/sdk-trace-base":"^2.10.0","@opentelemetry/context-async-hooks":"^2.10.0","@opentelemetry/instrumentation-http":"0.221.0","@opentelemetry/instrumentation-undici":"0.31.0","@opentelemetry/exporter-logs-otlp-http":"0.221.0","@opentelemetry/exporter-trace-otlp-http":"0.221.0","@opentelemetry/exporter-metrics-otlp-http":"0.221.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.23.12","tsup":"^8.0.0","bullmq":"^6.3.1","ioredis":"^6.0.0","typescript":"^5.0.0","@types/node":"^26.4.0"},"_npmOperationalInternal":{"tmp":"tmp/moda-interact-shared_0.6.3_1788683075502_0.36232594183734257","host":"s3://npm-registry-packages-npm-production"}},"0.7.0":{"name":"@modainteract/moda-interact-shared","version":"0.7.0","_id":"@modainteract/moda-interact-shared@0.7.0","maintainers":[{"name":"kwadwoafriyie","email":"kodjo_baah@hotmail.com"}],"dist":{"shasum":"acfb4a0fb8a994e852f3e8dfaac36dce7d50602f","tarball":"https://registry.npmjs.org/@modainteract/moda-interact-shared/-/moda-interact-shared-0.7.0.tgz","fileCount":50,"integrity":"sha512-/v4N3nLnHbUFh1k6raes6qOGizEQkAYcWPQYaix+AR+ODVSiNeS4CC9z1cdrESBplEa8S7FrsCWBQLixpER4WQ==","signatures":[{"sig":"MEUCIQCSYVA8W7QB4FaunGmISd/eYxUknIw5vrn3i8CkmOQVPgIgVmICoJDxJe7U5/mX4jTgA+H/TNu3/Bv6CPS5VxqRHq8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":290868},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./logging":{"types":"./dist/logging/index.d.ts","import":"./dist/logging/index.js"},"./shopify":{"types":"./dist/shopify/index.d.ts","import":"./dist/shopify/index.js"},"./logging/node":{"types":"./dist/logging/node.d.ts","import":"./dist/logging/node.js"},"./shopify/node":{"types":"./dist/shopify/node.d.ts","import":"./dist/shopify/node.js"},"./observability":{"types":"./dist/observability/index.d.ts","import":"./dist/observability/index.js"},"./observability/node":{"types":"./dist/observability/node.d.ts","import":"./dist/observability/node.js"},"./observability/genai":{"types":"./dist/observability/genai.d.ts","import":"./dist/observability/genai.js"},"./internationalization":{"types":"./dist/internationalization.d.ts","import":"./dist/internationalization.js"},"./observability/bullmq":{"types":"./dist/observability/bullmq.d.ts","import":"./dist/observability/bullmq.js"},"./merchant-communications":{"types":"./dist/merchant-communications.d.ts","import":"./dist/merchant-communications.js"},"./merchant-communications/node":{"types":"./dist/merchant-communications.node.d.ts","import":"./dist/merchant-communications.node.js"}},"scripts":{"test":"tsx --test \"src/**/*.test.ts\"","build":"tsup","prepack":"npm run build","typecheck":"tsc --noEmit","validate:internationalization-entrypoint":"npm run build && node scripts/validate-internationalization-entrypoint.mjs"},"_npmUser":{"name":"kwadwoafriyie","email":"kodjo_baah@hotmail.com"},"_npmVersion":"11.17.0","description":"Shared TypeScript contracts and reusable platform primitives used by multiple Moda Interact services.","directories":{},"_nodeVersion":"24.19.0","dependencies":{"zod":"^4.0.0","winston":"3.19.0","bullmq-otel":"^2.0.1","winston-loki":"6.1.7","@opentelemetry/api":"^1.9.0","intl-messageformat":"^10.7.18","@opentelemetry/api-logs":"0.221.0","@opentelemetry/sdk-logs":"0.221.0","@opentelemetry/sdk-node":"0.221.0","@prisma/instrumentation":"^6.19.3","@opentelemetry/resources":"^2.10.0","@opentelemetry/sdk-metrics":"^2.10.0","@opentelemetry/sdk-trace-base":"^2.10.0","@opentelemetry/context-async-hooks":"^2.10.0","@opentelemetry/instrumentation-http":"0.221.0","@opentelemetry/instrumentation-undici":"0.31.0","@opentelemetry/exporter-logs-otlp-http":"0.221.0","@opentelemetry/exporter-trace-otlp-http":"0.221.0","@opentelemetry/exporter-metrics-otlp-http":"0.221.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.23.12","tsup":"^8.0.0","bullmq":"^6.3.1","ioredis":"^6.0.0","typescript":"^5.0.0","@types/node":"^26.4.0"},"_npmOperationalInternal":{"tmp":"tmp/moda-interact-shared_0.7.0_1788700679095_0.5479191773002732","host":"s3://npm-registry-packages-npm-production"}},"0.7.1":{"name":"@modainteract/moda-interact-shared","version":"0.7.1","_id":"@modainteract/moda-interact-shared@0.7.1","maintainers":[{"name":"kwadwoafriyie","email":"kodjo_baah@hotmail.com"}],"dist":{"shasum":"7ff74f694d372b9c80ed1a84ef34f1a28251dd7e","tarball":"https://registry.npmjs.org/@modainteract/moda-interact-shared/-/moda-interact-shared-0.7.1.tgz","fileCount":50,"integrity":"sha512-8eg6WGs3CsrT2z3k/KJxgfuz1aOZaYvloeawLnTarsymYn1LFLQaQdc2NpCsYJLkYShjJeSdiGwU54Xh5ivy6A==","signatures":[{"sig":"MEUCIC6qr2iu6808LWuvVQBc1QGYGezNcVFO4MJXS0Jr77sMAiEA5YjY2cfGlywajoaDfRpR4Tr9c0ho6dJxRFWssImFtCw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":290988},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./logging":{"types":"./dist/logging/index.d.ts","import":"./dist/logging/index.js"},"./shopify":{"types":"./dist/shopify/index.d.ts","import":"./dist/shopify/index.js"},"./logging/node":{"types":"./dist/logging/node.d.ts","import":"./dist/logging/node.js"},"./shopify/node":{"types":"./dist/shopify/node.d.ts","import":"./dist/shopify/node.js"},"./observability":{"types":"./dist/observability/index.d.ts","import":"./dist/observability/index.js"},"./observability/node":{"types":"./dist/observability/node.d.ts","import":"./dist/observability/node.js"},"./observability/genai":{"types":"./dist/observability/genai.d.ts","import":"./dist/observability/genai.js"},"./internationalization":{"types":"./dist/internationalization.d.ts","import":"./dist/internationalization.js"},"./observability/bullmq":{"types":"./dist/observability/bullmq.d.ts","import":"./dist/observability/bullmq.js"},"./merchant-communications":{"types":"./dist/merchant-communications.d.ts","import":"./dist/merchant-communications.js"},"./merchant-communications/node":{"types":"./dist/merchant-communications/node.d.ts","import":"./dist/merchant-communications/node.js"}},"scripts":{"test":"tsx --test \"src/**/*.test.ts\"","build":"tsup","prepack":"npm run build","typecheck":"tsc --noEmit","validate:merchant-communications-node":"npm run build && node scripts/validate-merchant-communications-node.mjs","validate:internationalization-entrypoint":"npm run build && node scripts/validate-internationalization-entrypoint.mjs"},"_npmUser":{"name":"kwadwoafriyie","email":"kodjo_baah@hotmail.com"},"_npmVersion":"11.17.0","description":"Shared TypeScript contracts and reusable platform primitives used by multiple Moda Interact services.","directories":{},"_nodeVersion":"24.19.0","dependencies":{"zod":"^4.0.0","winston":"3.19.0","bullmq-otel":"^2.0.1","winston-loki":"6.1.7","@opentelemetry/api":"^1.9.0","intl-messageformat":"^10.7.18","@opentelemetry/api-logs":"0.221.0","@opentelemetry/sdk-logs":"0.221.0","@opentelemetry/sdk-node":"0.221.0","@prisma/instrumentation":"^6.19.3","@opentelemetry/resources":"^2.10.0","@opentelemetry/sdk-metrics":"^2.10.0","@opentelemetry/sdk-trace-base":"^2.10.0","@opentelemetry/context-async-hooks":"^2.10.0","@opentelemetry/instrumentation-http":"0.221.0","@opentelemetry/instrumentation-undici":"0.31.0","@opentelemetry/exporter-logs-otlp-http":"0.221.0","@opentelemetry/exporter-trace-otlp-http":"0.221.0","@opentelemetry/exporter-metrics-otlp-http":"0.221.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.23.12","tsup":"^8.0.0","bullmq":"^6.3.1","ioredis":"^6.0.0","typescript":"^5.0.0","@types/node":"^26.4.0"},"_npmOperationalInternal":{"tmp":"tmp/moda-interact-shared_0.7.1_1788705511897_0.5876986546084699","host":"s3://npm-registry-packages-npm-production"}},"0.7.2":{"name":"@modainteract/moda-interact-shared","version":"0.7.2","_id":"@modainteract/moda-interact-shared@0.7.2","maintainers":[{"name":"kwadwoafriyie","email":"kodjo_baah@hotmail.com"}],"dist":{"shasum":"cf85f11f98f7aae92884281e9f0fdc52f23c4d61","tarball":"https://registry.npmjs.org/@modainteract/moda-interact-shared/-/moda-interact-shared-0.7.2.tgz","fileCount":53,"integrity":"sha512-RRK1UJCfyFPS+bSBHP4QcraRI9OkmaUsSOUsK7v4b0Bed1jwb9GRYJw2vJgJompctcDGWMyWeBJg/9kaH+oJhQ==","signatures":[{"sig":"MEUCIFu/amcYQsH707qpFdhCJND6+S+bsgnchZ3h/b/URGevAiEAh7oZtV9oG5G6hWjT2OWRghK6tkpREQ7a3cWR4aeIa3g=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":324963},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./logging":{"types":"./dist/logging/index.d.ts","import":"./dist/logging/index.js"},"./shopify":{"types":"./dist/shopify/index.d.ts","import":"./dist/shopify/index.js"},"./logging/node":{"types":"./dist/logging/node.d.ts","import":"./dist/logging/node.js"},"./shopify/node":{"types":"./dist/shopify/node.d.ts","import":"./dist/shopify/node.js"},"./testing/node":{"types":"./dist/testing/node.d.ts","import":"./dist/testing/node.js"},"./observability":{"types":"./dist/observability/index.d.ts","import":"./dist/observability/index.js"},"./observability/node":{"types":"./dist/observability/node.d.ts","import":"./dist/observability/node.js"},"./observability/genai":{"types":"./dist/observability/genai.d.ts","import":"./dist/observability/genai.js"},"./internationalization":{"types":"./dist/internationalization.d.ts","import":"./dist/internationalization.js"},"./observability/bullmq":{"types":"./dist/observability/bullmq.d.ts","import":"./dist/observability/bullmq.js"},"./merchant-communications":{"types":"./dist/merchant-communications.d.ts","import":"./dist/merchant-communications.js"},"./merchant-communications/node":{"types":"./dist/merchant-communications/node.d.ts","import":"./dist/merchant-communications/node.js"}},"scripts":{"test":"tsx --test \"src/**/*.test.ts\"","build":"tsup","prepack":"npm run build","typecheck":"tsc --noEmit","validate:testing-node":"npm run build && node scripts/validate-testing-node.mjs","validate:testing-node-live":"npm run build && node scripts/validate-testing-node-live.mjs","validate:merchant-communications-node":"npm run build && node scripts/validate-merchant-communications-node.mjs","validate:internationalization-entrypoint":"npm run build && node scripts/validate-internationalization-entrypoint.mjs"},"_npmUser":{"name":"kwadwoafriyie","email":"kodjo_baah@hotmail.com"},"_npmVersion":"11.17.0","description":"Shared TypeScript contracts and reusable platform primitives used by multiple Moda Interact services.","directories":{},"_nodeVersion":"24.19.0","dependencies":{"zod":"^4.0.0","winston":"3.19.0","bullmq-otel":"^2.0.1","winston-loki":"6.1.7","@opentelemetry/api":"^1.9.0","intl-messageformat":"^10.7.18","@opentelemetry/api-logs":"0.221.0","@opentelemetry/sdk-logs":"0.221.0","@opentelemetry/sdk-node":"0.221.0","@prisma/instrumentation":"^6.19.3","@opentelemetry/resources":"^2.10.0","@opentelemetry/sdk-metrics":"^2.10.0","@opentelemetry/sdk-trace-base":"^2.10.0","@opentelemetry/context-async-hooks":"^2.10.0","@opentelemetry/instrumentation-http":"0.221.0","@opentelemetry/instrumentation-undici":"0.31.0","@opentelemetry/exporter-logs-otlp-http":"0.221.0","@opentelemetry/exporter-trace-otlp-http":"0.221.0","@opentelemetry/exporter-metrics-otlp-http":"0.221.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.23.12","tsup":"^8.0.0","bullmq":"^6.3.1","ioredis":"^6.0.0","typescript":"^5.0.0","@types/node":"^26.4.0"},"_npmOperationalInternal":{"tmp":"tmp/moda-interact-shared_0.7.2_1788714021587_0.34952445342204097","host":"s3://npm-registry-packages-npm-production"}},"0.7.3":{"name":"@modainteract/moda-interact-shared","version":"0.7.3","_id":"@modainteract/moda-interact-shared@0.7.3","maintainers":[{"name":"kwadwoafriyie","email":"kodjo_baah@hotmail.com"}],"dist":{"shasum":"65f9f2ea5cdee5481e01d0c791436c053db4d0be","tarball":"https://registry.npmjs.org/@modainteract/moda-interact-shared/-/moda-interact-shared-0.7.3.tgz","fileCount":58,"integrity":"sha512-g02RIvud6d4gQd++paXR+KvKpcWsc1t4dao3ggTGiEpXO8DaDOtz56Es/73Z58PKU5AoblXd75ADbuHSD9zZxA==","signatures":[{"sig":"MEUCIQDRMRbHkdNIJwqhFgzxJ/TQETYMKPtr7DA6XBxBvEYVUAIgJWDk6p0ko7qgL6wS6AqJcxbUB3sotVltmCf9kM2eLR8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":345257},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./billing":{"types":"./dist/billing.d.ts","import":"./dist/billing.js"},"./logging":{"types":"./dist/logging/index.d.ts","import":"./dist/logging/index.js"},"./shopify":{"types":"./dist/shopify/index.d.ts","import":"./dist/shopify/index.js"},"./logging/node":{"types":"./dist/logging/node.d.ts","import":"./dist/logging/node.js"},"./shopify/node":{"types":"./dist/shopify/node.d.ts","import":"./dist/shopify/node.js"},"./testing/node":{"types":"./dist/testing/node.d.ts","import":"./dist/testing/node.js"},"./observability":{"types":"./dist/observability/index.d.ts","import":"./dist/observability/index.js"},"./observability/node":{"types":"./dist/observability/node.d.ts","import":"./dist/observability/node.js"},"./observability/genai":{"types":"./dist/observability/genai.d.ts","import":"./dist/observability/genai.js"},"./internationalization":{"types":"./dist/internationalization.d.ts","import":"./dist/internationalization.js"},"./observability/bullmq":{"types":"./dist/observability/bullmq.d.ts","import":"./dist/observability/bullmq.js"},"./merchant-communications":{"types":"./dist/merchant-communications.d.ts","import":"./dist/merchant-communications.js"},"./merchant-communications/node":{"types":"./dist/merchant-communications/node.d.ts","import":"./dist/merchant-communications/node.js"}},"scripts":{"test":"tsx --test \"src/**/*.test.ts\"","build":"tsup","prepack":"npm run build","typecheck":"tsc --noEmit","validate:testing-node":"npm run build && node scripts/validate-testing-node.mjs","validate:testing-node-live":"npm run build && node scripts/validate-testing-node-live.mjs","validate:merchant-communications-node":"npm run build && node scripts/validate-merchant-communications-node.mjs","validate:internationalization-entrypoint":"npm run build && node scripts/validate-internationalization-entrypoint.mjs"},"_npmUser":{"name":"kwadwoafriyie","email":"kodjo_baah@hotmail.com"},"_npmVersion":"11.17.0","description":"Shared TypeScript contracts and reusable platform primitives used by multiple Moda Interact services.","directories":{},"_nodeVersion":"24.19.0","dependencies":{"zod":"^4.0.0","winston":"3.19.0","bullmq-otel":"^2.0.1","winston-loki":"6.1.7","@opentelemetry/api":"^1.9.0","intl-messageformat":"^10.7.18","@opentelemetry/api-logs":"0.221.0","@opentelemetry/sdk-logs":"0.221.0","@opentelemetry/sdk-node":"0.221.0","@prisma/instrumentation":"^6.19.3","@opentelemetry/resources":"^2.10.0","@opentelemetry/sdk-metrics":"^2.10.0","@opentelemetry/sdk-trace-base":"^2.10.0","@opentelemetry/context-async-hooks":"^2.10.0","@opentelemetry/instrumentation-http":"0.221.0","@opentelemetry/instrumentation-undici":"0.31.0","@opentelemetry/exporter-logs-otlp-http":"0.221.0","@opentelemetry/exporter-trace-otlp-http":"0.221.0","@opentelemetry/exporter-metrics-otlp-http":"0.221.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.23.12","tsup":"^8.0.0","bullmq":"^6.3.1","ioredis":"^6.0.0","typescript":"^5.0.0","@types/node":"^26.4.0"},"_npmOperationalInternal":{"tmp":"tmp/moda-interact-shared_0.7.3_1788811549768_0.9489192862012157","host":"s3://npm-registry-packages-npm-production"}},"0.7.4":{"name":"@modainteract/moda-interact-shared","version":"0.7.4","_id":"@modainteract/moda-interact-shared@0.7.4","maintainers":[{"name":"kwadwoafriyie","email":"kodjo_baah@hotmail.com"}],"dist":{"shasum":"c2278412379ea4d3d645974a2f53af3e237eb148","tarball":"https://registry.npmjs.org/@modainteract/moda-interact-shared/-/moda-interact-shared-0.7.4.tgz","fileCount":58,"integrity":"sha512-yqmkJNznuDBwiyTKxixIVsfY1vQDv2HeT6EaUvost/b4fegPdHPQZewXt+gnObLnbwnU6UP7Yt+D4+rRq1BPXQ==","signatures":[{"sig":"MEUCIQDh9Ca0rN162b8GzWOvx28LldwATrRSnJBaqocbtIpJXAIgXZMPz0RFGAZ8BWE/UdRaKmkc3U0EAXllNr9wkK0e//k=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":345319},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./billing":{"types":"./dist/billing.d.ts","import":"./dist/billing.js"},"./logging":{"types":"./dist/logging/index.d.ts","import":"./dist/logging/index.js"},"./shopify":{"types":"./dist/shopify/index.d.ts","import":"./dist/shopify/index.js"},"./logging/node":{"types":"./dist/logging/node.d.ts","import":"./dist/logging/node.js"},"./shopify/node":{"types":"./dist/shopify/node.d.ts","import":"./dist/shopify/node.js"},"./testing/node":{"types":"./dist/testing/node.d.ts","import":"./dist/testing/node.js"},"./observability":{"types":"./dist/observability/index.d.ts","import":"./dist/observability/index.js"},"./observability/node":{"types":"./dist/observability/node.d.ts","import":"./dist/observability/node.js"},"./observability/genai":{"types":"./dist/observability/genai.d.ts","import":"./dist/observability/genai.js"},"./internationalization":{"types":"./dist/internationalization.d.ts","import":"./dist/internationalization.js"},"./observability/bullmq":{"types":"./dist/observability/bullmq.d.ts","import":"./dist/observability/bullmq.js"},"./merchant-communications":{"types":"./dist/merchant-communications.d.ts","import":"./dist/merchant-communications.js"},"./merchant-communications/node":{"types":"./dist/merchant-communications/node.d.ts","import":"./dist/merchant-communications/node.js"}},"scripts":{"test":"tsx --test \"src/**/*.test.ts\"","build":"tsup","prepack":"npm run build","typecheck":"tsc --noEmit","validate:testing-node":"npm run build && node scripts/validate-testing-node.mjs","validate:testing-node-live":"npm run build && node scripts/validate-testing-node-live.mjs","validate:merchant-communications-node":"npm run build && node scripts/validate-merchant-communications-node.mjs","validate:internationalization-entrypoint":"npm run build && node scripts/validate-internationalization-entrypoint.mjs"},"_npmUser":{"name":"kwadwoafriyie","email":"kodjo_baah@hotmail.com"},"_npmVersion":"11.17.0","description":"Shared TypeScript contracts and reusable platform primitives used by multiple Moda Interact services.","directories":{},"_nodeVersion":"24.19.0","dependencies":{"zod":"^4.0.0","winston":"3.19.0","bullmq-otel":"^2.0.1","winston-loki":"6.1.7","@opentelemetry/api":"^1.9.0","intl-messageformat":"^10.7.18","@opentelemetry/api-logs":"0.221.0","@opentelemetry/sdk-logs":"0.221.0","@opentelemetry/sdk-node":"0.221.0","@prisma/instrumentation":"^6.19.3","@opentelemetry/resources":"^2.10.0","@opentelemetry/sdk-metrics":"^2.10.0","@opentelemetry/sdk-trace-base":"^2.10.0","@opentelemetry/context-async-hooks":"^2.10.0","@opentelemetry/instrumentation-http":"0.221.0","@opentelemetry/instrumentation-undici":"0.31.0","@opentelemetry/exporter-logs-otlp-http":"0.221.0","@opentelemetry/exporter-trace-otlp-http":"0.221.0","@opentelemetry/exporter-metrics-otlp-http":"0.221.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.23.12","tsup":"^8.0.0","bullmq":"^6.3.1","ioredis":"^6.0.0","typescript":"^5.0.0","@types/node":"^26.4.0"},"_npmOperationalInternal":{"tmp":"tmp/moda-interact-shared_0.7.4_1788816496837_0.9250648611012544","host":"s3://npm-registry-packages-npm-production"}},"0.8.0":{"name":"@modainteract/moda-interact-shared","version":"0.8.0","_id":"@modainteract/moda-interact-shared@0.8.0","maintainers":[{"name":"kwadwoafriyie","email":"kodjo_baah@hotmail.com"}],"dist":{"shasum":"6607e0d0ac05102504e3c36cd535dddeb4a098c7","tarball":"https://registry.npmjs.org/@modainteract/moda-interact-shared/-/moda-interact-shared-0.8.0.tgz","fileCount":58,"integrity":"sha512-jc1wU6Y0Vy2p/O1ehOyes6OD+2SzQZiWr606qE+gWK9BUZZjM+llHoGaXsZGzlfplEezbXvDbYpMQhaZ/zF9jA==","signatures":[{"sig":"MEUCIQData2YrsHP+Rt9xCIId7xAnDdGQdgzQYnncBaUgIE8fgIgdU+6dKr8yEgAAFpBBJZ4uehaYjZ+LKM3L7emXuXRNaI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":345503},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./billing":{"types":"./dist/billing.d.ts","import":"./dist/billing.js"},"./logging":{"types":"./dist/logging/index.d.ts","import":"./dist/logging/index.js"},"./shopify":{"types":"./dist/shopify/index.d.ts","import":"./dist/shopify/index.js"},"./logging/node":{"types":"./dist/logging/node.d.ts","import":"./dist/logging/node.js"},"./shopify/node":{"types":"./dist/shopify/node.d.ts","import":"./dist/shopify/node.js"},"./testing/node":{"types":"./dist/testing/node.d.ts","import":"./dist/testing/node.js"},"./observability":{"types":"./dist/observability/index.d.ts","import":"./dist/observability/index.js"},"./observability/node":{"types":"./dist/observability/node.d.ts","import":"./dist/observability/node.js"},"./observability/genai":{"types":"./dist/observability/genai.d.ts","import":"./dist/observability/genai.js"},"./internationalization":{"types":"./dist/internationalization.d.ts","import":"./dist/internationalization.js"},"./observability/bullmq":{"types":"./dist/observability/bullmq.d.ts","import":"./dist/observability/bullmq.js"},"./merchant-communications":{"types":"./dist/merchant-communications.d.ts","import":"./dist/merchant-communications.js"},"./merchant-communications/node":{"types":"./dist/merchant-communications/node.d.ts","import":"./dist/merchant-communications/node.js"}},"scripts":{"test":"tsx --test \"src/**/*.test.ts\"","build":"tsup","prepack":"npm run build","typecheck":"tsc --noEmit","validate:testing-node":"npm run build && node scripts/validate-testing-node.mjs","validate:testing-node-live":"npm run build && node scripts/validate-testing-node-live.mjs","validate:merchant-communications-node":"npm run build && node scripts/validate-merchant-communications-node.mjs","validate:internationalization-entrypoint":"npm run build && node scripts/validate-internationalization-entrypoint.mjs"},"_npmUser":{"name":"kwadwoafriyie","email":"kodjo_baah@hotmail.com"},"_npmVersion":"11.17.0","description":"Shared TypeScript contracts and reusable platform primitives used by multiple Moda Interact services.","directories":{},"_nodeVersion":"24.19.0","dependencies":{"zod":"^4.0.0","winston":"3.19.0","bullmq-otel":"^2.0.1","winston-loki":"6.1.7","@opentelemetry/api":"^1.9.0","intl-messageformat":"^10.7.18","@opentelemetry/api-logs":"0.221.0","@opentelemetry/sdk-logs":"0.221.0","@opentelemetry/sdk-node":"0.221.0","@prisma/instrumentation":"^6.19.3","@opentelemetry/resources":"^2.10.0","@opentelemetry/sdk-metrics":"^2.10.0","@opentelemetry/sdk-trace-base":"^2.10.0","@opentelemetry/context-async-hooks":"^2.10.0","@opentelemetry/instrumentation-http":"0.221.0","@opentelemetry/instrumentation-undici":"0.31.0","@opentelemetry/exporter-logs-otlp-http":"0.221.0","@opentelemetry/exporter-trace-otlp-http":"0.221.0","@opentelemetry/exporter-metrics-otlp-http":"0.221.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.23.12","tsup":"^8.0.0","bullmq":"^6.3.1","ioredis":"^6.0.0","typescript":"^5.0.0","@types/node":"^26.4.0"},"_npmOperationalInternal":{"tmp":"tmp/moda-interact-shared_0.8.0_1788862697655_0.9471363924534952","host":"s3://npm-registry-packages-npm-production"}},"0.9.0":{"name":"@modainteract/moda-interact-shared","version":"0.9.0","_id":"@modainteract/moda-interact-shared@0.9.0","maintainers":[{"name":"kwadwoafriyie","email":"kodjo_baah@hotmail.com"}],"dist":{"shasum":"8c86fa3212544f41051339311c6afe3c2f019f10","tarball":"https://registry.npmjs.org/@modainteract/moda-interact-shared/-/moda-interact-shared-0.9.0.tgz","fileCount":58,"integrity":"sha512-MzVo7Peosw7z2C06oJCgugW8CiKyDQB1tiJDDnkZB4G6geYEwltaYgWRkK0EoR0hJnA/Mhxnam6vxQDtVNpGtg==","signatures":[{"sig":"MEQCIDQdGg9BGpjOMx6UMEOHWQDx9BTdvLCTO/vkoeMnJ804AiB/0/gwqsdJ3LB61TMsmOnuf3nniXg8MDisQOPzfRaLhQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":354938},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./billing":{"types":"./dist/billing.d.ts","import":"./dist/billing.js"},"./logging":{"types":"./dist/logging/index.d.ts","import":"./dist/logging/index.js"},"./shopify":{"types":"./dist/shopify/index.d.ts","import":"./dist/shopify/index.js"},"./logging/node":{"types":"./dist/logging/node.d.ts","import":"./dist/logging/node.js"},"./shopify/node":{"types":"./dist/shopify/node.d.ts","import":"./dist/shopify/node.js"},"./testing/node":{"types":"./dist/testing/node.d.ts","import":"./dist/testing/node.js"},"./observability":{"types":"./dist/observability/index.d.ts","import":"./dist/observability/index.js"},"./observability/node":{"types":"./dist/observability/node.d.ts","import":"./dist/observability/node.js"},"./observability/genai":{"types":"./dist/observability/genai.d.ts","import":"./dist/observability/genai.js"},"./internationalization":{"types":"./dist/internationalization.d.ts","import":"./dist/internationalization.js"},"./observability/bullmq":{"types":"./dist/observability/bullmq.d.ts","import":"./dist/observability/bullmq.js"},"./merchant-communications":{"types":"./dist/merchant-communications.d.ts","import":"./dist/merchant-communications.js"},"./merchant-communications/node":{"types":"./dist/merchant-communications/node.d.ts","import":"./dist/merchant-communications/node.js"}},"scripts":{"test":"tsx --test \"src/**/*.test.ts\"","build":"tsup","prepack":"npm run build","typecheck":"tsc --noEmit","validate:testing-node":"npm run build && node scripts/validate-testing-node.mjs","validate:testing-node-live":"npm run build && node scripts/validate-testing-node-live.mjs","validate:merchant-communications-node":"npm run build && node scripts/validate-merchant-communications-node.mjs","validate:internationalization-entrypoint":"npm run build && node scripts/validate-internationalization-entrypoint.mjs"},"_npmUser":{"name":"kwadwoafriyie","email":"kodjo_baah@hotmail.com"},"_npmVersion":"11.19.0","description":"Shared TypeScript contracts and reusable platform primitives used by multiple Moda Interact services.","directories":{},"_nodeVersion":"24.21.0","dependencies":{"zod":"^4.0.0","winston":"3.19.0","bullmq-otel":"^2.0.1","winston-loki":"6.1.7","@opentelemetry/api":"^1.9.0","intl-messageformat":"^10.7.18","@opentelemetry/api-logs":"0.221.0","@opentelemetry/sdk-logs":"0.221.0","@opentelemetry/sdk-node":"0.221.0","@prisma/instrumentation":"^6.19.3","@opentelemetry/resources":"^2.10.0","@opentelemetry/sdk-metrics":"^2.10.0","@opentelemetry/sdk-trace-base":"^2.10.0","@opentelemetry/context-async-hooks":"^2.10.0","@opentelemetry/instrumentation-http":"0.221.0","@opentelemetry/instrumentation-undici":"0.31.0","@opentelemetry/exporter-logs-otlp-http":"0.221.0","@opentelemetry/exporter-trace-otlp-http":"0.221.0","@opentelemetry/exporter-metrics-otlp-http":"0.221.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.23.12","tsup":"^8.0.0","bullmq":"^6.3.1","ioredis":"^6.0.0","typescript":"^5.0.0","@types/node":"^26.4.0"},"_npmOperationalInternal":{"tmp":"tmp/moda-interact-shared_0.9.0_1789036922212_0.8892421310456606","host":"s3://npm-registry-packages-npm-production"}},"0.10.0":{"name":"@modainteract/moda-interact-shared","version":"0.10.0","_id":"@modainteract/moda-interact-shared@0.10.0","maintainers":[{"name":"kwadwoafriyie","email":"kodjo_baah@hotmail.com"}],"dist":{"shasum":"219601ddc1689f5cbeb6a8b4ab82326445b16654","tarball":"https://registry.npmjs.org/@modainteract/moda-interact-shared/-/moda-interact-shared-0.10.0.tgz","fileCount":58,"integrity":"sha512-4kEEcEOFpSn98wDmUItscVZSSObKQo2R2+H1rjs9H9yLjkSc7qz+tbKHWtsrCyhgPq/lN4nqd9eOexyT4z6yfQ==","signatures":[{"sig":"MEYCIQDEtDrTbnK7niTLJlLNvSJ/L8SUSGQ7pAk27lwmGFLvpgIhAJpUn4ZCsYcXYaK4knP2DNSP6+dS3lEnAmNiOLWPN6vo","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":362708},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./billing":{"types":"./dist/billing.d.ts","import":"./dist/billing.js"},"./logging":{"types":"./dist/logging/index.d.ts","import":"./dist/logging/index.js"},"./shopify":{"types":"./dist/shopify/index.d.ts","import":"./dist/shopify/index.js"},"./logging/node":{"types":"./dist/logging/node.d.ts","import":"./dist/logging/node.js"},"./shopify/node":{"types":"./dist/shopify/node.d.ts","import":"./dist/shopify/node.js"},"./testing/node":{"types":"./dist/testing/node.d.ts","import":"./dist/testing/node.js"},"./observability":{"types":"./dist/observability/index.d.ts","import":"./dist/observability/index.js"},"./observability/node":{"types":"./dist/observability/node.d.ts","import":"./dist/observability/node.js"},"./observability/genai":{"types":"./dist/observability/genai.d.ts","import":"./dist/observability/genai.js"},"./internationalization":{"types":"./dist/internationalization.d.ts","import":"./dist/internationalization.js"},"./observability/bullmq":{"types":"./dist/observability/bullmq.d.ts","import":"./dist/observability/bullmq.js"},"./merchant-communications":{"types":"./dist/merchant-communications.d.ts","import":"./dist/merchant-communications.js"},"./merchant-communications/node":{"types":"./dist/merchant-communications/node.d.ts","import":"./dist/merchant-communications/node.js"}},"scripts":{"test":"tsx --test \"src/**/*.test.ts\"","build":"tsup","prepack":"npm run build","typecheck":"tsc --noEmit","validate:testing-node":"npm run build && node scripts/validate-testing-node.mjs","validate:testing-node-live":"npm run build && node scripts/validate-testing-node-live.mjs","validate:billing-entrypoint":"npm run build && node scripts/validate-billing-entrypoint.mjs","validate:merchant-communications-node":"npm run build && node scripts/validate-merchant-communications-node.mjs","validate:internationalization-entrypoint":"npm run build && node scripts/validate-internationalization-entrypoint.mjs"},"_npmUser":{"name":"kwadwoafriyie","email":"kodjo_baah@hotmail.com"},"_npmVersion":"11.19.0","description":"Shared TypeScript contracts and reusable platform primitives used by multiple Moda Interact services.","directories":{},"_nodeVersion":"24.21.0","dependencies":{"zod":"^4.0.0","winston":"3.19.0","bullmq-otel":"^2.0.1","winston-loki":"6.1.7","@opentelemetry/api":"^1.9.0","intl-messageformat":"^10.7.18","@opentelemetry/api-logs":"0.221.0","@opentelemetry/sdk-logs":"0.221.0","@opentelemetry/sdk-node":"0.221.0","@prisma/instrumentation":"^6.19.3","@opentelemetry/resources":"^2.10.0","@opentelemetry/sdk-metrics":"^2.10.0","@opentelemetry/sdk-trace-base":"^2.10.0","@opentelemetry/context-async-hooks":"^2.10.0","@opentelemetry/instrumentation-http":"0.221.0","@opentelemetry/instrumentation-undici":"0.31.0","@opentelemetry/exporter-logs-otlp-http":"0.221.0","@opentelemetry/exporter-trace-otlp-http":"0.221.0","@opentelemetry/exporter-metrics-otlp-http":"0.221.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.23.12","tsup":"^8.0.0","bullmq":"^6.3.1","ioredis":"^6.0.0","typescript":"^5.0.0","@types/node":"^26.4.0"},"_npmOperationalInternal":{"tmp":"tmp/moda-interact-shared_0.10.0_1789147676566_0.14854418665356128","host":"s3://npm-registry-packages-npm-production"}},"0.11.0":{"name":"@modainteract/moda-interact-shared","version":"0.11.0","_id":"@modainteract/moda-interact-shared@0.11.0","maintainers":[{"name":"kwadwoafriyie","email":"kodjo_baah@hotmail.com"}],"dist":{"shasum":"fd096379901d4c454bf1cde575b48621c1c21b79","tarball":"https://registry.npmjs.org/@modainteract/moda-interact-shared/-/moda-interact-shared-0.11.0.tgz","fileCount":58,"integrity":"sha512-zue81gvqtIumO3P9E37NRgTNwSX1hn+xqYvM0iqHgUy8OoK8zgIum8R8iGh2LX115haKpL4bTefLW6P0BlDBFQ==","signatures":[{"sig":"MEUCIQC6x5HsnAkZ3tV8XeluqPhCRtKaE3QvHA3dXFTqZouGhgIgPrS1tzRWN/rRfaM+0speiaCWILZVSuGjqx54BO9LF2I=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":355896},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./billing":{"types":"./dist/billing.d.ts","import":"./dist/billing.js"},"./logging":{"types":"./dist/logging/index.d.ts","import":"./dist/logging/index.js"},"./shopify":{"types":"./dist/shopify/index.d.ts","import":"./dist/shopify/index.js"},"./logging/node":{"types":"./dist/logging/node.d.ts","import":"./dist/logging/node.js"},"./shopify/node":{"types":"./dist/shopify/node.d.ts","import":"./dist/shopify/node.js"},"./testing/node":{"types":"./dist/testing/node.d.ts","import":"./dist/testing/node.js"},"./observability":{"types":"./dist/observability/index.d.ts","import":"./dist/observability/index.js"},"./observability/node":{"types":"./dist/observability/node.d.ts","import":"./dist/observability/node.js"},"./observability/genai":{"types":"./dist/observability/genai.d.ts","import":"./dist/observability/genai.js"},"./internationalization":{"types":"./dist/internationalization.d.ts","import":"./dist/internationalization.js"},"./observability/bullmq":{"types":"./dist/observability/bullmq.d.ts","import":"./dist/observability/bullmq.js"},"./merchant-communications":{"types":"./dist/merchant-communications.d.ts","import":"./dist/merchant-communications.js"},"./merchant-communications/node":{"types":"./dist/merchant-communications/node.d.ts","import":"./dist/merchant-communications/node.js"}},"scripts":{"test":"tsx --test \"src/**/*.test.ts\"","build":"tsup","prepack":"npm run build","typecheck":"tsc --noEmit","validate:testing-node":"npm run build && node scripts/validate-testing-node.mjs","validate:testing-node-live":"npm run build && node scripts/validate-testing-node-live.mjs","validate:billing-entrypoint":"npm run build && node scripts/validate-billing-entrypoint.mjs","validate:merchant-communications-node":"npm run build && node scripts/validate-merchant-communications-node.mjs","validate:internationalization-entrypoint":"npm run build && node scripts/validate-internationalization-entrypoint.mjs"},"_npmUser":{"name":"kwadwoafriyie","email":"kodjo_baah@hotmail.com"},"_npmVersion":"11.19.0","description":"Shared TypeScript contracts and reusable platform primitives used by multiple Moda Interact services.","directories":{},"_nodeVersion":"24.21.0","dependencies":{"zod":"^4.0.0","winston":"3.19.0","bullmq-otel":"^2.0.1","winston-loki":"6.1.7","@opentelemetry/api":"^1.9.0","intl-messageformat":"^10.7.18","@opentelemetry/api-logs":"0.221.0","@opentelemetry/sdk-logs":"0.221.0","@opentelemetry/sdk-node":"0.221.0","@prisma/instrumentation":"^6.19.3","@opentelemetry/resources":"^2.10.0","@opentelemetry/sdk-metrics":"^2.10.0","@opentelemetry/sdk-trace-base":"^2.10.0","@opentelemetry/context-async-hooks":"^2.10.0","@opentelemetry/instrumentation-http":"0.221.0","@opentelemetry/instrumentation-undici":"0.31.0","@opentelemetry/exporter-logs-otlp-http":"0.221.0","@opentelemetry/exporter-trace-otlp-http":"0.221.0","@opentelemetry/exporter-metrics-otlp-http":"0.221.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.23.12","tsup":"^8.0.0","bullmq":"^6.3.1","ioredis":"^6.0.0","typescript":"^5.0.0","@types/node":"^26.4.0"},"_npmOperationalInternal":{"tmp":"tmp/moda-interact-shared_0.11.0_1789227909916_0.4828986823291752","host":"s3://npm-registry-packages-npm-production"}},"0.11.1":{"name":"@modainteract/moda-interact-shared","version":"0.11.1","_id":"@modainteract/moda-interact-shared@0.11.1","maintainers":[{"name":"kwadwoafriyie","email":"kodjo_baah@hotmail.com"}],"dist":{"shasum":"a07776303725d7aca6e843f703508b74fd13f5d8","tarball":"https://registry.npmjs.org/@modainteract/moda-interact-shared/-/moda-interact-shared-0.11.1.tgz","fileCount":58,"integrity":"sha512-EE5Ni3fLI1ZC+VkaAHmLjhAYWt1ufokw/CO4QmZ2AK04fMKl9cAnypzkhf2y4OuWZ+2qyog++wSPUTjohtpy5A==","signatures":[{"sig":"MEUCIQDJJO4e2CYGsdIlLLV/GTJ5OV+OKkiPC2Cj+EbM+axyOgIgRFoQ9UUDJoALG9bk613g2+csRLUpcBYMlTocDU9ep0Q=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQCZnD/AsBhLmTnyLvLGHgzxxEW8vyE1VRvEPT+WkPA94wIhANMC8DJ/fcfa0c3OCW9278F40p72ctddW+uvDIuAWoqm","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":363307},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./billing":{"types":"./dist/billing.d.ts","import":"./dist/billing.js"},"./logging":{"types":"./dist/logging/index.d.ts","import":"./dist/logging/index.js"},"./shopify":{"types":"./dist/shopify/index.d.ts","import":"./dist/shopify/index.js"},"./logging/node":{"types":"./dist/logging/node.d.ts","import":"./dist/logging/node.js"},"./shopify/node":{"types":"./dist/shopify/node.d.ts","import":"./dist/shopify/node.js"},"./testing/node":{"types":"./dist/testing/node.d.ts","import":"./dist/testing/node.js"},"./observability":{"types":"./dist/observability/index.d.ts","import":"./dist/observability/index.js"},"./observability/node":{"types":"./dist/observability/node.d.ts","import":"./dist/observability/node.js"},"./observability/genai":{"types":"./dist/observability/genai.d.ts","import":"./dist/observability/genai.js"},"./internationalization":{"types":"./dist/internationalization.d.ts","import":"./dist/internationalization.js"},"./observability/bullmq":{"types":"./dist/observability/bullmq.d.ts","import":"./dist/observability/bullmq.js"},"./merchant-communications":{"types":"./dist/merchant-communications.d.ts","import":"./dist/merchant-communications.js"},"./merchant-communications/node":{"types":"./dist/merchant-communications/node.d.ts","import":"./dist/merchant-communications/node.js"}},"scripts":{"test":"tsx --test \"src/**/*.test.ts\"","build":"tsup","prepack":"npm run build","typecheck":"tsc --noEmit","validate:testing-node":"npm run build && node scripts/validate-testing-node.mjs","validate:testing-node-live":"npm run build && node scripts/validate-testing-node-live.mjs","validate:billing-entrypoint":"npm run build && node scripts/validate-billing-entrypoint.mjs","validate:merchant-communications-node":"npm run build && node scripts/validate-merchant-communications-node.mjs","validate:internationalization-entrypoint":"npm run build && node scripts/validate-internationalization-entrypoint.mjs"},"_npmUser":{"name":"kwadwoafriyie","email":"kodjo_baah@hotmail.com"},"_npmVersion":"11.19.0","description":"Shared TypeScript contracts and reusable platform primitives used by multiple Moda Interact services.","directories":{},"_nodeVersion":"24.21.0","dependencies":{"zod":"^4.0.0","winston":"3.19.0","bullmq-otel":"^2.0.1","winston-loki":"6.1.7","@opentelemetry/api":"^1.9.0","intl-messageformat":"^10.7.18","@opentelemetry/api-logs":"0.221.0","@opentelemetry/sdk-logs":"0.221.0","@opentelemetry/sdk-node":"0.221.0","@prisma/instrumentation":"^6.19.3","@opentelemetry/resources":"^2.10.0","@opentelemetry/sdk-metrics":"^2.10.0","@opentelemetry/sdk-trace-base":"^2.10.0","@opentelemetry/context-async-hooks":"^2.10.0","@opentelemetry/instrumentation-http":"0.221.0","@opentelemetry/instrumentation-undici":"0.31.0","@opentelemetry/exporter-logs-otlp-http":"0.221.0","@opentelemetry/exporter-trace-otlp-http":"0.221.0","@opentelemetry/exporter-metrics-otlp-http":"0.221.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.23.12","tsup":"^8.0.0","bullmq":"^6.3.1","ioredis":"^6.0.0","typescript":"^5.0.0","@types/node":"^26.4.0"},"_npmOperationalInternal":{"tmp":"tmp/moda-interact-shared_0.11.1_1789475295929_0.8931332275242745","host":"s3://npm-registry-packages-npm-production"}},"0.11.2":{"name":"@modainteract/moda-interact-shared","version":"0.11.2","_id":"@modainteract/moda-interact-shared@0.11.2","maintainers":[{"name":"kwadwoafriyie","email":"kodjo_baah@hotmail.com"}],"dist":{"shasum":"50927cf0c2f7fb0b553cc77086fbb318f3d2f73a","tarball":"https://registry.npmjs.org/@modainteract/moda-interact-shared/-/moda-interact-shared-0.11.2.tgz","fileCount":58,"integrity":"sha512-PRCsqelzgAJ9dWZWWAMFEQCyem62VbmQqTdK8fW4ZoWUzDHY8md1OaKjxqs62rf+dYdeNq+8gwLykLZZhvHdbw==","signatures":[{"sig":"MEUCIQDEGDEg3kqzzWIsHrJG20VPcV0hxubFIX4XDiXwcE1NJQIgeoNVJKtUQvnuU4rFmq4ZTiAFnPMviOcI1pD8QcZkFZk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIDI1Zt2bvzXC1RksFgrUuF4oV40HDu8ysqZhppaqo67HAiBnzCTPgxz+gaQJqYP+6Kw0LlEXJx2h84wWvKKe0sN63w==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":363511},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./billing":{"types":"./dist/billing.d.ts","import":"./dist/billing.js"},"./logging":{"types":"./dist/logging/index.d.ts","import":"./dist/logging/index.js"},"./shopify":{"types":"./dist/shopify/index.d.ts","import":"./dist/shopify/index.js"},"./logging/node":{"types":"./dist/logging/node.d.ts","import":"./dist/logging/node.js"},"./shopify/node":{"types":"./dist/shopify/node.d.ts","import":"./dist/shopify/node.js"},"./testing/node":{"types":"./dist/testing/node.d.ts","import":"./dist/testing/node.js"},"./observability":{"types":"./dist/observability/index.d.ts","import":"./dist/observability/index.js"},"./observability/node":{"types":"./dist/observability/node.d.ts","import":"./dist/observability/node.js"},"./observability/genai":{"types":"./dist/observability/genai.d.ts","import":"./dist/observability/genai.js"},"./internationalization":{"types":"./dist/internationalization.d.ts","import":"./dist/internationalization.js"},"./observability/bullmq":{"types":"./dist/observability/bullmq.d.ts","import":"./dist/observability/bullmq.js"},"./merchant-communications":{"types":"./dist/merchant-communications.d.ts","import":"./dist/merchant-communications.js"},"./merchant-communications/node":{"types":"./dist/merchant-communications/node.d.ts","import":"./dist/merchant-communications/node.js"}},"scripts":{"test":"tsx --test \"src/**/*.test.ts\"","build":"tsup","prepack":"npm run build","typecheck":"tsc --noEmit","validate:testing-node":"npm run build && node scripts/validate-testing-node.mjs","validate:testing-node-live":"npm run build && node scripts/validate-testing-node-live.mjs","validate:billing-entrypoint":"npm run build && node scripts/validate-billing-entrypoint.mjs","validate:merchant-communications-node":"npm run build && node scripts/validate-merchant-communications-node.mjs","validate:internationalization-entrypoint":"npm run build && node scripts/validate-internationalization-entrypoint.mjs"},"_npmUser":{"name":"kwadwoafriyie","email":"kodjo_baah@hotmail.com"},"_npmVersion":"11.19.0","description":"Shared TypeScript contracts and reusable platform primitives used by multiple Moda Interact services.","directories":{},"_nodeVersion":"24.21.0","dependencies":{"zod":"^4.0.0","winston":"3.19.0","bullmq-otel":"^2.0.1","winston-loki":"6.1.7","@opentelemetry/api":"^1.9.0","intl-messageformat":"^10.7.18","@opentelemetry/api-logs":"0.221.0","@opentelemetry/sdk-logs":"0.221.0","@opentelemetry/sdk-node":"0.221.0","@prisma/instrumentation":"^6.19.3","@opentelemetry/resources":"^2.10.0","@opentelemetry/sdk-metrics":"^2.10.0","@opentelemetry/sdk-trace-base":"^2.10.0","@opentelemetry/context-async-hooks":"^2.10.0","@opentelemetry/instrumentation-http":"0.221.0","@opentelemetry/instrumentation-undici":"0.31.0","@opentelemetry/exporter-logs-otlp-http":"0.221.0","@opentelemetry/exporter-trace-otlp-http":"0.221.0","@opentelemetry/exporter-metrics-otlp-http":"0.221.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.23.12","tsup":"^8.0.0","bullmq":"^6.3.1","ioredis":"^6.0.0","typescript":"^5.0.0","@types/node":"^26.4.0"},"_npmOperationalInternal":{"tmp":"tmp/moda-interact-shared_0.11.2_1789476569967_0.7886672415686495","host":"s3://npm-registry-packages-npm-production"}},"0.12.0":{"name":"@modainteract/moda-interact-shared","version":"0.12.0","_id":"@modainteract/moda-interact-shared@0.12.0","maintainers":[{"name":"kwadwoafriyie","email":"kodjo_baah@hotmail.com"}],"dist":{"shasum":"5d75b831cc6bdd0d631d6e08065c6ae12c130a59","tarball":"https://registry.npmjs.org/@modainteract/moda-interact-shared/-/moda-interact-shared-0.12.0.tgz","fileCount":61,"integrity":"sha512-ix/JIAKE9hPHb5VMdF1Y1h0eTH5om2fU/9oW0PvxpJwtBhIiDofktmGDAlOSDKxKQgIji56oKrPjTikOOGJVag==","signatures":[{"sig":"MEUCIQCAlzbYFPd104wID4MngCjuOn6QWQW7W5G9gJHBnei0zwIgAIT+49lyJSEWPn2pNtAo2waoLEzbjEPyDfiAmRkJWfs=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQDgDYG7qoloSjPPQU9wa3KNyu11Y4tV0WzW0Pn1eZaHEAIgUY+7WiVH3kcrwq1La/LRUDq0X0pIw48N8NAT/TvrNS4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":371726},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./billing":{"types":"./dist/billing.d.ts","import":"./dist/billing.js"},"./logging":{"types":"./dist/logging/index.d.ts","import":"./dist/logging/index.js"},"./shopify":{"types":"./dist/shopify/index.d.ts","import":"./dist/shopify/index.js"},"./whatsapp":{"types":"./dist/whatsapp.d.ts","import":"./dist/whatsapp.js"},"./logging/node":{"types":"./dist/logging/node.d.ts","import":"./dist/logging/node.js"},"./shopify/node":{"types":"./dist/shopify/node.d.ts","import":"./dist/shopify/node.js"},"./testing/node":{"types":"./dist/testing/node.d.ts","import":"./dist/testing/node.js"},"./observability":{"types":"./dist/observability/index.d.ts","import":"./dist/observability/index.js"},"./observability/node":{"types":"./dist/observability/node.d.ts","import":"./dist/observability/node.js"},"./observability/genai":{"types":"./dist/observability/genai.d.ts","import":"./dist/observability/genai.js"},"./internationalization":{"types":"./dist/internationalization.d.ts","import":"./dist/internationalization.js"},"./observability/bullmq":{"types":"./dist/observability/bullmq.d.ts","import":"./dist/observability/bullmq.js"},"./merchant-communications":{"types":"./dist/merchant-communications.d.ts","import":"./dist/merchant-communications.js"},"./merchant-communications/node":{"types":"./dist/merchant-communications/node.d.ts","import":"./dist/merchant-communications/node.js"}},"scripts":{"test":"tsx --test \"src/**/*.test.ts\"","build":"tsup","prepack":"npm run build","typecheck":"tsc --noEmit","validate:testing-node":"npm run build && node scripts/validate-testing-node.mjs","validate:testing-node-live":"npm run build && node scripts/validate-testing-node-live.mjs","validate:billing-entrypoint":"npm run build && node scripts/validate-billing-entrypoint.mjs","validate:merchant-communications-node":"npm run build && node scripts/validate-merchant-communications-node.mjs","validate:internationalization-entrypoint":"npm run build && node scripts/validate-internationalization-entrypoint.mjs"},"_npmUser":{"name":"kwadwoafriyie","email":"kodjo_baah@hotmail.com"},"_npmVersion":"11.19.0","description":"Shared TypeScript contracts and reusable platform primitives used by multiple Moda Interact services.","directories":{},"_nodeVersion":"24.21.0","dependencies":{"zod":"^4.0.0","winston":"3.19.0","bullmq-otel":"^2.0.1","winston-loki":"6.1.7","@opentelemetry/api":"^1.9.0","intl-messageformat":"^10.7.18","@opentelemetry/api-logs":"0.221.0","@opentelemetry/sdk-logs":"0.221.0","@opentelemetry/sdk-node":"0.221.0","@prisma/instrumentation":"^6.19.3","@opentelemetry/resources":"^2.10.0","@opentelemetry/sdk-metrics":"^2.10.0","@opentelemetry/sdk-trace-base":"^2.10.0","@opentelemetry/context-async-hooks":"^2.10.0","@opentelemetry/instrumentation-http":"0.221.0","@opentelemetry/instrumentation-undici":"0.31.0","@opentelemetry/exporter-logs-otlp-http":"0.221.0","@opentelemetry/exporter-trace-otlp-http":"0.221.0","@opentelemetry/exporter-metrics-otlp-http":"0.221.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.23.12","tsup":"^8.0.0","bullmq":"^6.3.1","ioredis":"^6.0.0","typescript":"^5.0.0","@types/node":"^26.4.0"},"_npmOperationalInternal":{"tmp":"tmp/moda-interact-shared_0.12.0_1789558720593_0.5123789116107467","host":"s3://npm-registry-packages-npm-production"}},"0.12.1":{"name":"@modainteract/moda-interact-shared","version":"0.12.1","_id":"@modainteract/moda-interact-shared@0.12.1","maintainers":[{"name":"kwadwoafriyie","email":"kodjo_baah@hotmail.com"}],"dist":{"shasum":"1e3ce8fb1922838f7b01b4f6c8d230c7a9e52745","tarball":"https://registry.npmjs.org/@modainteract/moda-interact-shared/-/moda-interact-shared-0.12.1.tgz","fileCount":66,"integrity":"sha512-aNn5JuKIVB77bJ3+B5TrTk5wsUFpIvqqxZOvWSMG/ORx6TXhQkcjQ7+0EnM0dqV7S3MM9G0t4dS/2ESWkSxpDg==","signatures":[{"sig":"MEUCIQDmB7t59tr76MHDASmL8+gtdNmjMmjybS4z5w33roYxqgIgMM1yoWN8HVh1meC4PYrP2HTjlGNB6UfcEp8cZj3D2Ao=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIB3HJ3N6QprKttvrnGGJRdhRwluvxu8BhTo3bjiHDqdqAiBlNMbMIiPDkwySlQAWiUqpR2cPdNXDAaLrtH5SYm4okA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":392871},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./billing":{"types":"./dist/billing.d.ts","import":"./dist/billing.js"},"./logging":{"types":"./dist/logging/index.d.ts","import":"./dist/logging/index.js"},"./shopify":{"types":"./dist/shopify/index.d.ts","import":"./dist/shopify/index.js"},"./whatsapp":{"types":"./dist/whatsapp.d.ts","import":"./dist/whatsapp.js"},"./logging/node":{"types":"./dist/logging/node.d.ts","import":"./dist/logging/node.js"},"./shopify/node":{"types":"./dist/shopify/node.d.ts","import":"./dist/shopify/node.js"},"./testing/node":{"types":"./dist/testing/node.d.ts","import":"./dist/testing/node.js"},"./observability":{"types":"./dist/observability/index.d.ts","import":"./dist/observability/index.js"},"./recovery-policy":{"types":"./dist/recovery-policy.d.ts","import":"./dist/recovery-policy.js"},"./observability/node":{"types":"./dist/observability/node.d.ts","import":"./dist/observability/node.js"},"./observability/genai":{"types":"./dist/observability/genai.d.ts","import":"./dist/observability/genai.js"},"./internationalization":{"types":"./dist/internationalization.d.ts","import":"./dist/internationalization.js"},"./observability/bullmq":{"types":"./dist/observability/bullmq.d.ts","import":"./dist/observability/bullmq.js"},"./merchant-communications":{"types":"./dist/merchant-communications.d.ts","import":"./dist/merchant-communications.js"},"./merchant-communications/node":{"types":"./dist/merchant-communications/node.d.ts","import":"./dist/merchant-communications/node.js"}},"scripts":{"test":"tsx --test \"src/**/*.test.ts\"","build":"tsup","prepack":"npm run build","typecheck":"tsc --noEmit","validate:testing-node":"npm run build && node scripts/validate-testing-node.mjs","validate:testing-node-live":"npm run build && node scripts/validate-testing-node-live.mjs","validate:billing-entrypoint":"npm run build && node scripts/validate-billing-entrypoint.mjs","validate:recovery-policy-entrypoint":"npm run build && node scripts/validate-recovery-policy-entrypoint.mjs","validate:merchant-communications-node":"npm run build && node scripts/validate-merchant-communications-node.mjs","validate:internationalization-entrypoint":"npm run build && node scripts/validate-internationalization-entrypoint.mjs"},"_npmUser":{"name":"kwadwoafriyie","email":"kodjo_baah@hotmail.com"},"_npmVersion":"11.19.0","description":"Shared TypeScript contracts and reusable platform primitives used by multiple Moda Interact services.","directories":{},"_nodeVersion":"24.21.0","dependencies":{"zod":"^4.0.0","winston":"3.19.0","bullmq-otel":"^2.0.1","winston-loki":"6.1.7","@opentelemetry/api":"^1.9.0","intl-messageformat":"^10.7.18","@opentelemetry/api-logs":"0.221.0","@opentelemetry/sdk-logs":"0.221.0","@opentelemetry/sdk-node":"0.221.0","@prisma/instrumentation":"^6.19.3","@opentelemetry/resources":"^2.10.0","@opentelemetry/sdk-metrics":"^2.10.0","@opentelemetry/sdk-trace-base":"^2.10.0","@opentelemetry/context-async-hooks":"^2.10.0","@opentelemetry/instrumentation-http":"0.221.0","@opentelemetry/instrumentation-undici":"0.31.0","@opentelemetry/exporter-logs-otlp-http":"0.221.0","@opentelemetry/exporter-trace-otlp-http":"0.221.0","@opentelemetry/exporter-metrics-otlp-http":"0.221.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.23.12","tsup":"^8.0.0","bullmq":"^6.3.1","ioredis":"^6.0.0","typescript":"^5.0.0","@types/node":"^26.4.0"},"_npmOperationalInternal":{"tmp":"tmp/moda-interact-shared_0.12.1_1789573719672_0.548924342119167","host":"s3://npm-registry-packages-npm-production"}},"0.12.2":{"name":"@modainteract/moda-interact-shared","version":"0.12.2","_id":"@modainteract/moda-interact-shared@0.12.2","maintainers":[{"name":"kwadwoafriyie","email":"kodjo_baah@hotmail.com"}],"dist":{"shasum":"b4d9fd8b1bebc695e0c5afda45d81b5a2308c773","tarball":"https://registry.npmjs.org/@modainteract/moda-interact-shared/-/moda-interact-shared-0.12.2.tgz","fileCount":66,"integrity":"sha512-/lTbGMD8uL0sCa+jKIA1Y1OV9yW8k2TO7EYFxkjUPHuepy+taorMhbRmHPi3Jtvijo6QsyDmxpOWDXC2djj1Fw==","signatures":[{"sig":"MEYCIQCJEcH0on8hqjIYV4tPPmJatOAKscSXR8yi2QbzaxUj1AIhAKHP0RgalhMsqWRuKXJKizvL/+SI9ksXy3eO7kr7QFr2","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIGeMTc7LL74Kuwu7gVYoxKshglVZ7QGAfEKs/VBkuA+/AiBOcqprDv5MiF4KUTS3LGkKrPsfEs0lAZyAsMN1Rw/2bw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":393091},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./billing":{"types":"./dist/billing.d.ts","import":"./dist/billing.js"},"./logging":{"types":"./dist/logging/index.d.ts","import":"./dist/logging/index.js"},"./shopify":{"types":"./dist/shopify/index.d.ts","import":"./dist/shopify/index.js"},"./whatsapp":{"types":"./dist/whatsapp.d.ts","import":"./dist/whatsapp.js"},"./logging/node":{"types":"./dist/logging/node.d.ts","import":"./dist/logging/node.js"},"./shopify/node":{"types":"./dist/shopify/node.d.ts","import":"./dist/shopify/node.js"},"./testing/node":{"types":"./dist/testing/node.d.ts","import":"./dist/testing/node.js"},"./observability":{"types":"./dist/observability/index.d.ts","import":"./dist/observability/index.js"},"./recovery-policy":{"types":"./dist/recovery-policy.d.ts","import":"./dist/recovery-policy.js"},"./observability/node":{"types":"./dist/observability/node.d.ts","import":"./dist/observability/node.js"},"./observability/genai":{"types":"./dist/observability/genai.d.ts","import":"./dist/observability/genai.js"},"./internationalization":{"types":"./dist/internationalization.d.ts","import":"./dist/internationalization.js"},"./observability/bullmq":{"types":"./dist/observability/bullmq.d.ts","import":"./dist/observability/bullmq.js"},"./merchant-communications":{"types":"./dist/merchant-communications.d.ts","import":"./dist/merchant-communications.js"},"./merchant-communications/node":{"types":"./dist/merchant-communications/node.d.ts","import":"./dist/merchant-communications/node.js"}},"scripts":{"test":"tsx --test \"src/**/*.test.ts\"","build":"tsup","prepack":"npm run build","typecheck":"tsc --noEmit","validate:testing-node":"npm run build && node scripts/validate-testing-node.mjs","validate:testing-node-live":"npm run build && node scripts/validate-testing-node-live.mjs","validate:billing-entrypoint":"npm run build && node scripts/validate-billing-entrypoint.mjs","validate:recovery-policy-entrypoint":"npm run build && node scripts/validate-recovery-policy-entrypoint.mjs","validate:merchant-communications-node":"npm run build && node scripts/validate-merchant-communications-node.mjs","validate:internationalization-entrypoint":"npm run build && node scripts/validate-internationalization-entrypoint.mjs"},"_npmUser":{"name":"kwadwoafriyie","email":"kodjo_baah@hotmail.com"},"_npmVersion":"11.19.0","description":"Shared TypeScript contracts and reusable platform primitives used by multiple Moda Interact services.","directories":{},"_nodeVersion":"24.21.0","dependencies":{"zod":"^4.0.0","winston":"3.19.0","bullmq-otel":"^2.0.1","winston-loki":"6.1.7","@opentelemetry/api":"^1.9.0","intl-messageformat":"^10.7.18","@opentelemetry/api-logs":"0.221.0","@opentelemetry/sdk-logs":"0.221.0","@opentelemetry/sdk-node":"0.221.0","@prisma/instrumentation":"^6.19.3","@opentelemetry/resources":"^2.10.0","@opentelemetry/sdk-metrics":"^2.10.0","@opentelemetry/sdk-trace-base":"^2.10.0","@opentelemetry/context-async-hooks":"^2.10.0","@opentelemetry/instrumentation-http":"0.221.0","@opentelemetry/instrumentation-undici":"0.31.0","@opentelemetry/exporter-logs-otlp-http":"0.221.0","@opentelemetry/exporter-trace-otlp-http":"0.221.0","@opentelemetry/exporter-metrics-otlp-http":"0.221.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.23.12","tsup":"^8.0.0","bullmq":"^6.3.1","ioredis":"^6.0.0","typescript":"^5.0.0","@types/node":"^26.4.0"},"_npmOperationalInternal":{"tmp":"tmp/moda-interact-shared_0.12.2_1789894353675_0.7856837465131905","host":"s3://npm-registry-packages-npm-production"}},"0.13.0":{"name":"@modainteract/moda-interact-shared","version":"0.13.0","_id":"@modainteract/moda-interact-shared@0.13.0","maintainers":[{"name":"kwadwoafriyie","email":"kodjo_baah@hotmail.com"}],"dist":{"shasum":"0b94ce311e616c93c6375ca06310464d44cb205a","tarball":"https://registry.npmjs.org/@modainteract/moda-interact-shared/-/moda-interact-shared-0.13.0.tgz","fileCount":75,"integrity":"sha512-LNw7L1D7e+TGXT8GP2qZJMj2m3iU07fMONQPdGYWJjbtShgXd8H3/NZ1El4FJWLCa33s2OBEFw9/igxwBS92bg==","signatures":[{"sig":"MEUCIHExW0bdDHB7WxWIqzsLx9ht4ONP50aNpd9mjKlwFPQHAiEAhbF7nv4tZsxGzx2dODtvxcz1Qz1xpopzFowURTp8Uzg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQCeGgUSYdQBEfRxp0bNJNuTawRnUOu0PlkCaaYT5lx95AIhAOqdr7GqPPs5ksWBkDIG5Ui875l/gkwcCwx/ReT7u5uQ","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":602993},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./billing":{"types":"./dist/billing.d.ts","import":"./dist/billing.js"},"./logging":{"types":"./dist/logging/index.d.ts","import":"./dist/logging/index.js"},"./shopify":{"types":"./dist/shopify/index.d.ts","import":"./dist/shopify/index.js"},"./commerce":{"types":"./dist/commerce/index.d.ts","import":"./dist/commerce/index.js"},"./whatsapp":{"types":"./dist/whatsapp.d.ts","import":"./dist/whatsapp.js"},"./logging/node":{"types":"./dist/logging/node.d.ts","import":"./dist/logging/node.js"},"./shopify/node":{"types":"./dist/shopify/node.d.ts","import":"./dist/shopify/node.js"},"./testing/node":{"types":"./dist/testing/node.d.ts","import":"./dist/testing/node.js"},"./observability":{"types":"./dist/observability/index.d.ts","import":"./dist/observability/index.js"},"./commerce/runner":{"types":"./dist/commerce/runner/index.d.ts","import":"./dist/commerce/runner/index.js"},"./recovery-policy":{"types":"./dist/recovery-policy.d.ts","import":"./dist/recovery-policy.js"},"./observability/node":{"types":"./dist/observability/node.d.ts","import":"./dist/observability/node.js"},"./observability/genai":{"types":"./dist/observability/genai.d.ts","import":"./dist/observability/genai.js"},"./internationalization":{"types":"./dist/internationalization.d.ts","import":"./dist/internationalization.js"},"./observability/bullmq":{"types":"./dist/observability/bullmq.d.ts","import":"./dist/observability/bullmq.js"},"./merchant-communications":{"types":"./dist/merchant-communications.d.ts","import":"./dist/merchant-communications.js"},"./merchant-communications/node":{"types":"./dist/merchant-communications/node.d.ts","import":"./dist/merchant-communications/node.js"}},"scripts":{"test":"tsx --test \"src/**/*.test.ts\"","build":"tsup","prepack":"npm run build","typecheck":"tsc --noEmit","validate:testing-node":"npm run build && node scripts/validate-testing-node.mjs","validate:testing-node-live":"npm run build && node scripts/validate-testing-node-live.mjs","validate:billing-entrypoint":"npm run build && node scripts/validate-billing-entrypoint.mjs","validate:commerce-entrypoints":"node scripts/validate-commerce-entrypoints.mjs","validate:recovery-policy-entrypoint":"npm run build && node scripts/validate-recovery-policy-entrypoint.mjs","validate:merchant-communications-node":"npm run build && node scripts/validate-merchant-communications-node.mjs","validate:internationalization-entrypoint":"npm run build && node scripts/validate-internationalization-entrypoint.mjs"},"_npmUser":{"name":"kwadwoafriyie","email":"kodjo_baah@hotmail.com"},"_npmVersion":"11.17.0","description":"Shared TypeScript contracts and reusable platform primitives used by multiple Moda Interact services.","directories":{},"_nodeVersion":"24.19.0","dependencies":{"zod":"^4.0.0","semver":"7.8.5","winston":"3.19.0","bullmq-otel":"^2.0.1","winston-loki":"6.1.7","@opentelemetry/api":"^1.9.0","intl-messageformat":"^10.7.18","@opentelemetry/api-logs":"0.221.0","@opentelemetry/sdk-logs":"0.221.0","@opentelemetry/sdk-node":"0.221.0","@prisma/instrumentation":"^6.19.3","@opentelemetry/resources":"^2.10.0","@opentelemetry/sdk-metrics":"^2.10.0","@opentelemetry/sdk-trace-base":"^2.10.0","@opentelemetry/context-async-hooks":"^2.10.0","@opentelemetry/instrumentation-http":"0.221.0","@opentelemetry/instrumentation-undici":"0.31.0","@opentelemetry/exporter-logs-otlp-http":"0.221.0","@opentelemetry/exporter-trace-otlp-http":"0.221.0","@opentelemetry/exporter-metrics-otlp-http":"0.221.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.23.12","tsup":"^8.0.0","bullmq":"^6.3.1","ioredis":"^6.0.0","typescript":"^5.0.0","@types/node":"^26.4.0","@types/semver":"7.8.0"},"_npmOperationalInternal":{"tmp":"tmp/moda-interact-shared_0.13.0_1789933333178_0.29362569385602666","host":"s3://npm-registry-packages-npm-production"}},"0.13.1":{"name":"@modainteract/moda-interact-shared","version":"0.13.1","_id":"@modainteract/moda-interact-shared@0.13.1","maintainers":[{"name":"kwadwoafriyie","email":"kodjo_baah@hotmail.com"}],"dist":{"shasum":"fde3c4dc74963509e6483a42388e54024ffc94c1","tarball":"https://registry.npmjs.org/@modainteract/moda-interact-shared/-/moda-interact-shared-0.13.1.tgz","fileCount":75,"integrity":"sha512-qano76oJ3McL/EYMq7D0GM0W+kAY0wMsSHzWP1NdXSGCa19YiakjkDjZ9WtUylFCDud+kO+uboR4PTSIBoXEBQ==","signatures":[{"sig":"MEYCIQCftRkEcoRZ39ruaaNRWYdlCVyv3c84xg4YxxiIVIGFhwIhAMi1NQvrJV/uzbllz6VpHV76eIz4Nb3jfSZrmjVMGBfU","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIEY6PJ+JJaXoU6GrahOjwniqwwpmPFy+VsgeZOuRzgUsAiEA0DZ7XFLZ+HtJ+qBMy3L51sd1KHBDDkdSq9Odw8x4Q6o=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":609372},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./billing":{"types":"./dist/billing.d.ts","import":"./dist/billing.js"},"./logging":{"types":"./dist/logging/index.d.ts","import":"./dist/logging/index.js"},"./shopify":{"types":"./dist/shopify/index.d.ts","import":"./dist/shopify/index.js"},"./commerce":{"types":"./dist/commerce/index.d.ts","import":"./dist/commerce/index.js"},"./whatsapp":{"types":"./dist/whatsapp.d.ts","import":"./dist/whatsapp.js"},"./logging/node":{"types":"./dist/logging/node.d.ts","import":"./dist/logging/node.js"},"./shopify/node":{"types":"./dist/shopify/node.d.ts","import":"./dist/shopify/node.js"},"./testing/node":{"types":"./dist/testing/node.d.ts","import":"./dist/testing/node.js"},"./observability":{"types":"./dist/observability/index.d.ts","import":"./dist/observability/index.js"},"./commerce/runner":{"types":"./dist/commerce/runner/index.d.ts","import":"./dist/commerce/runner/index.js"},"./recovery-policy":{"types":"./dist/recovery-policy.d.ts","import":"./dist/recovery-policy.js"},"./observability/node":{"types":"./dist/observability/node.d.ts","import":"./dist/observability/node.js"},"./observability/genai":{"types":"./dist/observability/genai.d.ts","import":"./dist/observability/genai.js"},"./internationalization":{"types":"./dist/internationalization.d.ts","import":"./dist/internationalization.js"},"./observability/bullmq":{"types":"./dist/observability/bullmq.d.ts","import":"./dist/observability/bullmq.js"},"./merchant-communications":{"types":"./dist/merchant-communications.d.ts","import":"./dist/merchant-communications.js"},"./merchant-communications/node":{"types":"./dist/merchant-communications/node.d.ts","import":"./dist/merchant-communications/node.js"}},"scripts":{"test":"tsx --test \"src/**/*.test.ts\"","build":"tsup","prepack":"npm run build","typecheck":"tsc --noEmit","validate:testing-node":"npm run build && node scripts/validate-testing-node.mjs","validate:testing-node-live":"npm run build && node scripts/validate-testing-node-live.mjs","validate:billing-entrypoint":"npm run build && node scripts/validate-billing-entrypoint.mjs","validate:commerce-entrypoints":"node scripts/validate-commerce-entrypoints.mjs","validate:recovery-policy-entrypoint":"npm run build && node scripts/validate-recovery-policy-entrypoint.mjs","validate:merchant-communications-node":"npm run build && node scripts/validate-merchant-communications-node.mjs","validate:internationalization-entrypoint":"npm run build && node scripts/validate-internationalization-entrypoint.mjs"},"_npmUser":{"name":"kwadwoafriyie","email":"kodjo_baah@hotmail.com"},"_npmVersion":"11.17.0","description":"Shared TypeScript contracts and reusable platform primitives used by multiple Moda Interact services.","directories":{},"_nodeVersion":"24.19.0","dependencies":{"zod":"^4.0.0","semver":"7.8.5","winston":"3.19.0","bullmq-otel":"^2.0.1","winston-loki":"6.1.7","@opentelemetry/api":"^1.9.0","intl-messageformat":"^10.7.18","@opentelemetry/api-logs":"0.221.0","@opentelemetry/sdk-logs":"0.221.0","@opentelemetry/sdk-node":"0.221.0","@prisma/instrumentation":"^6.19.3","@opentelemetry/resources":"^2.10.0","@opentelemetry/sdk-metrics":"^2.10.0","@opentelemetry/sdk-trace-base":"^2.10.0","@opentelemetry/context-async-hooks":"^2.10.0","@opentelemetry/instrumentation-http":"0.221.0","@opentelemetry/instrumentation-undici":"0.31.0","@opentelemetry/exporter-logs-otlp-http":"0.221.0","@opentelemetry/exporter-trace-otlp-http":"0.221.0","@opentelemetry/exporter-metrics-otlp-http":"0.221.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.23.12","tsup":"^8.0.0","bullmq":"^6.3.1","ioredis":"^6.0.0","typescript":"^5.0.0","@types/node":"^26.4.0","@types/semver":"7.8.0"},"_npmOperationalInternal":{"tmp":"tmp/moda-interact-shared_0.13.1_1789935604555_0.47176298212239454","host":"s3://npm-registry-packages-npm-production"}},"0.14.0":{"name":"@modainteract/moda-interact-shared","version":"0.14.0","_id":"@modainteract/moda-interact-shared@0.14.0","maintainers":[{"name":"kwadwoafriyie","email":"kodjo_baah@hotmail.com"}],"dist":{"shasum":"f83a226ff80f3900048a63246e839624f588ca0b","tarball":"https://registry.npmjs.org/@modainteract/moda-interact-shared/-/moda-interact-shared-0.14.0.tgz","fileCount":75,"integrity":"sha512-6xC/cLnyWyeOpMHjTTH4mpWOJGnHx8K64Ldx7E2UYhhWxQp5aFf2GLhdvt9ZR6udmrZbf6zb6BcmvdFE6W+klw==","signatures":[{"sig":"MEUCIGihD+4L+MAj1N6xwkQAQAVVCWFHIs6XmFeysKmDiOxEAiEA8JFpjPvcX6p8LQtA+H3HxYFvugggr2Teg1hTU0NYeBo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQDETgKlGWbIwCOGy7qqIRoNdobAUUOwh3/YwzRgVpFMbQIhANmmbNXIz7NjWUxUeXTXgvULkiFYk+kjp9kmLAzGSnjF","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":657184},"main":"./dist/index.js","type":"module","_from":"file:/tmp/modainteract-moda-interact-shared-0.14.0.tgz","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./billing":{"types":"./dist/billing.d.ts","import":"./dist/billing.js"},"./logging":{"types":"./dist/logging/index.d.ts","import":"./dist/logging/index.js"},"./shopify":{"types":"./dist/shopify/index.d.ts","import":"./dist/shopify/index.js"},"./commerce":{"types":"./dist/commerce/index.d.ts","import":"./dist/commerce/index.js"},"./whatsapp":{"types":"./dist/whatsapp.d.ts","import":"./dist/whatsapp.js"},"./logging/node":{"types":"./dist/logging/node.d.ts","import":"./dist/logging/node.js"},"./shopify/node":{"types":"./dist/shopify/node.d.ts","import":"./dist/shopify/node.js"},"./testing/node":{"types":"./dist/testing/node.d.ts","import":"./dist/testing/node.js"},"./observability":{"types":"./dist/observability/index.d.ts","import":"./dist/observability/index.js"},"./commerce/runner":{"types":"./dist/commerce/runner/index.d.ts","import":"./dist/commerce/runner/index.js"},"./recovery-policy":{"types":"./dist/recovery-policy.d.ts","import":"./dist/recovery-policy.js"},"./observability/node":{"types":"./dist/observability/node.d.ts","import":"./dist/observability/node.js"},"./observability/genai":{"types":"./dist/observability/genai.d.ts","import":"./dist/observability/genai.js"},"./internationalization":{"types":"./dist/internationalization.d.ts","import":"./dist/internationalization.js"},"./observability/bullmq":{"types":"./dist/observability/bullmq.d.ts","import":"./dist/observability/bullmq.js"},"./merchant-communications":{"types":"./dist/merchant-communications.d.ts","import":"./dist/merchant-communications.js"},"./merchant-communications/node":{"types":"./dist/merchant-communications/node.d.ts","import":"./dist/merchant-communications/node.js"}},"scripts":{"test":"tsx --test \"src/**/*.test.ts\"","build":"tsup","prepack":"npm run build","typecheck":"tsc --noEmit","validate:testing-node":"npm run build && node scripts/validate-testing-node.mjs","validate:testing-node-live":"npm run build && node scripts/validate-testing-node-live.mjs","validate:billing-entrypoint":"npm run build && node scripts/validate-billing-entrypoint.mjs","validate:commerce-entrypoints":"node scripts/validate-commerce-entrypoints.mjs","test:arch020-external-contracts":"tsx --test src/commerce/external-contracts.test.ts","validate:recovery-policy-entrypoint":"npm run build && node scripts/validate-recovery-policy-entrypoint.mjs","validate:merchant-communications-node":"npm run build && node scripts/validate-merchant-communications-node.mjs","validate:internationalization-entrypoint":"npm run build && node scripts/validate-internationalization-entrypoint.mjs"},"_npmUser":{"name":"kwadwoafriyie","email":"kodjo_baah@hotmail.com"},"_resolved":"/tmp/modainteract-moda-interact-shared-0.14.0.tgz","_integrity":"sha512-6xC/cLnyWyeOpMHjTTH4mpWOJGnHx8K64Ldx7E2UYhhWxQp5aFf2GLhdvt9ZR6udmrZbf6zb6BcmvdFE6W+klw==","_npmVersion":"11.17.0","description":"Shared TypeScript contracts and reusable platform primitives used by multiple Moda Interact services.","directories":{},"_nodeVersion":"24.19.0","dependencies":{"zod":"^4.0.0","semver":"7.8.5","winston":"3.19.0","bullmq-otel":"^2.0.1","winston-loki":"6.1.7","@opentelemetry/api":"^1.9.0","intl-messageformat":"^10.7.18","@opentelemetry/api-logs":"0.221.0","@opentelemetry/sdk-logs":"0.221.0","@opentelemetry/sdk-node":"0.221.0","@prisma/instrumentation":"^6.19.3","@opentelemetry/resources":"^2.10.0","@opentelemetry/sdk-metrics":"^2.10.0","@opentelemetry/sdk-trace-base":"^2.10.0","@opentelemetry/context-async-hooks":"^2.10.0","@opentelemetry/instrumentation-http":"0.221.0","@opentelemetry/instrumentation-undici":"0.31.0","@opentelemetry/exporter-logs-otlp-http":"0.221.0","@opentelemetry/exporter-trace-otlp-http":"0.221.0","@opentelemetry/exporter-metrics-otlp-http":"0.221.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.23.12","tsup":"^8.0.0","bullmq":"^6.3.1","ioredis":"^6.0.0","typescript":"^5.0.0","@types/node":"^26.4.0","@types/semver":"7.8.0"},"_npmOperationalInternal":{"tmp":"tmp/moda-interact-shared_0.14.0_1790006274897_0.9231975253303679","host":"s3://npm-registry-packages-npm-production"}},"0.14.1":{"name":"@modainteract/moda-interact-shared","version":"0.14.1","_id":"@modainteract/moda-interact-shared@0.14.1","maintainers":[{"name":"kwadwoafriyie","email":"kodjo_baah@hotmail.com"}],"dist":{"shasum":"1809e603c298468cdc4ef4cf7965f978449dc08d","tarball":"https://registry.npmjs.org/@modainteract/moda-interact-shared/-/moda-interact-shared-0.14.1.tgz","fileCount":75,"integrity":"sha512-CbH7qVbBksIXar1M5mImihwPQDi03fG1eXPcN5D55EMSzSZ6HEENSHK+Ksl97I63LtlWShtzMZ7isiYsnPJAfw==","signatures":[{"sig":"MEUCIE66YfT4yZKf9zEiEuhjUloAk/UJsOjsVtSpO54NDIHGAiEAkRKaxF/TFBeDkICj+vhXNUH4oByxjQ1qhUu7prXiHRM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQDtVhiK/ypgy4r7s/WUs2GD0uNiXRK7nKEpjBABRX9vfwIhAL+9s2WBTBf8CE3GiBukd7MG16W60ghqWkITmsRTkzC0","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":666557},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./billing":{"types":"./dist/billing.d.ts","import":"./dist/billing.js"},"./logging":{"types":"./dist/logging/index.d.ts","import":"./dist/logging/index.js"},"./shopify":{"types":"./dist/shopify/index.d.ts","import":"./dist/shopify/index.js"},"./commerce":{"types":"./dist/commerce/index.d.ts","import":"./dist/commerce/index.js"},"./whatsapp":{"types":"./dist/whatsapp.d.ts","import":"./dist/whatsapp.js"},"./logging/node":{"types":"./dist/logging/node.d.ts","import":"./dist/logging/node.js"},"./shopify/node":{"types":"./dist/shopify/node.d.ts","import":"./dist/shopify/node.js"},"./testing/node":{"types":"./dist/testing/node.d.ts","import":"./dist/testing/node.js"},"./observability":{"types":"./dist/observability/index.d.ts","import":"./dist/observability/index.js"},"./commerce/runner":{"types":"./dist/commerce/runner/index.d.ts","import":"./dist/commerce/runner/index.js"},"./recovery-policy":{"types":"./dist/recovery-policy.d.ts","import":"./dist/recovery-policy.js"},"./observability/node":{"types":"./dist/observability/node.d.ts","import":"./dist/observability/node.js"},"./observability/genai":{"types":"./dist/observability/genai.d.ts","import":"./dist/observability/genai.js"},"./internationalization":{"types":"./dist/internationalization.d.ts","import":"./dist/internationalization.js"},"./observability/bullmq":{"types":"./dist/observability/bullmq.d.ts","import":"./dist/observability/bullmq.js"},"./merchant-communications":{"types":"./dist/merchant-communications.d.ts","import":"./dist/merchant-communications.js"},"./merchant-communications/node":{"types":"./dist/merchant-communications/node.d.ts","import":"./dist/merchant-communications/node.js"}},"scripts":{"test":"tsx --test \"src/**/*.test.ts\"","build":"tsup","prepack":"npm run build","typecheck":"tsc --noEmit","validate:testing-node":"npm run build && node scripts/validate-testing-node.mjs","validate:testing-node-live":"npm run build && node scripts/validate-testing-node-live.mjs","validate:billing-entrypoint":"npm run build && node scripts/validate-billing-entrypoint.mjs","validate:commerce-entrypoints":"node scripts/validate-commerce-entrypoints.mjs","test:arch020-external-contracts":"tsx --test src/commerce/external-contracts.test.ts","validate:recovery-policy-entrypoint":"npm run build && node scripts/validate-recovery-policy-entrypoint.mjs","validate:merchant-communications-node":"npm run build && node scripts/validate-merchant-communications-node.mjs","validate:internationalization-entrypoint":"npm run build && node scripts/validate-internationalization-entrypoint.mjs"},"_npmUser":{"name":"kwadwoafriyie","email":"kodjo_baah@hotmail.com"},"_npmVersion":"11.19.0","description":"Shared TypeScript contracts and reusable platform primitives used by multiple Moda Interact services.","directories":{},"_nodeVersion":"24.21.0","dependencies":{"zod":"^4.0.0","semver":"7.8.5","winston":"3.19.0","bullmq-otel":"^2.0.1","winston-loki":"6.1.7","@opentelemetry/api":"^1.9.0","intl-messageformat":"^10.7.18","@opentelemetry/api-logs":"0.221.0","@opentelemetry/sdk-logs":"0.221.0","@opentelemetry/sdk-node":"0.221.0","@prisma/instrumentation":"^6.19.3","@opentelemetry/resources":"^2.10.0","@opentelemetry/sdk-metrics":"^2.10.0","@opentelemetry/sdk-trace-base":"^2.10.0","@opentelemetry/context-async-hooks":"^2.10.0","@opentelemetry/instrumentation-http":"0.221.0","@opentelemetry/instrumentation-undici":"0.31.0","@opentelemetry/exporter-logs-otlp-http":"0.221.0","@opentelemetry/exporter-trace-otlp-http":"0.221.0","@opentelemetry/exporter-metrics-otlp-http":"0.221.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.23.12","tsup":"^8.0.0","bullmq":"^6.3.1","ioredis":"^6.0.0","typescript":"^5.0.0","@types/node":"^26.4.0","@types/semver":"7.8.0"},"_npmOperationalInternal":{"tmp":"tmp/moda-interact-shared_0.14.1_1790013434298_0.45145313860393665","host":"s3://npm-registry-packages-npm-production"}},"0.14.2":{"name":"@modainteract/moda-interact-shared","version":"0.14.2","_id":"@modainteract/moda-interact-shared@0.14.2","maintainers":[{"name":"kwadwoafriyie","email":"kodjo_baah@hotmail.com"}],"dist":{"shasum":"3681fd03c5bbcbfa4cb1aeabb548ef356be1699c","tarball":"https://registry.npmjs.org/@modainteract/moda-interact-shared/-/moda-interact-shared-0.14.2.tgz","fileCount":75,"integrity":"sha512-OIQwN6rvC81qis75JXMaQrQ+MSKEP4G8AQls/APlwkSbvqIALTCIcyz2xXN4B1dQ5hBH8//l2R+qZqCsHhkKLA==","signatures":[{"sig":"MEQCIDdtZAo13gD0F70Opt8X2p/jrnm7PwUcGRvDixgIHHtrAiBUtzrYldJ6LVPbEf8tCMVIk2uKunEyD+jekIPJwErY7g==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIF7bZMMn2VDPB3fjdq1HkkD09Q3fv3rGaePncN/dHtRYAiAFXXUerY4k+0oE56e8iCVm3EnpxYqhqnkbhQRSuo802Q==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":668809},"main":"./dist/index.js","type":"module","_from":"file:/tmp/modainteract-moda-interact-shared-0.14.2.tgz","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./billing":{"types":"./dist/billing.d.ts","import":"./dist/billing.js"},"./logging":{"types":"./dist/logging/index.d.ts","import":"./dist/logging/index.js"},"./shopify":{"types":"./dist/shopify/index.d.ts","import":"./dist/shopify/index.js"},"./commerce":{"types":"./dist/commerce/index.d.ts","import":"./dist/commerce/index.js"},"./whatsapp":{"types":"./dist/whatsapp.d.ts","import":"./dist/whatsapp.js"},"./logging/node":{"types":"./dist/logging/node.d.ts","import":"./dist/logging/node.js"},"./shopify/node":{"types":"./dist/shopify/node.d.ts","import":"./dist/shopify/node.js"},"./testing/node":{"types":"./dist/testing/node.d.ts","import":"./dist/testing/node.js"},"./observability":{"types":"./dist/observability/index.d.ts","import":"./dist/observability/index.js"},"./commerce/runner":{"types":"./dist/commerce/runner/index.d.ts","import":"./dist/commerce/runner/index.js"},"./recovery-policy":{"types":"./dist/recovery-policy.d.ts","import":"./dist/recovery-policy.js"},"./observability/node":{"types":"./dist/observability/node.d.ts","import":"./dist/observability/node.js"},"./observability/genai":{"types":"./dist/observability/genai.d.ts","import":"./dist/observability/genai.js"},"./internationalization":{"types":"./dist/internationalization.d.ts","import":"./dist/internationalization.js"},"./observability/bullmq":{"types":"./dist/observability/bullmq.d.ts","import":"./dist/observability/bullmq.js"},"./merchant-communications":{"types":"./dist/merchant-communications.d.ts","import":"./dist/merchant-communications.js"},"./merchant-communications/node":{"types":"./dist/merchant-communications/node.d.ts","import":"./dist/merchant-communications/node.js"}},"scripts":{"test":"tsx --test \"src/**/*.test.ts\"","build":"tsup","prepack":"npm run build","typecheck":"tsc --noEmit","validate:testing-node":"npm run build && node scripts/validate-testing-node.mjs","validate:testing-node-live":"npm run build && node scripts/validate-testing-node-live.mjs","validate:billing-entrypoint":"npm run build && node scripts/validate-billing-entrypoint.mjs","validate:commerce-entrypoints":"node scripts/validate-commerce-entrypoints.mjs","test:arch020-external-contracts":"tsx --test src/commerce/external-contracts.test.ts","validate:recovery-policy-entrypoint":"npm run build && node scripts/validate-recovery-policy-entrypoint.mjs","validate:merchant-communications-node":"npm run build && node scripts/validate-merchant-communications-node.mjs","validate:internationalization-entrypoint":"npm run build && node scripts/validate-internationalization-entrypoint.mjs"},"_npmUser":{"name":"kwadwoafriyie","email":"kodjo_baah@hotmail.com"},"_resolved":"/tmp/modainteract-moda-interact-shared-0.14.2.tgz","_integrity":"sha512-OIQwN6rvC81qis75JXMaQrQ+MSKEP4G8AQls/APlwkSbvqIALTCIcyz2xXN4B1dQ5hBH8//l2R+qZqCsHhkKLA==","_npmVersion":"11.19.0","description":"Shared TypeScript contracts and reusable platform primitives used by multiple Moda Interact services.","directories":{},"_nodeVersion":"24.21.0","dependencies":{"zod":"^4.0.0","semver":"7.8.5","winston":"3.19.0","bullmq-otel":"^2.0.1","winston-loki":"6.1.7","@opentelemetry/api":"^1.9.0","intl-messageformat":"^10.7.18","@opentelemetry/api-logs":"0.221.0","@opentelemetry/sdk-logs":"0.221.0","@opentelemetry/sdk-node":"0.221.0","@prisma/instrumentation":"^6.19.3","@opentelemetry/resources":"^2.10.0","@opentelemetry/sdk-metrics":"^2.10.0","@opentelemetry/sdk-trace-base":"^2.10.0","@opentelemetry/context-async-hooks":"^2.10.0","@opentelemetry/instrumentation-http":"0.221.0","@opentelemetry/instrumentation-undici":"0.31.0","@opentelemetry/exporter-logs-otlp-http":"0.221.0","@opentelemetry/exporter-trace-otlp-http":"0.221.0","@opentelemetry/exporter-metrics-otlp-http":"0.221.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.23.12","tsup":"^8.0.0","bullmq":"^6.3.1","ioredis":"^6.0.0","typescript":"^5.0.0","@types/node":"^26.4.0","@types/semver":"7.8.0"},"_npmOperationalInternal":{"tmp":"tmp/moda-interact-shared_0.14.2_1790018523358_0.6990028365160268","host":"s3://npm-registry-packages-npm-production"}},"1.0.0":{"name":"@modainteract/moda-interact-shared","version":"1.0.0","_id":"@modainteract/moda-interact-shared@1.0.0","maintainers":[{"name":"kwadwoafriyie","email":"kodjo_baah@hotmail.com"}],"dist":{"shasum":"47a0ff85f6eed1b2c44f31407f291f5fbcf3f4f6","tarball":"https://registry.npmjs.org/@modainteract/moda-interact-shared/-/moda-interact-shared-1.0.0.tgz","fileCount":75,"integrity":"sha512-B9E81Yl71/sJJkVM+3PNdl9yHVPESLWFSRtGl2Uselxnp4r9oQIFl8wMUDNMXomu0OvXdv6V1XQvwT7Mm4AGWA==","signatures":[{"sig":"MEQCIHFirxrKHMoP9If1+0LAuxzl5fZ2MZeX97KRa6AVzrO5AiB4PkmeCqvfzauN8s4q4DfxF0ZwPca097WKcLDTIkzMcg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQCQhQDRCQ81vnuzJD4tcAlXqEBNz5+yRmaOk71VgQPW8wIgKKFtyS0SiYrZSc9TdfAyJEnJ1NMML0jFZhGPmUmOmhQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":704194},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./billing":{"types":"./dist/billing.d.ts","import":"./dist/billing.js"},"./logging":{"types":"./dist/logging/index.d.ts","import":"./dist/logging/index.js"},"./shopify":{"types":"./dist/shopify/index.d.ts","import":"./dist/shopify/index.js"},"./commerce":{"types":"./dist/commerce/index.d.ts","import":"./dist/commerce/index.js"},"./whatsapp":{"types":"./dist/whatsapp.d.ts","import":"./dist/whatsapp.js"},"./logging/node":{"types":"./dist/logging/node.d.ts","import":"./dist/logging/node.js"},"./shopify/node":{"types":"./dist/shopify/node.d.ts","import":"./dist/shopify/node.js"},"./testing/node":{"types":"./dist/testing/node.d.ts","import":"./dist/testing/node.js"},"./observability":{"types":"./dist/observability/index.d.ts","import":"./dist/observability/index.js"},"./commerce/runner":{"types":"./dist/commerce/runner/index.d.ts","import":"./dist/commerce/runner/index.js"},"./recovery-policy":{"types":"./dist/recovery-policy.d.ts","import":"./dist/recovery-policy.js"},"./observability/node":{"types":"./dist/observability/node.d.ts","import":"./dist/observability/node.js"},"./observability/genai":{"types":"./dist/observability/genai.d.ts","import":"./dist/observability/genai.js"},"./internationalization":{"types":"./dist/internationalization.d.ts","import":"./dist/internationalization.js"},"./observability/bullmq":{"types":"./dist/observability/bullmq.d.ts","import":"./dist/observability/bullmq.js"},"./merchant-communications":{"types":"./dist/merchant-communications.d.ts","import":"./dist/merchant-communications.js"},"./merchant-communications/node":{"types":"./dist/merchant-communications/node.d.ts","import":"./dist/merchant-communications/node.js"}},"scripts":{"test":"tsx --test \"src/**/*.test.ts\"","build":"tsup","prepack":"npm run build","typecheck":"tsc --noEmit","validate:testing-node":"npm run build && node scripts/validate-testing-node.mjs","validate:testing-node-live":"npm run build && node scripts/validate-testing-node-live.mjs","validate:billing-entrypoint":"npm run build && node scripts/validate-billing-entrypoint.mjs","validate:commerce-entrypoints":"node scripts/validate-commerce-entrypoints.mjs","test:arch020-external-contracts":"tsx --test src/commerce/external-contracts.test.ts","validate:recovery-policy-entrypoint":"npm run build && node scripts/validate-recovery-policy-entrypoint.mjs","validate:merchant-communications-node":"npm run build && node scripts/validate-merchant-communications-node.mjs","validate:internationalization-entrypoint":"npm run build && node scripts/validate-internationalization-entrypoint.mjs"},"_npmUser":{"name":"kwadwoafriyie","email":"kodjo_baah@hotmail.com"},"_npmVersion":"11.19.0","description":"Shared TypeScript contracts and reusable platform primitives used by multiple Moda Interact services.","directories":{},"_nodeVersion":"24.21.0","dependencies":{"zod":"^4.0.0","semver":"7.8.5","winston":"3.19.0","bullmq-otel":"^2.0.1","winston-loki":"6.1.7","@opentelemetry/api":"^1.9.0","intl-messageformat":"^10.7.18","@opentelemetry/api-logs":"0.221.0","@opentelemetry/sdk-logs":"0.221.0","@opentelemetry/sdk-node":"0.221.0","@prisma/instrumentation":"^6.19.3","@opentelemetry/resources":"^2.10.0","@opentelemetry/sdk-metrics":"^2.10.0","@opentelemetry/sdk-trace-base":"^2.10.0","@opentelemetry/context-async-hooks":"^2.10.0","@opentelemetry/instrumentation-http":"0.221.0","@opentelemetry/instrumentation-undici":"0.31.0","@opentelemetry/exporter-logs-otlp-http":"0.221.0","@opentelemetry/exporter-trace-otlp-http":"0.221.0","@opentelemetry/exporter-metrics-otlp-http":"0.221.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.23.12","tsup":"^8.0.0","bullmq":"^6.3.1","ioredis":"^6.0.0","typescript":"^5.0.0","@types/node":"^26.4.0","@types/semver":"7.8.0"},"_npmOperationalInternal":{"tmp":"tmp/moda-interact-shared_1.0.0_1790690754977_0.1221654881301677","host":"s3://npm-registry-packages-npm-production"}},"1.0.1":{"name":"@modainteract/moda-interact-shared","version":"1.0.1","_id":"@modainteract/moda-interact-shared@1.0.1","maintainers":[{"name":"kwadwoafriyie","email":"kodjo_baah@hotmail.com"}],"dist":{"shasum":"c381787626b576d17be14252fb76daf298d94cb6","tarball":"https://registry.npmjs.org/@modainteract/moda-interact-shared/-/moda-interact-shared-1.0.1.tgz","fileCount":81,"integrity":"sha512-xwVRw1rZWZIlfvrnml+psA5roRz+qMoTl7Znob1myNA1PTXIuHYX4lQHCof8Ef2F1QElrvi09jKstOc6QHdcKg==","signatures":[{"sig":"MEUCIQDPab4+Kg93Ud24QOvPgTMWgurOnEiZ/MqZjV2BX9oSJgIgPy1n6iTUlZ4q5ga8eZaxqgF7bKBfVT0Jmyr7eJYXcM8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQDZWdvVbB/nLzyz948Q+vC+NsAzAaP3fF8hyZPcBxTpAQIhAPzVU/ZoocKiW9db+sStTCV3Ufr/zglLd153quHsm+Hb","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":726739},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./billing":{"types":"./dist/billing.d.ts","import":"./dist/billing.js"},"./logging":{"types":"./dist/logging/index.d.ts","import":"./dist/logging/index.js"},"./shopify":{"types":"./dist/shopify/index.d.ts","import":"./dist/shopify/index.js"},"./commerce":{"types":"./dist/commerce/index.d.ts","import":"./dist/commerce/index.js"},"./whatsapp":{"types":"./dist/whatsapp.d.ts","import":"./dist/whatsapp.js"},"./logging/node":{"types":"./dist/logging/node.d.ts","import":"./dist/logging/node.js"},"./shopify/node":{"types":"./dist/shopify/node.d.ts","import":"./dist/shopify/node.js"},"./testing/node":{"types":"./dist/testing/node.d.ts","import":"./dist/testing/node.js"},"./observability":{"types":"./dist/observability/index.d.ts","import":"./dist/observability/index.js"},"./commerce/runner":{"types":"./dist/commerce/runner/index.d.ts","import":"./dist/commerce/runner/index.js"},"./recovery-policy":{"types":"./dist/recovery-policy.d.ts","import":"./dist/recovery-policy.js"},"./merchant-knowledge":{"types":"./dist/merchant-knowledge.d.ts","import":"./dist/merchant-knowledge.js"},"./observability/node":{"types":"./dist/observability/node.d.ts","import":"./dist/observability/node.js"},"./observability/genai":{"types":"./dist/observability/genai.d.ts","import":"./dist/observability/genai.js"},"./internationalization":{"types":"./dist/internationalization.d.ts","import":"./dist/internationalization.js"},"./observability/bullmq":{"types":"./dist/observability/bullmq.d.ts","import":"./dist/observability/bullmq.js"},"./merchant-communications":{"types":"./dist/merchant-communications.d.ts","import":"./dist/merchant-communications.js"},"./merchant-knowledge/node":{"types":"./dist/merchant-knowledge/node.d.ts","import":"./dist/merchant-knowledge/node.js"},"./merchant-communications/node":{"types":"./dist/merchant-communications/node.d.ts","import":"./dist/merchant-communications/node.js"}},"scripts":{"test":"tsx --test \"src/**/*.test.ts\"","build":"tsup","prepack":"npm run build","typecheck":"tsc --noEmit","validate:testing-node":"npm run build && node scripts/validate-testing-node.mjs","validate:testing-node-live":"npm run build && node scripts/validate-testing-node-live.mjs","validate:billing-entrypoint":"npm run build && node scripts/validate-billing-entrypoint.mjs","validate:commerce-entrypoints":"node scripts/validate-commerce-entrypoints.mjs","test:arch020-external-contracts":"tsx --test src/commerce/external-contracts.test.ts","validate:arch023-shared-entrypoints":"npm run build && node scripts/validate-arch023-shared-entrypoints.mjs","validate:recovery-policy-entrypoint":"npm run build && node scripts/validate-recovery-policy-entrypoint.mjs","validate:merchant-communications-node":"npm run build && node scripts/validate-merchant-communications-node.mjs","validate:internationalization-entrypoint":"npm run build && node scripts/validate-internationalization-entrypoint.mjs"},"_npmUser":{"name":"kwadwoafriyie","email":"kodjo_baah@hotmail.com"},"_npmVersion":"11.19.0","description":"Shared TypeScript contracts and reusable platform primitives used by multiple Moda Interact services.","directories":{},"_nodeVersion":"24.21.0","dependencies":{"zod":"^4.0.0","semver":"7.8.5","winston":"3.19.0","bullmq-otel":"^2.0.1","winston-loki":"6.1.7","@opentelemetry/api":"^1.9.0","intl-messageformat":"^10.7.18","@opentelemetry/api-logs":"0.221.0","@opentelemetry/sdk-logs":"0.221.0","@opentelemetry/sdk-node":"0.221.0","@prisma/instrumentation":"^6.19.3","@opentelemetry/resources":"^2.10.0","@opentelemetry/sdk-metrics":"^2.10.0","@opentelemetry/sdk-trace-base":"^2.10.0","@opentelemetry/context-async-hooks":"^2.10.0","@opentelemetry/instrumentation-http":"0.221.0","@opentelemetry/instrumentation-undici":"0.31.0","@opentelemetry/exporter-logs-otlp-http":"0.221.0","@opentelemetry/exporter-trace-otlp-http":"0.221.0","@opentelemetry/exporter-metrics-otlp-http":"0.221.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.23.12","tsup":"^8.0.0","bullmq":"^6.3.1","ioredis":"^6.0.0","typescript":"^5.0.0","@types/node":"^26.4.0","@types/semver":"7.8.0"},"_npmOperationalInternal":{"tmp":"tmp/moda-interact-shared_1.0.1_1790757227612_0.8559960810231897","host":"s3://npm-registry-packages-npm-production"}},"1.1.0":{"_id":"@modainteract/moda-interact-shared@1.1.0","dist":{"shasum":"923e5b71942bd17e2d2537820f884c9edc3cdeaf","tarball":"https://registry.npmjs.org/@modainteract/moda-interact-shared/-/moda-interact-shared-1.1.0.tgz","fileCount":95,"integrity":"sha512-XZMhMbEn8oy9xZfqrAWmbjcbYdOxScUsCE1myCqiywuUgcDPnhGDs1jj2bORyqhFYvOwhFzI4K5vmkSlxqOwiA==","signatures":[{"sig":"MEQCIG81BNfJ0xvdFMQs1JUGnaYaRxFZeJrN9dM5TMrkAeqLAiAyL/Dd7KVNmvaRI58cX30H5fB3Nx3C7k5P/VZ+DqlhcA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQCsd84NBJ/Lf5CLGbjhH33PxszGN1r4o9ATOmJTMY3qOQIgBLIAMjgGSJ8VWai0N+N0grKsnZ/4T+OT0ijtFMhcZDg="}],"unpackedSize":817034},"main":"./dist/index.js","name":"@modainteract/moda-interact-shared","type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./billing":{"types":"./dist/billing.d.ts","import":"./dist/billing.js"},"./logging":{"types":"./dist/logging/index.d.ts","import":"./dist/logging/index.js"},"./shopify":{"types":"./dist/shopify/index.d.ts","import":"./dist/shopify/index.js"},"./commerce":{"types":"./dist/commerce/index.d.ts","import":"./dist/commerce/index.js"},"./whatsapp":{"types":"./dist/whatsapp.d.ts","import":"./dist/whatsapp.js"},"./logging/node":{"types":"./dist/logging/node.d.ts","import":"./dist/logging/node.js"},"./shopify/node":{"types":"./dist/shopify/node.d.ts","import":"./dist/shopify/node.js"},"./testing/node":{"types":"./dist/testing/node.d.ts","import":"./dist/testing/node.js"},"./observability":{"types":"./dist/observability/index.d.ts","import":"./dist/observability/index.js"},"./commerce/model":{"types":"./dist/commerce/model/index.d.ts","import":"./dist/commerce/model/index.js"},"./commerce/runner":{"types":"./dist/commerce/runner/index.d.ts","import":"./dist/commerce/runner/index.js"},"./recovery-policy":{"types":"./dist/recovery-policy.d.ts","import":"./dist/recovery-policy.js"},"./merchant-knowledge":{"types":"./dist/merchant-knowledge.d.ts","import":"./dist/merchant-knowledge.js"},"./observability/node":{"types":"./dist/observability/node.d.ts","import":"./dist/observability/node.js"},"./commerce/model/node":{"types":"./dist/commerce/model/node.d.ts","import":"./dist/commerce/model/node.js"},"./observability/genai":{"types":"./dist/observability/genai.d.ts","import":"./dist/observability/genai.js"},"./internationalization":{"types":"./dist/internationalization.d.ts","import":"./dist/internationalization.js"},"./observability/bullmq":{"types":"./dist/observability/bullmq.d.ts","import":"./dist/observability/bullmq.js"},"./merchant-communications":{"types":"./dist/merchant-communications.d.ts","import":"./dist/merchant-communications.js"},"./merchant-knowledge/node":{"types":"./dist/merchant-knowledge/node.d.ts","import":"./dist/merchant-knowledge/node.js"},"./merchant-communications/node":{"types":"./dist/merchant-communications/node.d.ts","import":"./dist/merchant-communications/node.js"}},"scripts":{"test":"tsx --test \"src/**/*.test.ts\"","build":"tsup","prepack":"npm run build","typecheck":"tsc --noEmit","validate:testing-node":"npm run build && node scripts/validate-testing-node.mjs","validate:testing-node-live":"npm run build && node scripts/validate-testing-node-live.mjs","validate:billing-entrypoint":"npm run build && node scripts/validate-billing-entrypoint.mjs","validate:commerce-entrypoints":"node scripts/validate-commerce-entrypoints.mjs","test:arch020-external-contracts":"tsx --test src/commerce/external-contracts.test.ts","validate:arch024-model-entrypoints":"npm run build && node scripts/validate-arch024-model-entrypoints.mjs","validate:arch023-shared-entrypoints":"npm run build && node scripts/validate-arch023-shared-entrypoints.mjs","validate:recovery-policy-entrypoint":"npm run build && node scripts/validate-recovery-policy-entrypoint.mjs","validate:merchant-communications-node":"npm run build && node scripts/validate-merchant-communications-node.mjs","validate:internationalization-entrypoint":"npm run build && node scripts/validate-internationalization-entrypoint.mjs"},"version":"1.1.0","_npmUser":{"name":"kwadwoafriyie","email":"kodjo_baah@hotmail.com"},"overrides":{"@langchain/core":"1.2.13"},"_npmVersion":"11.19.0","description":"Shared TypeScript contracts and reusable platform primitives used by multiple Moda Interact services.","directories":{},"maintainers":[{"name":"kwadwoafriyie","email":"kodjo_baah@hotmail.com"}],"_nodeVersion":"24.21.0","dependencies":{"zod":"^4.0.0","semver":"7.8.5","winston":"3.19.0","bullmq-otel":"^2.0.1","winston-loki":"6.1.7","@langchain/core":"1.2.13","@opentelemetry/api":"^1.9.0","intl-messageformat":"^10.7.18","@langchain/langgraph":"1.4.15","@langchain/openrouter":"0.4.15","@opentelemetry/api-logs":"0.221.0","@opentelemetry/sdk-logs":"0.221.0","@opentelemetry/sdk-node":"0.221.0","@prisma/instrumentation":"^6.19.3","@opentelemetry/resources":"^2.10.0","@opentelemetry/sdk-metrics":"^2.10.0","@opentelemetry/sdk-trace-base":"^2.10.0","@opentelemetry/context-async-hooks":"^2.10.0","@opentelemetry/instrumentation-http":"0.221.0","@opentelemetry/instrumentation-undici":"0.31.0","@opentelemetry/exporter-logs-otlp-http":"0.221.0","@opentelemetry/exporter-trace-otlp-http":"0.221.0","@opentelemetry/exporter-metrics-otlp-http":"0.221.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.23.12","tsup":"^8.0.0","bullmq":"^6.3.1","ioredis":"^6.0.0","typescript":"^5.0.0","@types/node":"^26.4.0","@types/semver":"7.8.0"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/moda-interact-shared_1.1.0_1790873926470_0.25862309567613595"}}},"time":{"created":"2026-08-27T20:37:30.956Z","modified":"2026-10-01T16:58:46.768Z","0.1.0":"2026-08-27T20:37:31.255Z","0.2.0":"2026-08-30T17:33:19.811Z","0.3.0":"2026-08-31T00:18:24.358Z","0.4.0":"2026-08-31T14:17:57.615Z","0.5.0":"2026-08-31T18:13:27.053Z","0.6.0":"2026-09-05T14:17:38.823Z","0.6.1":"2026-09-05T19:09:05.589Z","0.6.2":"2026-09-05T22:31:28.875Z","0.6.3":"2026-09-06T08:24:35.648Z","0.7.0":"2026-09-06T13:17:59.254Z","0.7.1":"2026-09-06T14:38:32.033Z","0.7.2":"2026-09-06T17:00:21.710Z","0.7.3":"2026-09-07T20:05:49.950Z","0.7.4":"2026-09-07T21:28:16.986Z","0.8.0":"2026-09-08T10:18:17.803Z","0.9.0":"2026-09-10T10:42:02.364Z","0.10.0":"2026-09-11T17:27:56.729Z","0.11.0":"2026-09-12T15:45:10.043Z","0.11.1":"2026-09-15T12:28:16.047Z","0.11.2":"2026-09-15T12:49:30.085Z","0.12.0":"2026-09-16T11:38:40.685Z","0.12.1":"2026-09-16T15:48:39.761Z","0.12.2":"2026-09-20T08:52:33.763Z","0.13.0":"2026-09-20T19:42:13.269Z","0.13.1":"2026-09-20T20:20:04.641Z","0.14.0":"2026-09-21T15:57:55.004Z","0.14.1":"2026-09-21T17:57:14.401Z","0.14.2":"2026-09-21T19:22:03.440Z","1.0.0":"2026-09-29T14:05:55.106Z","1.0.1":"2026-09-30T08:33:47.758Z","1.1.0":"2026-10-01T16:58:46.576Z"},"description":"Shared TypeScript contracts and reusable platform primitives used by multiple Moda Interact services.","maintainers":[{"name":"kwadwoafriyie","email":"kodjo_baah@hotmail.com"}],"readme":"# @modainteract/moda-interact-shared\n\nShared TypeScript contracts and reusable platform primitives used by multiple\nModa Interact services.\n\nThis package is a **library**, not a deployable service. It does not own\nbusiness transports, persistence, background workers, provider SDK integration,\nor application business workflows.\n\n## Install\n\n```bash\nnpm install @modainteract/moda-interact-shared\n```\n\nProduction services should use the exact package version selected by the\ncorresponding Moda Interact architecture/release task rather than relying on a\nfloating version.\n\n## Public entry points\n\nThis reference covers the source API at package version **0.13.1**. Prefer the\nspecific entry point for the contract you consume. Only paths listed in\n`package.json` `exports` are public imports; a file under `src` or `dist` is not\nnecessarily a supported package subpath. Type-only exports require `import type`.\n\n| Import suffix after `@modainteract/moda-interact-shared` | Use it for |\n|---|---|\n| (none) | Convenience re-exports of internationalization, billing, merchant communications, recovery policy and Shopify contracts only. |\n| `/internationalization` | Language/country/currency/time-zone normalization, international context and ICU message catalogue validation/rendering. |\n| `/billing` | Billing plan/usage contracts, provider-status normalization, subscription-reconciliation jobs, purchased-credit counters and deterministic billing identifiers. |\n| `/recovery-policy` | Recovery offer modes and validation of an already-resolved effective recovery policy. Does not retrieve or decide merchant entitlements. |\n| `/whatsapp` | Normalized inbound WhatsApp content/message schemas and parsers. Provider delivery statuses are in `/billing`. |\n| `/merchant-communications` | Merchant communication and translation job contracts, constants and validation. |\n| `/merchant-communications/node` | Node-only deterministic translation queue-job identifiers. |\n| `/shopify` | Shopify commerce/recovery event schemas, parsers, event versions and shared queue contracts. |\n| `/shopify/node` | Node-only hashed webhook, checkout, order, recovery and discount-sync job identifiers. |\n| `/logging` | Structured logger, levels, redaction and bounded serialization, with logger/sink types. |\n| `/logging/node` | Node logging bootstrap, configuration and flushing for process-owned destinations. |\n| `/observability` | Lightweight active-trace and observed-span helpers using installed global providers. |\n| `/observability/node` | Node OpenTelemetry initialization and lifecycle; import from process preload. |\n| `/observability/bullmq` | BullMQ telemetry adapter and options. Use in Node queue/worker configuration. |\n| `/observability/genai` | Conversation, agent and tool observation helpers with bounded metrics and span metadata. |\n| `/testing/node` | Node-only disposable PostgreSQL/Redis test infrastructure and command helpers; not application startup or production provisioning. |\n| `/commerce` | Commerce schemas, definitions, selection helpers, response validation, canonical hashing inputs and synthetic examples. |\n| `/commerce/runner` | Dependency-injected Commerce turn runner and model/tool adapter types. |\n| `/commerce/model` | Runtime-safe model catalogue, selection, OpenRouter configuration and credential AAD contracts. |\n| `/commerce/model/node` | Node-only OpenRouter chat-model adapter for the Commerce runner. |\n\nThe root entry does **not** re-export WhatsApp, Commerce, the runner, logging,\nobservability or Node helpers. Do not replace a documented subpath import with a\nroot import without checking its exports. `/node` entries and the BullMQ adapter\nbelong in server processes; keep them out of browser bundles.\n\nThe [complete export inventory](#complete-export-inventory) below includes runtime\nvalues and TypeScript types for every public entry point. Existing logging,\nobservability and Shopify examples follow the Commerce guide.\n\n## Contract parsing and identifiers\n\nImport the producer/consumer's matching schema, then validate untrusted input at\nthe boundary. A TypeScript type alone does not validate a received payload.\n\n```ts\nimport { NormalizedWhatsAppInboundMessageSchema } from\n  \"@modainteract/moda-interact-shared/whatsapp\";\n\n// rawPayload is the normalized contract, not a raw Meta webhook body.\nfunction acceptNormalizedMessage(rawPayload: unknown) {\n  const parsed = NormalizedWhatsAppInboundMessageSchema.safeParse(rawPayload);\n  if (!parsed.success) return { ok: false as const, issues: parsed.error.issues };\n  return { ok: true as const, message: parsed.data };\n}\n```\n\nSchemas expose Zod `parse` (throws on invalid input) and `safeParse` (discriminated\nsuccess/error result). Named `parse…` / `safeParse…` helpers are available only\nwhere listed in the inventory. Producers and consumers must agree on the event\nversion; the existence of legacy and newer Shopify exports is not an instruction\nto mix their shapes. Use the queue/job identifier helper for the particular\nbusiness operation, rather than treating all identifiers as interchangeable.\n\nInternationalization provides normalization and message rendering, not the\napplication's decision about when to change a conversation language. Effective\nrecovery policy validation likewise does not load a merchant's current policy.\n\n## Commerce definitions, grants and execution\n\nCommerce is exposed through two explicit imports:\n\n```ts\nimport {\n  CommerceToolDefinitionSchema,\n  CommerceManifestSchema,\n  CommerceConversationGrantSchema,\n  selectCapabilities,\n  deduplicateTools,\n} from \"@modainteract/moda-interact-shared/commerce\";\nimport { runCommerceTurn, type RunnerTool } from\n  \"@modainteract/moda-interact-shared/commerce/runner\";\n```\n\n### Which structure goes where\n\n| Structure / API | Meaning and owner |\n|---|---|\n| `CommerceToolDraftDefinitionSchema` | Allows structurally bounded incomplete Tool-authoring data. Passing it does not make a Tool draft publishable. |\n| `CommerceToolDefinitionSchema` | Full Tool name, version, description, input schema, execution definition and response template. Stored/executed by Commerce. |\n| `validateDefinitionForPublication` | Uses a supplied `CommerceDefinitionCompiler` to check the full definition, mapped arguments and response-template paths. Commerce supplies schema-backed compilation. |\n| `ToolDescriptorSchema`, `definitionToMcpDescriptor` | Full versioned Tool descriptor versus the MCP-facing name/description/inputSchema projection. The server-only execution definition is not exposed as model instructions. |\n| `CommerceManifestSchema` | Resolved immutable release contract. Each selected Capability identifies one Feature and one exact Tool descriptor; `featureBehaviours` contains one behaviour prompt for each represented Feature. Commerce provides the manifest; callers validate it. |\n| `GrantedToolSchema`, `GrantedToolsSchema` | Pinned Tool identity, exact Tool revision, name/version and sorted originating Capability keys selected for a conversation. One Tool reused by several Capabilities is emitted once with all Capability provenance. |\n| `CommerceConversationGrantSchema` | Persisted conversation permission snapshot. Background stores the resolved release, selected Capability keys and granted Tools and reuses them on later turns. Empty Capability/Tool selections are valid. |\n| `CommerceTurnIdentitySchema`, `CommerceAssertionSchema` | Turn identity and resolve/execute assertion shapes. These do not sign or verify JWT signatures; transport/authentication belongs to the services. |\n| `selectCapabilities` | Pure selection over ordinary Feature Capabilities plus caller-supplied Feature eligibility facts. There is no BASE/RECOVERY_POLICY Capability kind or mandatory `conversation_core`. |\n| `deduplicateTools` | Builds the granted-Tool union from one Tool descriptor per selected Capability while retaining deterministic Capability provenance. |\n| `manifestMatchesGrant`, `currentlyGrantedTools` | Compare pinned selection and current availability. Do not replace signature, tenant, lease or persistence checks. |\n| `CommerceToolInputs`, `CommerceToolOutputs` | Named supported operation contracts; custom authored inputs still use the validated Tool definition's schema. |\n| `CommerceBasketSchema`, `CommerceProductSchema`, `CommerceOfferSchema`, `CommerceEvidenceSchema`, `CommerceAlternativeSchema` | Bounded commerce facts/evidence exchanged between services. Parsing does not prove external facts are true or current. |\n| `CommerceToolResultSchema`, `commerceToolResultSchema` | Standard result envelope; the factory accepts a specific data schema. |\n\nThe direct release contract is Feature/Capability/Tool based. A selected Capability\ncontains exactly one `featureId` and one exact `toolDescriptor`; Feature behaviour\nis carried separately and exactly once for each represented Feature. For example:\n\n```ts\nconst manifest = CommerceManifestSchema.parse({\n  contractVersion: \"commerce.v1\",\n  releaseId: \"release_123\",\n  runnerCompatibility: \"^1.0.0\",\n  capabilities: [\n    {\n      capabilityId: \"capability_product_read\",\n      key: \"product_read\",\n      featureId: \"feature_product_information\",\n      position: 0,\n      toolDescriptor: {\n        toolId: \"tool_product_read\",\n        toolRevisionId: \"tool_revision_7\",\n        name: \"read_product\",\n        definitionVersion: \"1.0.0\",\n        description: \"Read verified product information.\",\n        inputSchema: {\n          type: \"object\",\n          properties: {},\n          required: [],\n          additionalProperties: false,\n        },\n      },\n    },\n  ],\n  featureBehaviours: [\n    {\n      featureId: \"feature_product_information\",\n      behaviourPrompt: \"Use verified product information when answering.\",\n    },\n  ],\n  selectedCapabilityKeys: [\"product_read\"],\n  grantedTools: [\n    {\n      toolId: \"tool_product_read\",\n      toolRevisionId: \"tool_revision_7\",\n      toolName: \"read_product\",\n      definitionVersion: \"1.0.0\",\n      capabilityKeys: [\"product_read\"],\n    },\n  ],\n  responseContract: {\n    version: \"response.v1\",\n    instructions: \"Write a concise reply supported by verified facts.\",\n    detailsSchema: {\n      type: \"object\",\n      properties: {},\n      required: [],\n      additionalProperties: false,\n    },\n  },\n  responseContractHash: \"0\".repeat(64),\n});\n```\n\nThe identifiers and hash above are illustrative. Publication/manifest assembly must\nprove that the Capability belongs to the Feature, the pinned Tool revision belongs\nto the Tool and is published, and the Feature behaviour snapshot belongs to the\nsame immutable release. Shared schema parsing cannot prove those database\nrelationships.\n\nThe normal flow is:\n\n1. Commerce Studio associates an ordinary Feature Capability with one Tool; release\n   creation pins the exact published Tool revision and snapshots Feature behaviour.\n2. Commerce resolves eligible Feature Capabilities using authoritative merchant\n   facts and builds a manifest whose Capability entries are position ordered.\n3. `featureBehaviours` contains exactly one entry per represented Feature, ordered\n   by that Feature's first Capability position. Blank behaviour text is valid.\n4. Background receives the manifest and persists its `grantedTools`, release and\n   selected Capability keys in a conversation grant. Zero selected Capabilities\n   and zero granted Tools are valid.\n5. Background checks MCP descriptors against that manifest/grant and constructs\n   runtime `RunnerTool` adapters. The model chooses a Tool and supplies arguments;\n   the adapter forwards execution to Commerce.\n6. Later turns reuse the original grant. A new release cannot add Tools to that\n   conversation; current revocation may remove execution permission.\n\n### Turn runner integration\n\n`RunnerTool` is an in-memory adapter, distinct from durable Capability/Tool\nassociations:\n\n```ts\nimport type { ToolDescriptor, GrantedTool, CommerceToolResult } from\n  \"@modainteract/moda-interact-shared/commerce\";\n\n// Shape of the exported RunnerTool interface, shown for explanation.\ntype RunnerToolShape = {\n  descriptor: ToolDescriptor;\n  isAuthorized: (tool: GrantedTool, signal: AbortSignal) => Promise<boolean>;\n  execute: (\n    arguments_: Record<string, unknown>,\n    signal: AbortSignal,\n  ) => Promise<CommerceToolResult>;\n  extractEvidence?: (result: CommerceToolResult) => unknown[];\n};\n```\n\nImport `RunnerTool` rather than copying this explanatory shape. `runCommerceTurn`\ntakes `RunCommerceTurnInput`: turn, grant, manifest, host instructions, trusted\ncontext, history, resolved language, abort signal and dependencies. Feature\nbehaviour is consumed from `manifest.featureBehaviours`; callers do not pass a\nparallel Capability-prompt array. The host provides `model.invoke`, `tools`, `now`\nand a canonical-string `digest` function. Optional budgets bound model steps,\nremote calls, deadline and output tokens. The model adapter returns `ModelStep`\nTool calls and output-token usage; it does not send a WhatsApp message itself.\n\nThe return type is discriminated:\n\n```ts\nimport type { CommerceFinalResponse } from\n  \"@modainteract/moda-interact-shared/commerce\";\nimport type { RunnerErrorCode } from\n  \"@modainteract/moda-interact-shared/commerce/runner\";\n\n// Shape of RunCommerceTurnResult, shown for explanation.\ntype TurnResultShape =\n  | { ok: true; result: CommerceFinalResponse;\n      usage: { modelSteps: number; remoteCalls: number } }\n  | { ok: false; error: { code: RunnerErrorCode; retryable: boolean } };\n```\n\nThe runner owns bounded orchestration, authorization callbacks and final-response\nvalidation. It does not own an MCP HTTP client, a model SDK, Prisma, conversation\nleases or WhatsApp delivery. Background owns those production adapters; preview\ncan inject isolated fixture/model adapters. Never replace an unavailable\nproduction adapter with `example*` data.\n\n`runnerVersion` describes runner compatibility independently of the npm package\nversion. `PLATFORM_INSTRUCTIONS` is the runner's fixed grounding, authorization,\nlanguage and finalization guidance. Feature behaviour, response guidance and other\nauthored release text cannot expand permissions or override those rules.\n\n### Model catalogue and OpenRouter adapter\n\nUse `/commerce/model` for the environment, availability, catalogue, selection,\nextensible OpenRouter configuration, resolved-model and credential AAD contracts.\nThe configuration schema bounds ordinary JSON and blocks runtime-owned fields;\nunknown non-reserved OpenRouter options remain available for forward-compatible\nprovider features. `createCommerceOpenRouterCredentialAad` returns the canonical\nstring that each service UTF-8 encodes for its own encrypted-credential handling.\n\nServer-side Commerce and Background adapters may use `/commerce/model/node` to\nbridge a resolved model and runtime credential to the existing\n`CommerceModelInvoker`. This adapter does not resolve model assignments, store or\ndecrypt credentials, execute remote Tools, or own the Commerce turn loop. The\nrunner remains the authority for Tool visibility, authorization, retries and\nfinal-response validation.\n\n### Response contracts and final responses\n\n`CommerceResponseContractSchema` validates the release-owned\n`{version: \"response.v1\", instructions, detailsSchema}` definition.\n`EMPTY_RESPONSE_CONTRACT` is the empty-details baseline. Use the supported\n`DetailsSchemaSchema` / `InputSchemaSchema` subset rather than assuming arbitrary\nJSON Schema keywords are accepted; `validateSubset`, `matchesSubset` and\n`compileSubset` expose the same subset validation/matching machinery.\n\n`CommerceFinalResponseSchema` validates the fixed envelope: `answerKind`,\n`replyText`, `referralReason`, `detectedLanguageTag`,\n`detectedLanguageConfidence`, `evidenceIds` and `details`.\n`finalResponseSchema(definition)` additionally validates the selected release's\ndetails schema. `finalResponseToolSchema(definition)` produces the host-local\nfinalization Tool's input schema. `verifyResponseContract` checks the definition\nagainst its hash using the caller's digest implementation.\n\nAn ANSWER requires null referral reason; a REFER_TO_STORE response requires the\nappropriate reason, empty evidence IDs and empty details. Language detection\nfields are either both null or a valid pair. Only reply text is customer-facing;\nstructured details never authorize actions or replace delivery/routing decisions.\n\nUse `canonicalJson`, `responseContractCanonicalJson` and `toolHashInput` for their\nspecific canonicalization/hashing boundaries. Do not hash arbitrary object\nserialization in place of these helpers. `mapToolArguments` maps validated authored\ninputs/fixed values; it does not call Shopify. `POLICY_OPERATIONS` and\n`POLICY_OPERATION_DESCRIPTORS` describe supported operation identities; actual\nprovider implementations remain in Commerce.\n\n`exampleTool`, `exampleDefinition`, `exampleTurn`, `exampleManifest`,\n`exampleGrant` and `exampleFinal` are synthetic fixtures for examples and tests,\nnot seeds for a merchant's production configuration.\n\n## What this package owns\n\nThe package contains code that genuinely belongs at a cross-service boundary,\nincluding:\n\n- runtime-validated cross-service event contracts;\n- TypeScript types shared by producers and consumers;\n- schema and event-version constants;\n- canonical queue/job-name constants where multiple repositories must agree;\n- deterministic correlation/job identifier helpers;\n- small pure utilities used by more than one service;\n- reusable structured application logging primitives;\n- the reusable base Node OpenTelemetry runtime, including tracing and metrics\n  providers, exporters, sampling, HTTP/Undici instrumentation, lifecycle, and\n  generic observability helpers.\n\nThe package deliberately keeps framework and runtime dependencies small.\n\n## Commerce contracts\n\nThe browser-safe Commerce contract entrypoint is:\n\n```ts\nimport {\n  CommerceToolDefinitionSchema,\n  ExternalHttpExecutionSchema,\n  ExternalHttpResultDataSchema,\n  ResponseProcessingSchema,\n  ConnectionViewSchema,\n} from \"@modainteract/moda-interact-shared/commerce\";\n```\n\nThe public `/commerce` inventory includes the canonical JSON, subset, primitive,\ndefinition, schema, response, selection, fixture and external contract exports.\nExternal contracts include `ExternalQueryValueSchema`,\n`ExternalQueryMappingSchema`, `ExternalQueryMappingsSchema`,\n`ExternalPathSchema`, `ExternalResponseFormatSchema`,\n`FieldProjectionSchema`, `ResponseFilterSchema`,\n`VisualResponseProcessingSchema`, `ResponseProcessingSchema`,\n`TransformResponseSchema`, `TransformSampleSchema`,\n`ExternalHttpResultDataSchema`, `ConnectionRevisionViewSchema`,\n`ConnectionViewSchema`, `CredentialStatusSchema`, `ConnectionCommandSchema`,\n`RevisionInputSchema`, `ConnectionIssueSchema`, and `ConnectionResultSchema`,\nplus their corresponding TypeScript types and the external execution,\npublication, mapping and descriptor helpers from `definitions`.\n\nThe Node-only `/commerce/runner` entrypoint exports the Commerce runner version,\nplatform instructions, manifest/grant/result schemas, response-contract helpers,\nand runner request/step/result types. It owns protocol validation helpers only;\nprovider transport, credentials, response processing and persistence remain in\ntheir service-owned repositories.\n\n## Node observability runtime\n\nThe package provides a browser-safe semantic observability entry and a\nNode-only runtime entry:\n\n```ts\nimport {\n  getActiveTraceId,\n  withObservedSpan,\n} from \"@modainteract/moda-interact-shared/observability\";\n\nimport {\n  initNodeObservability,\n} from \"@modainteract/moda-interact-shared/observability/node\";\n```\n\nImport `./observability/node` only from a process preload. It installs tracing,\nmetrics, HTTP/HTTPS and Undici/fetch instrumentation before framework or worker\nmodules load:\n\n```text\nnode --import ./observability.mjs <framework-or-worker-entrypoint>\n```\n\n```js\n// observability.mjs\nimport { initNodeObservability } from\n  \"@modainteract/moda-interact-shared/observability/node\";\n\ninitNodeObservability({\n  serviceName: \"moda-interact-messaging\",\n  environment: process.env.DEPLOYMENT_ENVIRONMENT_NAME,\n  instrument: { http: true, fetch: true, prisma: false },\n});\n```\n\nSet `prisma: true` only for processes that load Prisma, and keep the preload\nbefore the first Prisma application import.\n\nThe runtime uses the canonical `service.namespace`, `service.name`, and\n`deployment.environment.name` resource attributes. It honors\n`OTEL_TRACES_SAMPLER`, ratio arguments for ratio samplers, signal-specific or\ngeneric OTLP endpoints, and bounded batch/export settings. With no trace or\nmetric endpoint those pipelines are no-ops while structured stdout logging\ncontinues.\n\n`forceFlush()` covers traces, metrics, OpenTelemetry Logs, and direct Loki.\nInitialization, export, flush, and shutdown failures are best-effort and do not\nbecome application startup or business-operation failures.\n\n### BullMQ telemetry\n\nCreate the shared BullMQ telemetry adapter once per Queue or Worker options\nobject and pass it through BullMQ's native `telemetry` option:\n\n```ts\nimport { createBullMQTelemetry } from\n  \"@modainteract/moda-interact-shared/observability/bullmq\";\n\nconst telemetry = createBullMQTelemetry({\n  serviceName: \"moda-messaging-worker\",\n  enableMetrics: true,\n});\n\nnew Worker(queueName, processor, { connection, telemetry });\n```\n\nThe adapter uses the global trace and meter providers installed by the Node\nruntime. BullMQ owns propagation metadata in its job options; applications must\nnot copy or mutate queue payloads solely to carry trace context. BullMQ metrics\nuse queue name, bounded job name, and job state dimensions, never Moda job,\nshop, checkout, conversation, or message IDs.\n\n### GenAI active spans\n\nUse the GenAI helpers to model one inbound conversation turn as an independent\ntrace with active agent, tool, and automatically instrumented child spans:\n\n```ts\nimport {\n  observeAgentInvocation,\n  observeAgentTool,\n  observeConversationTurn,\n} from \"@modainteract/moda-interact-shared/observability/genai\";\n\nawait observeConversationTurn(\"whatsapp\", () =>\n  observeAgentInvocation({ agentName: \"commerce-agent\" }, () =>\n    observeAgentTool(\"lookup-products\", executeTool),\n  ),\n);\n```\n\nPass `recordMetrics: false` to activate a helper's span without recording its\nGenAI metrics. The option applies only to that helper invocation, so pass it to\neach nested helper whose metrics should be suppressed:\n\n```ts\nconst spansOnly = { recordMetrics: false } as const;\n\nawait observeConversationTurn(\"whatsapp\", () =>\n  observeAgentInvocation({ agentName: \"commerce-agent\" }, () =>\n    observeAgentTool(\"lookup-products\", executeTool, spansOnly),\n    spansOnly,\n  ),\n  spansOnly,\n);\n```\n\nAn optional `mapException` callback can replace the application failure with a\nbounded telemetry-safe representation for `span.recordException`. The original\nthrown value is still rethrown unchanged. If the mapper throws or returns no\nusable fields, the exception event is omitted and the span remains `ERROR`;\nthe original value is never recorded as fallback. Apply the mapper to every\nnested helper that may observe the same rethrown failure:\n\n```ts\nconst safeObservation = {\n  recordMetrics: false,\n  mapException: () => ({\n    name: \"ProviderError\",\n    message: \"Provider operation failed\",\n  }),\n} as const;\n\nawait observeAgentTool(\"lookup-products\", executeTool, safeObservation);\n```\n\nThe helpers use only the global tracer and meter providers installed by the\nNode runtime. They create no SDK, provider, exporter, or network request, and\nremain lightweight no-ops when providers are absent. Six module-singleton\ninstruments record turn, agent, and tool duration and operation outcomes.\nMetric attributes are limited to `outcome=success|error`; turn metrics also use\nthe closed `channel=whatsapp|other` vocabulary. Arbitrary agent, provider,\nmodel, tool, and Moda business identifiers never become metric dimensions.\n\nAgent, provider, model, and tool names are trimmed and bounded on spans only.\nPrompt, completion, message, and tool payload bodies are never accepted or\ncaptured by default.\n\n## What this package does not own\n\nThis package does **not** own:\n\n- Prisma models or database migrations;\n- PostgreSQL persistence;\n- BullMQ/Redis clients or worker processes;\n- Shopify or Meta webhook HTTP handlers;\n- Shopify or Meta SDK integration;\n- application recovery/business logic;\n- service/domain-specific span names, business attributes, or application\n  metrics;\n- deployment OTLP endpoint/credential wiring or observability backends;\n- Render deployment configuration.\n\nThose service-specific semantics and deployment concerns remain in the\nrepository that owns the corresponding runtime.\n\n---\n\n# Shopify contracts\n\nModa Interact uses the shared Shopify package boundary so webhook producers and\nbackground consumers do not independently invent compatible-looking event\ntypes.\n\nImport Shopify contracts from:\n\n```ts\nimport {\n  // schemas, parsers, constants and types\n} from \"@modainteract/moda-interact-shared/shopify\";\n```\n\nNode-only Shopify helpers are isolated under:\n\n```ts\nimport {\n  createShopifyWebhookJobId,\n} from \"@modainteract/moda-interact-shared/shopify/node\";\n```\n\nThe Node-only subpath prevents `node:` built-ins from being accidentally pulled\ninto consumers that only need the browser-safe Shopify contract entry point.\n\n## Recovery-focused events\n\nThe current recovery architecture defines distinct event meanings for:\n\n```text\ncheckout.created\ncheckout.updated\norder.completed\n```\n\nPre-recovery checkout events deliberately avoid transporting customer identity,\nline-item, pricing and address data merely because those values existed in the\nprovider webhook.\n\nConsumers must parse/validate cross-service data with the shared runtime\ncontracts before acting on it. TypeScript types alone are not a trust boundary.\n\n## Contract versioning\n\nSerialized event schema versions and the npm package version are separate\nconcepts.\n\nA breaking change to an existing serialized event contract requires an\nappropriate event-schema version change and coordinated producer/consumer\nrollout.\n\nAn additive npm package capability, such as a new independent package export,\ndoes not by itself require changing an unrelated serialized event schema.\n\n---\n\n# Structured logging\n\nModa Interact runtime services use one reusable structured logging primitive:\n\n```ts\nimport {\n  createLogger,\n  type StructuredLogger,\n  type LogFields,\n} from \"@modainteract/moda-interact-shared/logging\";\n```\n\n## Create a logger\n\nEach deployable service/process supplies its own identity and environment:\n\n```ts\nconst logger = createLogger({\n  serviceName: \"moda-interact\",\n  environment: \"test\",\n});\n```\n\nThe default namespace is:\n\n```text\nmoda-interact\n```\n\nLogs contain the canonical identity:\n\n```text\nservice.namespace=moda-interact\nservice.name=<service/process name>\ndeployment.environment.name=<environment>\n```\n\nFor deployed Moda Interact environments, the expected environment values are:\n\n```text\ntest\nproduction\n```\n\nThe shared library does not read a service's environment variables for it.\nThe owning service resolves its configuration and passes the resulting\nenvironment to `createLogger`.\n\n## Write logs\n\n```ts\nlogger.info(\"shopify.webhook.outcome\", {\n  topic: \"checkouts/create\",\n  outcome: \"ENQUEUED\",\n  ackMs: 18,\n});\n\nlogger.warn(\"queue.job.retry\", {\n  queue: \"recovery\",\n  attempt: 2,\n});\n\nlogger.error(\"recovery.failed\", {\n  recoveryId,\n  error,\n});\n```\n\nThe default sink emits one structured JSON record per console call.\n\nExample:\n\n```json\n{\n  \"timestamp\": \"2026-08-30T12:00:00.000Z\",\n  \"level\": \"info\",\n  \"event\": \"shopify.webhook.outcome\",\n  \"service.namespace\": \"moda-interact\",\n  \"service.name\": \"moda-interact\",\n  \"deployment.environment.name\": \"test\",\n  \"data\": {\n    \"topic\": \"checkouts/create\",\n    \"outcome\": \"ENQUEUED\",\n    \"ackMs\": 18\n  }\n}\n```\n\n## Log levels\n\nAvailable levels are:\n\n```text\ndebug\ninfo\nwarn\nerror\n```\n\nUse stable, machine-readable event names such as:\n\n```text\nshopify.webhook.outcome\nmeta.webhook.outcome\nqueue.job.started\nqueue.job.completed\nqueue.job.failed\nrecovery.materialized\n```\n\n## Child loggers\n\n`child()` is optional.\n\nIt creates another logger with some repeated fields already attached. It does\n**not** create a worker, queue, process, connection, or logging service.\n\nInstead of repeatedly writing:\n\n```ts\nlogger.info(\"queue.job.started\", {\n  queue: \"recovery\",\n  jobId,\n});\n\nlogger.info(\"queue.job.completed\", {\n  queue: \"recovery\",\n  jobId,\n});\n```\n\nyou may write:\n\n```ts\nconst recoveryLogger = logger.child({\n  queue: \"recovery\",\n});\n\nrecoveryLogger.info(\"queue.job.started\", {\n  jobId,\n});\n\nrecoveryLogger.info(\"queue.job.completed\", {\n  jobId,\n});\n```\n\nBoth records automatically contain:\n\n```json\n{\n  \"queue\": \"recovery\"\n}\n```\n\nUse child context only for stable, safe operational fields.\n\n## Sensitive data\n\nThe logger provides defense-in-depth redaction and bounded serialization, but\ncallers remain responsible for constructing safe, explicit log fields.\n\nDo not intentionally log:\n\n- access or refresh tokens;\n- authorization headers;\n- cookies;\n- OAuth codes;\n- passwords or API keys;\n- private keys;\n- webhook verification secrets;\n- complete webhook/request/response payloads;\n- customer names, email addresses, phone numbers or postal addresses;\n- payment/card data.\n\nDo not pass a complete provider/customer object to the logger and rely on\nredaction to make it safe.\n\n## Errors\n\nErrors can be logged as values:\n\n```ts\nlogger.error(\"queue.job.failed\", {\n  jobId,\n  error,\n});\n```\n\nThe shared logger safely serializes `Error` objects without emitting stack\ntraces by default.\n\nLogging is best-effort: a logger sink or serialization failure must not alter\nthe success/failure semantics of the business operation being logged.\n\n## Logging destinations\n\nEvery call to the shared logger:\n\n```ts\nlogger.debug(...)\nlogger.info(...)\nlogger.warn(...)\nlogger.error(...)\n```\n\nemits the same already-sanitized canonical record to up to three independent,\nbest-effort destinations:\n\n1. canonical structured JSON to the configured sink (default: console);\n2. the OpenTelemetry Logs API via the global `LoggerProvider`, if one has been\n   installed;\n3. a direct Grafana Loki transport, if the Node process bootstrap has installed\n   the Loki emitter.\n\nEach destination is failure-isolated: a failure in one must not suppress\nanother and must never affect application/business correctness.\n\nThe OpenTelemetry API is a no-op when no provider is installed, so stdout\nlogging continues to work in local/test environments without any backend.\n\nThe heavy Node SDK/exporter and the Winston/winston-loki transport are isolated\nin:\n\n```text\n@modainteract/moda-interact-shared/logging/node\n```\n\nand must be imported and initialized only from the Node process bootstrap —\nnever through Vite/application/browser bundles.\n\n```text\napplication module\n    |\n    v\n@modainteract/moda-interact-shared/logging\n    |\n    +--> canonical JSON stdout\n    |\n    +--> @opentelemetry/api-logs\n    |        |\n    |        | global LoggerProvider\n    |        v\n    |   ./logging/node\n    |        |\n    |        +--> LoggerProvider\n    |        +--> BatchLogRecordProcessor\n    |        +--> OTLPLogExporter\n    |                 |\n    |                 v\n    |              /v1/logs\n    |\n    +--> lightweight Loki bridge (globalThis emitter)\n             |\n             v\n        ./logging/node\n             |\n             +--> Winston + winston-loki\n                      |\n                      v\n                  Grafana Loki\n```\n\nWinston and winston-loki exist **only** in the Node-only package graph. The\nnormal `./logging` entry contains no Winston, winston-loki or Node networking\nimports.\n\n### Node bootstrap\n\nProcess bootstrap code installs the optional destinations once:\n\n```ts\nimport {\n  initNodeLokiLogging,\n  initNodeOpenTelemetryLogging,\n} from \"@modainteract/moda-interact-shared/logging/node\";\n\ninitNodeLokiLogging({\n  serviceName: \"moda-interact\",\n  environment: \"production\",\n});\n\ninitNodeOpenTelemetryLogging({\n  serviceName: \"moda-interact\",\n  environment: \"production\",\n});\n```\n\nEach destination is independently configurable, so a deployment may use:\n\n```text\nconsole only\n\nconsole + Loki\n\nconsole + OTel Logs\n\nconsole + Loki + OTel Logs\n```\n\nEither Node destination may be omitted entirely; without an installed\nprovider/emitter the logger remains a safe stdout-only logger.\n\nThe bootstrap supports the standard OpenTelemetry environment variables:\n\n```text\nOTEL_SDK_DISABLED\n\nOTEL_LOGS_EXPORTER\n\nOTEL_EXPORTER_OTLP_LOGS_ENDPOINT\nOTEL_EXPORTER_OTLP_ENDPOINT\n\nOTEL_EXPORTER_OTLP_LOGS_HEADERS\nOTEL_EXPORTER_OTLP_HEADERS\n\nOTEL_BLRP_MAX_QUEUE_SIZE\nOTEL_BLRP_MAX_EXPORT_BATCH_SIZE\nOTEL_BLRP_SCHEDULE_DELAY\nOTEL_BLRP_EXPORT_TIMEOUT\n\nOTEL_LOG_EXPORT_CONCURRENCY_LIMIT\n```\n\nEndpoint rules:\n\n```text\nOTEL_EXPORTER_OTLP_LOGS_ENDPOINT\n    exact signal endpoint; do not append /v1/logs\n\nOTEL_EXPORTER_OTLP_ENDPOINT\n    generic endpoint; append /v1/logs\n```\n\nModa deliberately does **not** export to the OpenTelemetry default localhost\nendpoint. Without an explicitly configured endpoint the logger remains\nstdout-only.\n\n### Direct Loki transport\n\nThe direct Loki transport is a lightweight bridge: the normal `./logging` entry\nstores an emitter on `globalThis` and the Node bootstrap installs it. Records\nstill pass through the same shared redaction/sanitization used for stdout and\nOpenTelemetry.\n\nThe Loki environment contract is:\n\n```text\nLOKI_ENABLED\n\nLOKI_URL\n\nLOKI_USERNAME\nLOKI_PASSWORD\n\nLOKI_BATCHING\nLOKI_BATCH_INTERVAL_SECONDS\nLOKI_TIMEOUT_MS\nLOKI_CLEAR_ON_ERROR\n```\n\nRules:\n\n```text\nno LOKI_URL\n    -> direct Loki disabled\n\nLOKI_ENABLED=false\n    -> direct Loki disabled\n\nLOKI_URL present\n    -> direct Loki enabled by default\n```\n\nCredentials are Node-bootstrap configuration only. Never log `LOKI_URL`\ncredentials, `LOKI_USERNAME`, `LOKI_PASSWORD`, Basic Auth values or connection\nheaders.\n\nDefault transport behavior:\n\n```text\nbatching=true\nbounded timeout (LOKI_TIMEOUT_MS)\nclearOnError=true\nreplaceTimestamp=true\ngracefulShutdown=false\n```\n\nThe owning process bootstrap is responsible for explicit flush/shutdown via the\nreturned runtime (`forceFlush`/`shutdown`). If Loki is unavailable, log records\nmay be dropped but application processing must continue. Connection errors are\nnot recursively written back through the shared logger.\n\n### Loki labels and cardinality\n\nModa explicitly configures exactly three canonical low-cardinality labels:\n\n```text\nservice_namespace\nservice_name\nenvironment\n```\n\n`winston-loki@6.1.7` additionally adds its own low-cardinality `level` label\nto every pushed stream, so a stream carries the three Moda labels plus\n`level`. This is transport-library behaviour and does not change Moda's label\nconfiguration.\n\nDynamic/high-cardinality identifiers must **not** be promoted to Loki stream\nlabels. The implementation explicitly retains\n`useWinstonMetaAsLabels: false`, so winston metadata is never promoted to\nlabels. In particular, do not label by:\n\n```text\ntraceId\nspanId\nrequestId\njobId\ndeliveryId\neventId\nrecoveryId\ncheckoutToken\ncartToken\nshop\nshopDomain\ncustomerId\nphone\nemail\n```\n\nSafe high-cardinality operational identifiers may remain in the sanitized JSON\nlog body where justified, but they must never become indexed stream labels.\n\n### Duplicate-delivery warning\n\nDo not route the OpenTelemetry Logs destination back into the same Loki\ninstance while direct Loki is also enabled, unless duplicate storage is\nintentional:\n\n```text\ndirect Loki ON\n+\nOTel Logs ultimately routed to same Loki\n=\nduplicate log storage\n```\n\nThe library does not guess backend topology; deployment configuration owns this\nchoice.\n\n### Log-signal data safety and correlation\n\n- The OpenTelemetry log body is `JSON.stringify` of the same canonical\n  sanitized `LogRecord` written to stdout, so the same redaction boundary\n  applies to both destinations.\n- Queryable OTel attributes are limited to:\n\n  ```text\n  event.name\n  log.level\n  service.namespace\n  service.name\n  deployment.environment.name\n  ```\n\n- The shared logger never manufactures trace IDs. If an active\n  trace/span context exists, the OpenTelemetry Logs SDK associates the emitted\n  record with that active context automatically.\n- stdout and OpenTelemetry emission are isolated and best-effort: a failure in\n  either must not change application/business correctness.\n\n### Tracing/metrics ownership\n\nThe shared logger does **not** create spans, counters or histograms.\n\nThe shared observability runtime owns the generic Node SDK, tracing and metrics\nprovider mechanics, exporters, sampling, HTTP/Undici instrumentation, generic\nhelpers, and lifecycle. Service repositories own their span names, business\nattributes, application-specific metrics, and domain semantics, for example:\n\n```text\nShopify operation\n    |\n    +--> shared structured logger (stdout + OTel Logs)\n    |\n    +--> Shopify-specific OpenTelemetry (spans/metrics)\n```\n\nThis separation is intentional. Fields that are useful in diagnostic logs can\nhave very different cardinality constraints from metric attributes.\n\n---\n\n# Package exports\n\nThe public package exposes independent entry points.\n\n```text\n@modainteract/moda-interact-shared\n    existing root exports\n\n@modainteract/moda-interact-shared/shopify\n    Shopify cross-service contracts, schemas, constants and pure helpers\n\n@modainteract/moda-interact-shared/shopify/node\n    Node-only Shopify helpers\n\n@modainteract/moda-interact-shared/logging\n    reusable structured logging API\n    (stdout + OTel Logs + direct Loki fan-out)\n\n@modainteract/moda-interact-shared/logging/node\n    Node-only logging bootstrap\n    (OpenTelemetry LoggerProvider, batching, OTLP HTTP exporter;\n     Winston + winston-loki direct transport)\n\n@modainteract/moda-interact-shared/observability\n    browser-safe generic observability helpers\n\n@modainteract/moda-interact-shared/observability/node\n    reusable Node OpenTelemetry SDK, tracing/metrics providers, exporters,\n    sampling, HTTP/Undici instrumentation, and lifecycle\n\n@modainteract/moda-interact-shared/observability/bullmq\n    Node-only BullMQ native telemetry adapter\n\n@modainteract/moda-interact-shared/observability/genai\n    Node/runtime GenAI conversation-turn, agent, and tool active-span helpers\n```\n\nConsumers should prefer the narrowest appropriate subpath.\n\n---\n\n# Ownership boundary\n\nExamples of repository ownership:\n\n**moda-interact**\n\n- authenticates Shopify ingress;\n- normalizes/validates Shopify events;\n- publishes the appropriate queue jobs;\n- uses the shared structured logger for generic log mechanics;\n- uses the shared observability runtime for generic OpenTelemetry mechanics;\n- owns Shopify-specific observability semantics and application metrics.\n\n**moda-interact-background**\n\n- parses shared cross-service contracts before acting;\n- runs BullMQ workers and recovery workflows;\n- uses the shared logger for generic structured logging;\n- uses the shared observability runtime for generic OpenTelemetry mechanics;\n- owns worker/recovery observability semantics and application metrics.\n\n**moda-interact-messaging**\n\n- owns Meta/WhatsApp ingress;\n- uses the shared logger for generic structured logging;\n- uses the shared observability runtime for generic OpenTelemetry mechanics;\n- owns Meta/WhatsApp-specific observability semantics and application metrics.\n\n**moda-interact-admin**\n\n- owns the internal admin application;\n- may use the same shared logger where server-side operational logging is\n  required;\n- uses the shared observability runtime for generic OpenTelemetry mechanics;\n- owns admin-specific observability semantics and application metrics.\n\n**moda-interact-database**\n\n- owns Prisma schema/migrations and database artifacts;\n- does not duplicate shared TypeScript transport contracts.\n\n---\n\n# Development\n\n## Typecheck\n\n```bash\nnpm run typecheck\n```\n\n## Build\n\n```bash\nnpm run build\n```\n\n## Test\n\n```bash\nnpm test\n```\n\n## Inspect the publish artifact\n\nBefore publishing:\n\n```bash\nnpm pack --dry-run\n```\n\nVerify that the intended JavaScript and type declarations for every public\nsubpath are included.\n\n---\n\n# Release policy\n\nThe npm package version follows semantic versioning.\n\nExamples:\n\n```text\npatch\n    backwards-compatible fix to an existing package capability\n\nminor\n    backwards-compatible new public capability/export\n\nmajor\n    breaking public API/package compatibility change\n```\n\nThe addition of the independent `./logging` public API is an additive package\ncapability and should therefore be released as a **minor** version increment.\n\nPublishing the package and changing consuming services are coordinated tasks;\na consuming service must not assume an unpublished local shared export exists\nin the npm artifact it installs.\n\n## Complete export inventory\nEnumerated from the TypeScript module exports for every `package.json` public\nentry point, including re-exports and type-only symbols. Source files are linked\nfor exact signatures, fields, defaults and validation constraints. This inventory\ndoes not make internal modules into public import paths. When changing exports,\nupdate both the entry-point guide and this inventory.\n\n<details>\n<summary>Package root — 182 exports</summary>\n\nImport: `@modainteract/moda-interact-shared`.\n\nFrom [src/billing.ts](src/billing.ts):\n\nRuntime exports:\n\n- `APP_PRICING_BILLING_PERIOD_DRAIN_WINDOW_MS`\n- `ARCH007_BILLING_CONTRACT_SCHEMA_VERSION`\n- `availablePurchasedRecoveryCredits`\n- `BILLING_PLAN_KINDS`\n- `BILLING_SUBSCRIPTION_RECONCILE_JOB_NAME`\n- `BILLING_SUBSCRIPTION_RECONCILE_QUEUE_NAME`\n- `BILLING_SUBSCRIPTION_RECONCILE_SCHEMA_VERSION`\n- `BILLING_SYSTEM_MESSAGE_CODES`\n- `BILLING_USAGE_METRICS`\n- `BillingPlanKindSchema`\n- `BillingSubscriptionReconcileJobSchema`\n- `BillingSystemMessageCodeSchema`\n- `BillingUsageMetricSchema`\n- `createBillingSubscriptionReconcileJobId`\n- `createMerchantBillingSystemSourceKey`\n- `createRecoveryIdempotencyKey`\n- `createShopifyUsageIdempotencyKey`\n- `deriveShopifyProviderContextIdentity`\n- `isSameShopifyPurchaseProviderContext`\n- `NormalizedWhatsAppStatusSchema`\n- `parseBillingSubscriptionReconcileJob`\n- `parseNormalizedWhatsAppStatus`\n- `safeParseBillingSubscriptionReconcileJob`\n- `safeParseNormalizedWhatsAppStatus`\n- `WHATSAPP_PROVIDER_STATUS_SCHEMA_VERSION`\n- `WHATSAPP_PROVIDER_STATUSES`\n- `WhatsAppProviderPricingMetadataSchema`\n- `WhatsAppProviderStatusSchema`\n\nType-only exports:\n\n- `BillingPlanKind`\n- `BillingSubscriptionReconcileJob`\n- `BillingSystemMessageCode`\n- `BillingUsageMetric`\n- `NormalizedWhatsAppStatus`\n- `PurchasedRecoveryCreditCounterSnapshot`\n- `ShopifyCurrentProviderContext`\n- `ShopifyProviderContextIdentityInput`\n- `ShopifyPurchaseProviderContext`\n- `WhatsAppProviderPricingMetadata`\n- `WhatsAppProviderStatus`\n\nFrom [src/internationalization.ts](src/internationalization.ts):\n\nRuntime exports:\n\n- `canonicaliseLanguageTag`\n- `CountryCodeSchema`\n- `createInternationalizationRuntime`\n- `CurrencyCodeSchema`\n- `InternationalContextSchema`\n- `LanguageSourceSchema`\n- `LanguageTagSchema`\n- `mergeInternationalContext`\n- `normalizeCountryCode`\n- `normalizeCurrencyCode`\n- `normalizeTimeZone`\n- `resolveLocaleDirection`\n- `TimeZoneIdSchema`\n- `validateIcuCatalogue`\n\nType-only exports:\n\n- `CatalogueValidationOptions`\n- `CountryCode`\n- `CurrencyCode`\n- `IcuMessageCatalogue`\n- `IcuMessageValues`\n- `InternationalContext`\n- `InternationalizationRuntime`\n- `InternationalizationRuntimeOptions`\n- `LanguageSource`\n- `LanguageTag`\n- `TimeZoneId`\n\nFrom [src/merchant-communications.ts](src/merchant-communications.ts):\n\nRuntime exports:\n\n- `AuthoredSupportBodySchema`\n- `countUnicodeGraphemes`\n- `MERCHANT_COMMUNICATIONS_JOB_NAMES`\n- `MERCHANT_COMMUNICATIONS_QUEUE_NAME`\n- `MERCHANT_COMMUNICATIONS_SCHEMA_VERSION`\n- `MerchantMessageTranslationContractSchema`\n- `MerchantMessageTranslationStatusSchema`\n- `MerchantSupportMessageContractSchema`\n- `MerchantSupportMessageKindSchema`\n- `MerchantSupportMessageStateSchema`\n- `MerchantTranslationBatchContractSchema`\n- `MerchantTranslationBatchStatusSchema`\n- `MerchantTranslationDirectionSchema`\n- `MerchantTranslationReconciliationRequestContractSchema`\n- `MerchantTranslationReconciliationScopeSchema`\n- `MerchantTranslationReconciliationStatusSchema`\n- `PLATFORM_SUPPORT_LANGUAGE_TAG`\n- `requiresMerchantTranslation`\n- `TranslatedSupportBodySchema`\n- `TranslationBatchPollJobSchema`\n- `TranslationBatchResultsJobSchema`\n- `TranslationBatchSubmitJobSchema`\n- `TranslationDispatchJobSchema`\n- `TranslationReconcileJobSchema`\n\nType-only exports:\n\n- `MerchantMessageTranslationContract`\n- `MerchantMessageTranslationStatus`\n- `MerchantSupportMessageContract`\n- `MerchantSupportMessageKind`\n- `MerchantSupportMessageState`\n- `MerchantTranslationBatchContract`\n- `MerchantTranslationBatchStatus`\n- `MerchantTranslationDirection`\n- `MerchantTranslationReconciliationRequestContract`\n- `MerchantTranslationReconciliationScope`\n- `MerchantTranslationReconciliationStatus`\n- `TranslationBatchPollJob`\n- `TranslationBatchResultsJob`\n- `TranslationBatchSubmitJob`\n- `TranslationDispatchJob`\n- `TranslationReconcileJob`\n\nFrom [src/recovery-policy.ts](src/recovery-policy.ts):\n\nRuntime exports:\n\n- `EffectiveRecoveryPolicySchema`\n- `parseEffectiveRecoveryPolicy`\n- `RECOVERY_OFFER_MODES`\n- `RecoveryOfferModeSchema`\n- `safeParseEffectiveRecoveryPolicy`\n\nType-only exports:\n\n- `EffectiveRecoveryPolicy`\n- `RecoveryOfferMode`\n\nFrom [src/shopify/common.schema.ts](src/shopify/common.schema.ts):\n\nRuntime exports:\n\n- `MAX_LINE_ITEMS`\n- `MAX_URL_LENGTH`\n- `ShopifyCheckoutLineItemSchema`\n- `ShopifyCheckoutLineItemsSchema`\n- `ShopifyCustomerReferenceSchema`\n- `ShopifyMoneySchema`\n- `ShopifyTenantSchema`\n\nType-only exports:\n\n- `ShopifyCheckoutLineItem`\n- `ShopifyCustomerReference`\n- `ShopifyMoney`\n- `ShopifyTenant`\n\nFrom [src/shopify/constants.ts](src/shopify/constants.ts):\n\nRuntime exports:\n\n- `SHOPIFY_COMMERCE_EVENT_SCHEMA_VERSION`\n- `SHOPIFY_COMMERCE_EVENT_SCHEMA_VERSION_V1`\n- `SHOPIFY_COMMERCE_EVENT_SCHEMA_VERSION_V2`\n- `SHOPIFY_COMMERCE_EVENT_TYPES`\n- `SHOPIFY_RECOVERY_EVENT_TYPES_V2`\n- `SHOPIFY_WEBHOOK_OUTBOX_DESTINATIONS`\n\nFrom [src/shopify/queue-contracts.ts](src/shopify/queue-contracts.ts):\n\nRuntime exports:\n\n- `parseShopifyDiscountSyncJob`\n- `safeParseShopifyDiscountSyncJob`\n- `SHOPIFY_DISCOUNT_SYNC_REASONS`\n- `SHOPIFY_DISCOUNT_SYNC_WEBHOOK_TOPICS`\n- `SHOPIFY_WEBHOOK_QUEUE_CONTRACTS`\n- `ShopifyDiscountSyncJobSchema`\n- `ShopifyDiscountSyncReasonSchema`\n- `ShopifyDiscountSyncWebhookTopicSchema`\n\nType-only exports:\n\n- `ShopifyDiscountSyncJob`\n\nFrom [src/shopify/v1/checkout-observed.schema.ts](src/shopify/v1/checkout-observed.schema.ts):\n\nRuntime exports:\n\n- `CheckoutObservedPayloadSchema`\n\nType-only exports:\n\n- `CheckoutObservedPayload`\n\nFrom [src/shopify/v1/commerce-event.schema.ts](src/shopify/v1/commerce-event.schema.ts):\n\nRuntime exports:\n\n- `createShopifyCommerceOrderingKey`\n- `createShopifyOrderOrderingKey`\n- `isCheckoutObservedEvent`\n- `isOrderCompletedEvent`\n- `parseShopifyCommerceEvent`\n- `safeParseShopifyCommerceEvent`\n- `ShopifyCheckoutObservedEventSchema`\n- `ShopifyCommerceEventSchema`\n- `ShopifyOrderCompletedEventSchema`\n\nType-only exports:\n\n- `ShopifyCheckoutObservedEvent`\n- `ShopifyCommerceEvent`\n- `ShopifyCommerceEventType`\n- `ShopifyOrderCompletedEvent`\n\nFrom [src/shopify/v1/order-completed.schema.ts](src/shopify/v1/order-completed.schema.ts):\n\nRuntime exports:\n\n- `OrderCompletedPayloadSchema`\n\nType-only exports:\n\n- `OrderCompletedPayload`\n\nFrom [src/shopify/v2/cart-activity.schema.ts](src/shopify/v2/cart-activity.schema.ts):\n\nRuntime exports:\n\n- `ShopifyCartActivityPayloadV2Schema`\n\nType-only exports:\n\n- `ShopifyCartActivityPayloadV2`\n\nFrom [src/shopify/v2/checkout-created.schema.ts](src/shopify/v2/checkout-created.schema.ts):\n\nRuntime exports:\n\n- `CheckoutCreatedPayloadV2Schema`\n\nType-only exports:\n\n- `CheckoutCreatedPayloadV2`\n\nFrom [src/shopify/v2/checkout-updated.schema.ts](src/shopify/v2/checkout-updated.schema.ts):\n\nRuntime exports:\n\n- `CheckoutUpdatedPayloadV2Schema`\n\nType-only exports:\n\n- `CheckoutUpdatedPayloadV2`\n\nFrom [src/shopify/v2/order-completed.schema.ts](src/shopify/v2/order-completed.schema.ts):\n\nRuntime exports:\n\n- `OrderCompletedPayloadV2Schema`\n\nType-only exports:\n\n- `OrderCompletedPayloadV2`\n\nFrom [src/shopify/v2/recovery-event.schema.ts](src/shopify/v2/recovery-event.schema.ts):\n\nRuntime exports:\n\n- `createShopifyCartActivityOrderingKey`\n- `createShopifyOrderCorrelationOrderingKey`\n- `createShopifyPendingRecoveryOrderingKey`\n- `isCartActivityEventV2`\n- `isCheckoutCreatedEventV2`\n- `isCheckoutUpdatedEventV2`\n- `isOrderCompletedEventV2`\n- `parseShopifyRecoveryEventV2`\n- `safeParseShopifyRecoveryEventV2`\n- `ShopifyCartActivityEventV2Schema`\n- `ShopifyCheckoutCreatedEventV2Schema`\n- `ShopifyCheckoutUpdatedEventV2Schema`\n- `ShopifyOrderCompletedEventV2Schema`\n- `ShopifyRecoveryEventV2Schema`\n\nType-only exports:\n\n- `ShopifyCartActivityEventV2`\n- `ShopifyCheckoutCreatedEventV2`\n- `ShopifyCheckoutUpdatedEventV2`\n- `ShopifyOrderCompletedEventV2`\n- `ShopifyRecoveryEventTypeV2`\n- `ShopifyRecoveryEventV2`\n\n</details>\n\n<details>\n<summary>/internationalization — 25 exports</summary>\n\nImport: `@modainteract/moda-interact-shared/internationalization`.\n\nFrom [src/internationalization.ts](src/internationalization.ts):\n\nRuntime exports:\n\n- `canonicaliseLanguageTag`\n- `CountryCodeSchema`\n- `createInternationalizationRuntime`\n- `CurrencyCodeSchema`\n- `InternationalContextSchema`\n- `LanguageSourceSchema`\n- `LanguageTagSchema`\n- `mergeInternationalContext`\n- `normalizeCountryCode`\n- `normalizeCurrencyCode`\n- `normalizeTimeZone`\n- `resolveLocaleDirection`\n- `TimeZoneIdSchema`\n- `validateIcuCatalogue`\n\nType-only exports:\n\n- `CatalogueValidationOptions`\n- `CountryCode`\n- `CurrencyCode`\n- `IcuMessageCatalogue`\n- `IcuMessageValues`\n- `InternationalContext`\n- `InternationalizationRuntime`\n- `InternationalizationRuntimeOptions`\n- `LanguageSource`\n- `LanguageTag`\n- `TimeZoneId`\n\n</details>\n\n<details>\n<summary>/billing — 39 exports</summary>\n\nImport: `@modainteract/moda-interact-shared/billing`.\n\nFrom [src/billing.ts](src/billing.ts):\n\nRuntime exports:\n\n- `APP_PRICING_BILLING_PERIOD_DRAIN_WINDOW_MS`\n- `ARCH007_BILLING_CONTRACT_SCHEMA_VERSION`\n- `availablePurchasedRecoveryCredits`\n- `BILLING_PLAN_KINDS`\n- `BILLING_SUBSCRIPTION_RECONCILE_JOB_NAME`\n- `BILLING_SUBSCRIPTION_RECONCILE_QUEUE_NAME`\n- `BILLING_SUBSCRIPTION_RECONCILE_SCHEMA_VERSION`\n- `BILLING_SYSTEM_MESSAGE_CODES`\n- `BILLING_USAGE_METRICS`\n- `BillingPlanKindSchema`\n- `BillingSubscriptionReconcileJobSchema`\n- `BillingSystemMessageCodeSchema`\n- `BillingUsageMetricSchema`\n- `createBillingSubscriptionReconcileJobId`\n- `createMerchantBillingSystemSourceKey`\n- `createRecoveryIdempotencyKey`\n- `createShopifyUsageIdempotencyKey`\n- `deriveShopifyProviderContextIdentity`\n- `isSameShopifyPurchaseProviderContext`\n- `NormalizedWhatsAppStatusSchema`\n- `parseBillingSubscriptionReconcileJob`\n- `parseNormalizedWhatsAppStatus`\n- `safeParseBillingSubscriptionReconcileJob`\n- `safeParseNormalizedWhatsAppStatus`\n- `WHATSAPP_PROVIDER_STATUS_SCHEMA_VERSION`\n- `WHATSAPP_PROVIDER_STATUSES`\n- `WhatsAppProviderPricingMetadataSchema`\n- `WhatsAppProviderStatusSchema`\n\nType-only exports:\n\n- `BillingPlanKind`\n- `BillingSubscriptionReconcileJob`\n- `BillingSystemMessageCode`\n- `BillingUsageMetric`\n- `NormalizedWhatsAppStatus`\n- `PurchasedRecoveryCreditCounterSnapshot`\n- `ShopifyCurrentProviderContext`\n- `ShopifyProviderContextIdentityInput`\n- `ShopifyPurchaseProviderContext`\n- `WhatsAppProviderPricingMetadata`\n- `WhatsAppProviderStatus`\n\n</details>\n\n<details>\n<summary>/recovery-policy — 7 exports</summary>\n\nImport: `@modainteract/moda-interact-shared/recovery-policy`.\n\nFrom [src/recovery-policy.ts](src/recovery-policy.ts):\n\nRuntime exports:\n\n- `EffectiveRecoveryPolicySchema`\n- `parseEffectiveRecoveryPolicy`\n- `RECOVERY_OFFER_MODES`\n- `RecoveryOfferModeSchema`\n- `safeParseEffectiveRecoveryPolicy`\n\nType-only exports:\n\n- `EffectiveRecoveryPolicy`\n- `RecoveryOfferMode`\n\n</details>\n\n<details>\n<summary>/whatsapp — 7 exports</summary>\n\nImport: `@modainteract/moda-interact-shared/whatsapp`.\n\nFrom [src/whatsapp.ts](src/whatsapp.ts):\n\nRuntime exports:\n\n- `NormalizedWhatsAppInboundMessageSchema`\n- `parseNormalizedWhatsAppInboundMessage`\n- `safeParseNormalizedWhatsAppInboundMessage`\n- `WHATSAPP_INBOUND_MESSAGE_SCHEMA_VERSION`\n- `WhatsAppInboundContentSchema`\n\nType-only exports:\n\n- `NormalizedWhatsAppInboundMessage`\n- `WhatsAppInboundContent`\n\n</details>\n\n<details>\n<summary>/merchant-communications — 40 exports</summary>\n\nImport: `@modainteract/moda-interact-shared/merchant-communications`.\n\nFrom [src/merchant-communications.ts](src/merchant-communications.ts):\n\nRuntime exports:\n\n- `AuthoredSupportBodySchema`\n- `countUnicodeGraphemes`\n- `MERCHANT_COMMUNICATIONS_JOB_NAMES`\n- `MERCHANT_COMMUNICATIONS_QUEUE_NAME`\n- `MERCHANT_COMMUNICATIONS_SCHEMA_VERSION`\n- `MerchantMessageTranslationContractSchema`\n- `MerchantMessageTranslationStatusSchema`\n- `MerchantSupportMessageContractSchema`\n- `MerchantSupportMessageKindSchema`\n- `MerchantSupportMessageStateSchema`\n- `MerchantTranslationBatchContractSchema`\n- `MerchantTranslationBatchStatusSchema`\n- `MerchantTranslationDirectionSchema`\n- `MerchantTranslationReconciliationRequestContractSchema`\n- `MerchantTranslationReconciliationScopeSchema`\n- `MerchantTranslationReconciliationStatusSchema`\n- `PLATFORM_SUPPORT_LANGUAGE_TAG`\n- `requiresMerchantTranslation`\n- `TranslatedSupportBodySchema`\n- `TranslationBatchPollJobSchema`\n- `TranslationBatchResultsJobSchema`\n- `TranslationBatchSubmitJobSchema`\n- `TranslationDispatchJobSchema`\n- `TranslationReconcileJobSchema`\n\nType-only exports:\n\n- `MerchantMessageTranslationContract`\n- `MerchantMessageTranslationStatus`\n- `MerchantSupportMessageContract`\n- `MerchantSupportMessageKind`\n- `MerchantSupportMessageState`\n- `MerchantTranslationBatchContract`\n- `MerchantTranslationBatchStatus`\n- `MerchantTranslationDirection`\n- `MerchantTranslationReconciliationRequestContract`\n- `MerchantTranslationReconciliationScope`\n- `MerchantTranslationReconciliationStatus`\n- `TranslationBatchPollJob`\n- `TranslationBatchResultsJob`\n- `TranslationBatchSubmitJob`\n- `TranslationDispatchJob`\n- `TranslationReconcileJob`\n\n</details>\n\n<details>\n<summary>/merchant-communications/node — 5 exports</summary>\n\nImport: `@modainteract/moda-interact-shared/merchant-communications/node`.\n\nFrom [src/merchant-communications.node.ts](src/merchant-communications.node.ts):\n\nRuntime exports:\n\n- `createTranslationBatchPollJobId`\n- `createTranslationBatchResultsJobId`\n- `createTranslationBatchSubmitJobId`\n- `createTranslationDispatchJobId`\n- `createTranslationReconcileJobId`\n\n</details>\n\n<details>\n<summary>/testing/node — 27 exports</summary>\n\nImport: `@modainteract/moda-interact-shared/testing/node`.\n\nFrom [src/testing/node.ts](src/testing/node.ts):\n\nRuntime exports:\n\n- `createCommandRunner`\n- `createDockerRunner`\n- `DEFAULT_COMMAND_TIMEOUT_MS`\n- `DEFAULT_DOCKER_COMMAND_TIMEOUT_MS`\n- `DEFAULT_HOST`\n- `DEFAULT_POLL_INTERVAL_MS`\n- `DEFAULT_POSTGRES_IMAGE`\n- `DEFAULT_POSTGRES_STARTUP_TIMEOUT_MS`\n- `DEFAULT_REDIS_IMAGE`\n- `DEFAULT_REDIS_STARTUP_TIMEOUT_MS`\n- `deployPrismaMigrations`\n- `EphemeralPostgres`\n- `EphemeralRedis`\n- `withDisposableIntegrationInfrastructure`\n\nType-only exports:\n\n- `CommandOptions`\n- `CommandResult`\n- `CommandRunner`\n- `DisposableEnvironment`\n- `DisposableIntegrationCallback`\n- `DisposableIntegrationInfrastructure`\n- `DisposableIntegrationInfrastructureOptions`\n- `DockerRunner`\n- `EphemeralPostgresOptions`\n- `EphemeralRedisOptions`\n- `MigrationDeployOptions`\n- `PostgresConnectionDetails`\n- `RedisConnectionDetails`\n\n</details>\n\n<details>\n<summary>/shopify — 71 exports</summary>\n\nImport: `@modainteract/moda-interact-shared/shopify`.\n\nFrom [src/shopify/common.schema.ts](src/shopify/common.schema.ts):\n\nRuntime exports:\n\n- `MAX_LINE_ITEMS`\n- `MAX_URL_LENGTH`\n- `ShopifyCheckoutLineItemSchema`\n- `ShopifyCheckoutLineItemsSchema`\n- `ShopifyCustomerReferenceSchema`\n- `ShopifyMoneySchema`\n- `ShopifyTenantSchema`\n\nType-only exports:\n\n- `ShopifyCheckoutLineItem`\n- `ShopifyCustomerReference`\n- `ShopifyMoney`\n- `ShopifyTenant`\n\nFrom [src/shopify/constants.ts](src/shopify/constants.ts):\n\nRuntime exports:\n\n- `SHOPIFY_COMMERCE_EVENT_SCHEMA_VERSION`\n- `SHOPIFY_COMMERCE_EVENT_SCHEMA_VERSION_V1`\n- `SHOPIFY_COMMERCE_EVENT_SCHEMA_VERSION_V2`\n- `SHOPIFY_COMMERCE_EVENT_TYPES`\n- `SHOPIFY_RECOVERY_EVENT_TYPES_V2`\n- `SHOPIFY_WEBHOOK_OUTBOX_DESTINATIONS`\n\nFrom [src/shopify/queue-contracts.ts](src/shopify/queue-contracts.ts):\n\nRuntime exports:\n\n- `parseShopifyDiscountSyncJob`\n- `safeParseShopifyDiscountSyncJob`\n- `SHOPIFY_DISCOUNT_SYNC_REASONS`\n- `SHOPIFY_DISCOUNT_SYNC_WEBHOOK_TOPICS`\n- `SHOPIFY_WEBHOOK_QUEUE_CONTRACTS`\n- `ShopifyDiscountSyncJobSchema`\n- `ShopifyDiscountSyncReasonSchema`\n- `ShopifyDiscountSyncWebhookTopicSchema`\n\nType-only exports:\n\n- `ShopifyDiscountSyncJob`\n\nFrom [src/shopify/v1/checkout-observed.schema.ts](src/shopify/v1/checkout-observed.schema.ts):\n\nRuntime exports:\n\n- `CheckoutObservedPayloadSchema`\n\nType-only exports:\n\n- `CheckoutObservedPayload`\n\nFrom [src/shopify/v1/commerce-event.schema.ts](src/shopify/v1/commerce-event.schema.ts):\n\nRuntime exports:\n\n- `createShopifyCommerceOrderingKey`\n- `createShopifyOrderOrderingKey`\n- `isCheckoutObservedEvent`\n- `isOrderCompletedEvent`\n- `parseShopifyCommerceEvent`\n- `safeParseShopifyCommerceEvent`\n- `ShopifyCheckoutObservedEventSchema`\n- `ShopifyCommerceEventSchema`\n- `ShopifyOrderCompletedEventSchema`\n\nType-only exports:\n\n- `ShopifyCheckoutObservedEvent`\n- `ShopifyCommerceEvent`\n- `ShopifyCommerceEventType`\n- `ShopifyOrderCompletedEvent`\n\nFrom [src/shopify/v1/order-completed.schema.ts](src/shopify/v1/order-completed.schema.ts):\n\nRuntime exports:\n\n- `OrderCompletedPayloadSchema`\n\nType-only exports:\n\n- `OrderCompletedPayload`\n\nFrom [src/shopify/v2/cart-activity.schema.ts](src/shopify/v2/cart-activity.schema.ts):\n\nRuntime exports:\n\n- `ShopifyCartActivityPayloadV2Schema`\n\nType-only exports:\n\n- `ShopifyCartActivityPayloadV2`\n\nFrom [src/shopify/v2/checkout-created.schema.ts](src/shopify/v2/checkout-created.schema.ts):\n\nRuntime exports:\n\n- `CheckoutCreatedPayloadV2Schema`\n\nType-only exports:\n\n- `CheckoutCreatedPayloadV2`\n\nFrom [src/shopify/v2/checkout-updated.schema.ts](src/shopify/v2/checkout-updated.schema.ts):\n\nRuntime exports:\n\n- `CheckoutUpdatedPayloadV2Schema`\n\nType-only exports:\n\n- `CheckoutUpdatedPayloadV2`\n\nFrom [src/shopify/v2/order-completed.schema.ts](src/shopify/v2/order-completed.schema.ts):\n\nRuntime exports:\n\n- `OrderCompletedPayloadV2Schema`\n\nType-only exports:\n\n- `OrderCompletedPayloadV2`\n\nFrom [src/shopify/v2/recovery-event.schema.ts](src/shopify/v2/recovery-event.schema.ts):\n\nRuntime exports:\n\n- `createShopifyCartActivityOrderingKey`\n- `createShopifyOrderCorrelationOrderingKey`\n- `createShopifyPendingRecoveryOrderingKey`\n- `isCartActivityEventV2`\n- `isCheckoutCreatedEventV2`\n- `isCheckoutUpdatedEventV2`\n- `isOrderCompletedEventV2`\n- `parseShopifyRecoveryEventV2`\n- `safeParseShopifyRecoveryEventV2`\n- `ShopifyCartActivityEventV2Schema`\n- `ShopifyCheckoutCreatedEventV2Schema`\n- `ShopifyCheckoutUpdatedEventV2Schema`\n- `ShopifyOrderCompletedEventV2Schema`\n- `ShopifyRecoveryEventV2Schema`\n\nType-only exports:\n\n- `ShopifyCartActivityEventV2`\n- `ShopifyCheckoutCreatedEventV2`\n- `ShopifyCheckoutUpdatedEventV2`\n- `ShopifyOrderCompletedEventV2`\n- `ShopifyRecoveryEventTypeV2`\n- `ShopifyRecoveryEventV2`\n\n</details>\n\n<details>\n<summary>/shopify/node — 5 exports</summary>\n\nImport: `@modainteract/moda-interact-shared/shopify/node`.\n\nFrom [src/shopify/node.ts](src/shopify/node.ts):\n\nRuntime exports:\n\n- `createPendingRecoveryCandidateJobId`\n- `createShopifyCheckoutJobId`\n- `createShopifyDiscountSyncJobId`\n- `createShopifyOrderJobId`\n- `createShopifyWebhookJobId`\n\n</details>\n\n<details>\n<summary>/logging — 15 exports</summary>\n\nImport: `@modainteract/moda-interact-shared/logging`.\n\nFrom [src/logging/logger.ts](src/logging/logger.ts):\n\nRuntime exports:\n\n- `createLogger`\n\nFrom [src/logging/redaction.ts](src/logging/redaction.ts):\n\nRuntime exports:\n\n- `CIRCULAR`\n- `isSensitiveLogKey`\n- `LOG_VALUE_LIMITS`\n- `MAX_DEPTH_REACHED`\n- `REDACTED`\n- `sanitizeLogFields`\n- `TRUNCATED`\n\nFrom [src/logging/types.ts](src/logging/types.ts):\n\nRuntime exports:\n\n- `LOG_LEVELS`\n\nType-only exports:\n\n- `LogFields`\n- `LoggerOptions`\n- `LogLevel`\n- `LogRecord`\n- `LogSink`\n- `StructuredLogger`\n\n</details>\n\n<details>\n<summary>/logging/node — 10 exports</summary>\n\nImport: `@modainteract/moda-interact-shared/logging/node`.\n\nFrom [src/logging/node.ts](src/logging/node.ts):\n\nRuntime exports:\n\n- `getNodeOpenTelemetryLoggingRuntime`\n- `initNodeOpenTelemetryLogging`\n- `parseOtlpHeaders`\n- `resolveLogsEndpoint`\n\nType-only exports:\n\n- `NodeOpenTelemetryLoggingOptions`\n- `NodeOpenTelemetryLoggingRuntime`\n\nFrom [src/logging/node/loki.ts](src/logging/node/loki.ts):\n\nRuntime exports:\n\n- `getNodeLokiLoggingRuntime`\n- `initNodeLokiLogging`\n\nType-only exports:\n\n- `NodeLokiLoggingOptions`\n- `NodeLokiLoggingRuntime`\n\n</details>\n\n<details>\n<summary>/observability — 4 exports</summary>\n\nImport: `@modainteract/moda-interact-shared/observability`.\n\nFrom [src/observability/index.ts](src/observability/index.ts):\n\nRuntime exports:\n\n- `getActiveTraceId`\n- `withObservedSpan`\n\nType-only exports:\n\n- `ObservedSpanOptions`\n- `SpanExceptionMapper`\n\n</details>\n\n<details>\n<summary>/observability/node — 7 exports</summary>\n\nImport: `@modainteract/moda-interact-shared/observability/node`.\n\nFrom [src/observability/node.ts](src/observability/node.ts):\n\nRuntime exports:\n\n- `getNodeObservabilityRuntime`\n- `initNodeObservability`\n- `resolveDeploymentEnvironmentName`\n- `resolveSampler`\n\nType-only exports:\n\n- `NodeInstrumentProfile`\n- `NodeObservabilityOptions`\n- `NodeObservabilityRuntime`\n\n</details>\n\n<details>\n<summary>/observability/bullmq — 2 exports</summary>\n\nImport: `@modainteract/moda-interact-shared/observability/bullmq`.\n\nFrom [src/observability/bullmq.ts](src/observability/bullmq.ts):\n\nRuntime exports:\n\n- `createBullMQTelemetry`\n\nType-only exports:\n\n- `BullMQTelemetryOptions`\n\n</details>\n\n<details>\n<summary>/observability/genai — 7 exports</summary>\n\nImport: `@modainteract/moda-interact-shared/observability/genai`.\n\nFrom [src/observability/genai.ts](src/observability/genai.ts):\n\nRuntime exports:\n\n- `observeAgentInvocation`\n- `observeAgentTool`\n- `observeConversationTurn`\n\nType-only exports:\n\n- `AgentObservation`\n- `GenAIObservationOptions`\n\nFrom [src/observability/index.ts](src/observability/index.ts):\n\nType-only exports:\n\n- `ObservedSpanOptions`\n- `SpanExceptionMapper`\n\n</details>\n\n<details>\n<summary>/commerce — 130 exports</summary>\n\nImport: `@modainteract/moda-interact-shared/commerce`.\n\nFrom [src/commerce/canonical-json.ts](src/commerce/canonical-json.ts):\n\nRuntime exports:\n\n- `canonicalJson`\n- `jsonBytes`\n- `responseContractCanonicalJson`\n\nType-only exports:\n\n- `Digest`\n\n\nFrom [src/commerce/definitions.ts](src/commerce/definitions.ts):\n\nRuntime exports:\n\n- `ToolNameSchema`\n- `GrantedToolSchema`\n- `GrantedToolsSchema`\n- `ToolDescriptorSchema`\n- `POLICY_OPERATIONS`\n- `ExternalHttpExecutionSchema`\n- `CommerceExecutionSchema`\n- `ResponseTemplateSchema`\n- `CommerceToolDefinitionSchema`\n- `CommerceToolDraftDefinitionSchema`\n- `validateDefinitionForPublication`\n- `definitionToMcpDescriptor`\n- `mapToolArguments`\n- `toolHashInput`\n- `validateDefinitionVersion`\n- `CommerceToolIdentitySchema`\n- `CommerceToolRevisionIdentitySchema`\n- `POLICY_OPERATION_DESCRIPTORS`\n\nType-only exports:\n\n- `ExternalHttpExecution`\n- `CommerceToolDefinition`\n- `CommerceToolDraftDefinition`\n- `GrantedTool`\n- `ToolDescriptor`\n- `CommerceDefinitionCompiler`\n\n\nFrom [src/commerce/external.ts](src/commerce/external.ts):\n\nRuntime exports:\n\n- `ExternalQueryValueSchema`\n- `ExternalQueryMappingSchema`\n- `ExternalQueryMappingsSchema`\n- `ExternalPathSchema`\n- `ExternalResponseFormatSchema`\n- `FieldProjectionSchema`\n- `ResponseFilterSchema`\n- `VisualResponseProcessingSchema`\n- `ResponseProcessingSchema`\n- `TransformResponseSchema`\n- `TransformSampleSchema`\n- `ExternalHttpResultDataSchema`\n- `ConnectionRevisionViewSchema`\n- `ConnectionViewSchema`\n- `CredentialStatusSchema`\n- `ConnectionCommandSchema`\n- `RevisionInputSchema`\n- `ConnectionIssueSchema`\n- `ConnectionResultSchema`\n\nType-only exports:\n\n- `ExternalResponseFormat`\n- `FieldProjection`\n- `ResponseFilter`\n- `VisualResponseProcessing`\n- `ResponseProcessing`\n- `TransformResponse`\n- `TransformSample`\n- `ExternalHttpResultData`\n- `ConnectionRevisionView`\n- `ConnectionView`\n- `CredentialStatus`\n- `ConnectionCommand`\n- `RevisionInput`\n- `ConnectionResult`\n- `VisualResponseProcessorInput`\n- `VisualResponseProcessorResult`\n- `CodeResponseProcessorInput`\n- `CodeResponseProcessorResult`\n\n\nFrom [src/commerce/fixtures.ts](src/commerce/fixtures.ts):\n\nRuntime exports:\n\n- `exampleTool`\n- `exampleDefinition`\n- `exampleTurn`\n- `exampleManifest`\n- `exampleGrant`\n- `exampleFinal`\n\n\nFrom [src/commerce/primitives.ts](src/commerce/primitives.ts):\n\nRuntime exports:\n\n- `ContractVersionSchema`\n- `IdSchema`\n- `SemverSchema`\n- `HashSchema`\n- `DateSchema`\n- `MoneySchema`\n- `CurrencySchema`\n- `LanguageSchema`\n- `distinct`\n- `boundedJson`\n\n\nFrom [src/commerce/response.ts](src/commerce/response.ts):\n\nRuntime exports:\n\n- `CommerceResponseContractSchema`\n- `EMPTY_RESPONSE_CONTRACT`\n- `ReferralReasonSchema`\n- `CommerceFinalResponseSchema`\n- `finalResponseSchema`\n- `verifyResponseContract`","readmeFilename":"README.md"}