{"_id":"@akson/api-gtm","_rev":"15-7d5d18852b568a664c7af5ec43a228d7","name":"@akson/api-gtm","dist-tags":{"latest":"1.5.1"},"versions":{"1.0.0":{"name":"@akson/api-gtm","version":"1.0.0","_id":"@akson/api-gtm@1.0.0","maintainers":[{"name":"antoineschaller","email":"antoine.schaller@akson.ch"}],"dist":{"shasum":"431c2f34ea4a488e44934123d4bf5f7a884e5d6d","tarball":"https://registry.npmjs.org/@akson/api-gtm/-/api-gtm-1.0.0.tgz","fileCount":5,"integrity":"sha512-nnnwXHXSEdUJHoP7go9mQCWyT1zK6iYiyM/MFf8IqQ/ThYruK0OP59wlQ6dXv7GKiPZO4VBugm94SK+lcgNntQ==","signatures":[{"sig":"MEUCIE1QpPPjsTUNc/vCPS0wbyfZVaDcEoJubors7L0/kPLUAiEAyW8+0plBwh1y2J/7IaXp//GzU/y3pd0KYR+qwhMIGfE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":61741},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"c2a55911d5e64a00cefa724e7b6782e934ffd0db","scripts":{"dev":"tsup --watch","lint":"biome check src/","test":"vitest","build":"tsup","clean":"rm -rf dist","type-check":"tsc --noEmit"},"_npmUser":{"name":"antoineschaller","email":"antoine.schaller@akson.ch"},"_npmVersion":"10.7.0","description":"Google Tag Manager API client for MyArmy","directories":{},"_nodeVersion":"20.15.1","dependencies":{"zod":"^3.24.1","googleapis":"^144.0.0","@akson/api-shared":"^0.1.1","google-auth-library":"^9.15.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.2.4","vitest":"^2.1.8","typescript":"^5.2.2","@biomejs/biome":"^1.8.3"},"_npmOperationalInternal":{"tmp":"tmp/api-gtm_1.0.0_1756479636745_0.18404949476728039","host":"s3://npm-registry-packages-npm-production"},"deprecated":"This package has been renamed to @akson/cortex-api-gtm. Please update your dependencies."},"1.0.1":{"name":"@akson/api-gtm","version":"1.0.1","_id":"@akson/api-gtm@1.0.1","maintainers":[{"name":"antoineschaller","email":"antoine.schaller@akson.ch"}],"dist":{"shasum":"e9b8484a1dfcb7557a715c4450c322561cdc01de","tarball":"https://registry.npmjs.org/@akson/api-gtm/-/api-gtm-1.0.1.tgz","fileCount":4,"integrity":"sha512-KIo3V+tU+AtwE8lof1OCZeG7IhxcWfBm5/5GRes+fmDCmzjJLxXWKNc3IK8kM36akhhLHaHejr1xombIDNUSKg==","signatures":[{"sig":"MEUCICNFCKVUu7Ny1+KKgWOYqE43zW/o0yIZ/mV0u8Vhahs+AiEA+K/rh8rS3cEBzmat9BY9d7Y3KZ5BD5IbhTW+0rTAXJE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":68449},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"9c0bc00883a0e9c92494e19ce816ab93876c64be","scripts":{"dev":"tsup --watch","lint":"biome check src/","test":"vitest","build":"tsup","clean":"rm -rf dist","type-check":"tsc --noEmit"},"_npmUser":{"name":"antoineschaller","email":"antoine.schaller@akson.ch"},"_npmVersion":"10.7.0","description":"Google Tag Manager API client for MyArmy","directories":{},"_nodeVersion":"20.15.1","dependencies":{"zod":"^3.24.1","googleapis":"^144.0.0","@akson/api-shared":"^0.1.1","google-auth-library":"^9.15.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.2.4","vitest":"^2.1.8","typescript":"^5.2.2","@biomejs/biome":"^1.8.3"},"_npmOperationalInternal":{"tmp":"tmp/api-gtm_1.0.1_1756650198375_0.05889471272194502","host":"s3://npm-registry-packages-npm-production"},"deprecated":"This package has been renamed to @akson/cortex-api-gtm. Please update your dependencies."},"1.1.0":{"name":"@akson/api-gtm","version":"1.1.0","_id":"@akson/api-gtm@1.1.0","maintainers":[{"name":"antoineschaller","email":"antoine.schaller@akson.ch"}],"dist":{"shasum":"4913ba20031273ad45101ad5b47380835bd10ea6","tarball":"https://registry.npmjs.org/@akson/api-gtm/-/api-gtm-1.1.0.tgz","fileCount":4,"integrity":"sha512-6SZiusngfj2keT89bt0zf9BmzK89RlhcyjrkbPtaPA14SShLAcq1VTUPW7bMGXIbHxkFOdwo9cRIAoIJwmvMXg==","signatures":[{"sig":"MEUCIBegsCKeNjyLQZzQEoo13S3npi0rPmFPNK0VaKTEmSVvAiEAgKSv3G37OW/JQq9SLWTj8ukXrTwZQkZbBPSGJxZnhBA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":388551},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"d578f2d64763e3a8a15272e7d3e3bf288b4659d4","scripts":{"dev":"tsup --watch","lint":"biome check src/","test":"vitest","build":"tsup","clean":"rm -rf dist","type-check":"tsc --noEmit"},"_npmUser":{"name":"antoineschaller","email":"antoine.schaller@akson.ch"},"_npmVersion":"10.7.0","description":"Google Tag Manager API client for MyArmy","directories":{},"_nodeVersion":"20.15.1","dependencies":{"zod":"^3.24.1","googleapis":"^144.0.0","@akson/api-shared":"^0.1.1","google-auth-library":"^9.15.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.2.4","vitest":"^2.1.8","typescript":"^5.2.2","@biomejs/biome":"^1.8.3"},"_npmOperationalInternal":{"tmp":"tmp/api-gtm_1.1.0_1756817347591_0.32824398328720106","host":"s3://npm-registry-packages-npm-production"},"deprecated":"This package has been renamed to @akson/cortex-api-gtm. Please update your dependencies."},"1.2.0":{"name":"@akson/api-gtm","version":"1.2.0","_id":"@akson/api-gtm@1.2.0","maintainers":[{"name":"antoineschaller","email":"antoine.schaller@akson.ch"}],"dist":{"shasum":"60aabe2207aef4823bea8d6ab94f978ed9a1f869","tarball":"https://registry.npmjs.org/@akson/api-gtm/-/api-gtm-1.2.0.tgz","fileCount":4,"integrity":"sha512-7HfZYuBfPIoRh1VeQXcftKaACGloOTRwm/g3xUD7613iLWUMpfBWP0EYmj9y1qFr1GImJo4IOWquQjVIhwKhng==","signatures":[{"sig":"MEUCIDQ0uJUGT5xM6imbvsne9teCLnHXZrzX6DJ7AGgHUaLIAiEAx5jDu5n1x1PzSIVteJFNRKb4qZyjBt8U7BPT6mRJNPg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":417717},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"scripts":{"dev":"tsup --watch","lint":"biome check src/","test":"vitest","build":"tsup","clean":"rm -rf dist","type-check":"tsc --noEmit"},"_npmUser":{"name":"antoineschaller","email":"antoine.schaller@akson.ch"},"_npmVersion":"11.4.2","description":"Google Tag Manager API client for MyArmy","directories":{},"_nodeVersion":"24.4.1","dependencies":{"zod":"^3.24.1","googleapis":"^144.0.0","@akson/api-shared":"^0.1.1","google-auth-library":"^9.15.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.2.4","vitest":"^2.1.8","typescript":"^5.2.2","@biomejs/biome":"^1.8.3"},"_npmOperationalInternal":{"tmp":"tmp/api-gtm_1.2.0_1756830761124_0.20595086901778403","host":"s3://npm-registry-packages-npm-production"},"deprecated":"This package has been renamed to @akson/cortex-api-gtm. Please update your dependencies."},"1.3.0":{"name":"@akson/api-gtm","version":"1.3.0","_id":"@akson/api-gtm@1.3.0","maintainers":[{"name":"antoineschaller","email":"antoine.schaller@akson.ch"}],"dist":{"shasum":"19b6d9b51fadf99929fa8ee5092f8090931c950e","tarball":"https://registry.npmjs.org/@akson/api-gtm/-/api-gtm-1.3.0.tgz","fileCount":4,"integrity":"sha512-1DjfVAh9mxLrFweSN0TwFwXHytemwrSokHlvy/xrCbc1+gYZFsPFVQwPECKTzYpDHuD1Y/HKD5uCpvxVS/rURg==","signatures":[{"sig":"MEUCIQCDgg0zKQZ9o8f5Ig/QNB3UhSts4SgNVDQaF8HW5lARRgIgBMtF1dDpakbxVa7suwlgqDVQF6o6iI14Ag/dTytJoBY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":417717},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"scripts":{"dev":"tsup --watch","lint":"biome check src/","test":"vitest","build":"tsup","clean":"rm -rf dist","type-check":"tsc --noEmit"},"_npmUser":{"name":"antoineschaller","email":"antoine.schaller@akson.ch"},"_npmVersion":"10.7.0","description":"Google Tag Manager API client for MyArmy","directories":{},"_nodeVersion":"20.15.1","dependencies":{"zod":"^3.24.1","googleapis":"^144.0.0","@akson/api-shared":"^0.1.1","google-auth-library":"^9.15.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.2.4","vitest":"^2.1.8","typescript":"^5.2.2","@biomejs/biome":"^1.8.3"},"_npmOperationalInternal":{"tmp":"tmp/api-gtm_1.3.0_1756835340475_0.746188562320589","host":"s3://npm-registry-packages-npm-production"},"deprecated":"This package has been renamed to @akson/cortex-api-gtm. Please update your dependencies."},"1.4.0":{"name":"@akson/api-gtm","version":"1.4.0","_id":"@akson/api-gtm@1.4.0","maintainers":[{"name":"antoineschaller","email":"antoine.schaller@akson.ch"}],"dist":{"shasum":"abaa22088ea30d2610081e7bf467fb44d81178e0","tarball":"https://registry.npmjs.org/@akson/api-gtm/-/api-gtm-1.4.0.tgz","fileCount":4,"integrity":"sha512-8RGlpTYvV1bu+YJ4YzNGl+FvJ5UYfO4PcDrXFjBU+WTjV25fe1+LjRJpX13vMojsuM754+mvCgD9amy7IezvCA==","signatures":[{"sig":"MEQCIBBkWX3F0Et2UnrnULm9oAEfdKbCpNhc9cT6XiL/7LyXAiB0ZyOrGVMD/qjMAcsO22hT2LWBmG77/ORYMvcGC3nPrw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":448523},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"scripts":{"dev":"tsup --watch","lint":"biome check src/","test":"vitest","build":"tsup","clean":"rm -rf dist","type-check":"tsc --noEmit"},"_npmUser":{"name":"antoineschaller","email":"antoine.schaller@akson.ch"},"_npmVersion":"10.7.0","description":"Google Tag Manager API client for MyArmy","directories":{},"_nodeVersion":"20.15.1","dependencies":{"zod":"^3.24.1","googleapis":"^144.0.0","@akson/api-shared":"^0.1.1","google-auth-library":"^9.15.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.2.4","vitest":"^2.1.8","typescript":"^5.2.2","@biomejs/biome":"^1.8.3"},"_npmOperationalInternal":{"tmp":"tmp/api-gtm_1.4.0_1756852444465_0.37403918258879654","host":"s3://npm-registry-packages-npm-production"},"deprecated":"This package has been renamed to @akson/cortex-api-gtm. Please update your dependencies."},"1.4.1":{"name":"@akson/api-gtm","version":"1.4.1","_id":"@akson/api-gtm@1.4.1","maintainers":[{"name":"antoineschaller","email":"antoine.schaller@akson.ch"}],"dist":{"shasum":"131d51d2e8045d50171cd7df3fff9413bc8bfb29","tarball":"https://registry.npmjs.org/@akson/api-gtm/-/api-gtm-1.4.1.tgz","fileCount":4,"integrity":"sha512-LqUVtuVZ8R1ApkRQz84GPIKYn+FFRWVBwY09W2Ogwipvpk+v5TNKOjb1QpSk/GWrjIvzOAybmJWM3DcvrBp4mQ==","signatures":[{"sig":"MEQCIDxVCBT3qrjHJIuCj4TWa+cY8/kZHyDuhjRvlFo8Pa77AiBIHXw7fOF2FaD6WL4FZC6GccSKX0DzgUS4S90puPDxZg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":604856},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"d051f129f5e43c0d76cad3381abd2b0c0e840134","scripts":{"dev":"tsup --watch","lint":"biome check src/","test":"vitest","build":"tsup","clean":"rm -rf dist","type-check":"tsc --noEmit"},"_npmUser":{"name":"antoineschaller","email":"antoine.schaller@akson.ch"},"_npmVersion":"10.7.0","description":"Google Tag Manager API client for MyArmy","directories":{},"_nodeVersion":"20.15.1","dependencies":{"zod":"^3.24.1","googleapis":"^144.0.0","@akson/api-shared":"^0.1.1","google-auth-library":"^9.15.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.2.4","vitest":"^2.1.8","typescript":"^5.2.2","@biomejs/biome":"^1.8.3"},"_npmOperationalInternal":{"tmp":"tmp/api-gtm_1.4.1_1757403701868_0.9371064174830199","host":"s3://npm-registry-packages-npm-production"},"deprecated":"This package has been renamed to @akson/cortex-api-gtm. Please update your dependencies."},"1.4.2":{"name":"@akson/api-gtm","version":"1.4.2","_id":"@akson/api-gtm@1.4.2","maintainers":[{"name":"antoineschaller","email":"antoine.schaller@akson.ch"}],"dist":{"shasum":"c0fa588eeceae186705d3454b984d93dee881135","tarball":"https://registry.npmjs.org/@akson/api-gtm/-/api-gtm-1.4.2.tgz","fileCount":4,"integrity":"sha512-qRa9uhthTVIOwk6NCzlnPx7JdjmzL1eDedrbLSKiubjEWRrzO6oE4G+l7nHgTGaTmS+QrXHGE9lhVz1lTszXhQ==","signatures":[{"sig":"MEYCIQCKO6F2Cdk3OKTCfKzK7Lz9DV4eA2Hs3YMiMafaI7LqMAIhALSfHCXE4W5y1b4tQS/+YvY+aVC1mz+VZvnOCZMka0WZ","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":654639},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"bd5fb075ac6b8ac1ea595dc2d566b05bca79401b","scripts":{"dev":"tsup --watch","lint":"biome check src/","test":"vitest","build":"tsup","clean":"rm -rf dist","type-check":"tsc --noEmit","test:terraform":"tsx test-terraform.ts","test:variables":"tsx test-variable-interpolation.ts","test:prod-variables":"tsx test-production-variables.ts"},"_npmUser":{"name":"antoineschaller","email":"antoine.schaller@akson.ch"},"_npmVersion":"11.3.0","description":"Google Tag Manager API client for MyArmy","directories":{},"_nodeVersion":"24.2.0","dependencies":{"zod":"^3.24.1","googleapis":"^144.0.0","@akson/api-shared":"^0.1.1","google-auth-library":"^9.15.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.7.0","tsup":"^8.2.4","chalk":"^5.3.0","vitest":"^2.1.8","typescript":"^5.2.2","@biomejs/biome":"^1.8.3","@types/js-yaml":"^4.0.9"},"_npmOperationalInternal":{"tmp":"tmp/api-gtm_1.4.2_1757538558205_0.07025525618049344","host":"s3://npm-registry-packages-npm-production"},"deprecated":"This package has been renamed to @akson/cortex-api-gtm. Please update your dependencies."},"1.4.3":{"name":"@akson/api-gtm","version":"1.4.3","_id":"@akson/api-gtm@1.4.3","maintainers":[{"name":"antoineschaller","email":"antoine.schaller@akson.ch"}],"dist":{"shasum":"35986f94158897641982c1d35cb466fb5e56cf54","tarball":"https://registry.npmjs.org/@akson/api-gtm/-/api-gtm-1.4.3.tgz","fileCount":4,"integrity":"sha512-DqBpBz7et0FVArQOxkVSpJPwkWod270nXfx6Svc8GQOevquYWHRdpdYA3KA5VGJ2V0OYvQi3Ti9HcuexoYM65w==","signatures":[{"sig":"MEUCIQDvD8MCQBNkTWq2bW4MhB48dHuadR6K2hpfmxyqzxCrQAIgQjTHvsqi6KJv9j8NxbyyVfjd9uufWDvDpz2JeQLykJc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":654639},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"bd5fb075ac6b8ac1ea595dc2d566b05bca79401b","scripts":{"dev":"tsup --watch","lint":"biome check src/","test":"vitest","build":"tsup","clean":"rm -rf dist","type-check":"tsc --noEmit","test:terraform":"tsx test-terraform.ts","test:variables":"tsx test-variable-interpolation.ts","test:prod-variables":"tsx test-production-variables.ts"},"_npmUser":{"name":"antoineschaller","email":"antoine.schaller@akson.ch"},"_npmVersion":"11.3.0","description":"Google Tag Manager API client for MyArmy","directories":{},"_nodeVersion":"24.2.0","dependencies":{"zod":"^3.24.1","googleapis":"^144.0.0","@akson/api-shared":"^0.1.1","google-auth-library":"^9.15.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.7.0","tsup":"^8.2.4","chalk":"^5.3.0","vitest":"^2.1.8","typescript":"^5.2.2","@biomejs/biome":"^1.8.3","@types/js-yaml":"^4.0.9"},"_npmOperationalInternal":{"tmp":"tmp/api-gtm_1.4.3_1757538746936_0.017074280604060688","host":"s3://npm-registry-packages-npm-production"},"deprecated":"This package has been renamed to @akson/cortex-api-gtm. Please update your dependencies."},"1.4.4":{"name":"@akson/api-gtm","version":"1.4.4","_id":"@akson/api-gtm@1.4.4","maintainers":[{"name":"antoineschaller","email":"antoine.schaller@akson.ch"}],"dist":{"shasum":"64f9103d24d27403fd7be5afef1d7f992269d5ca","tarball":"https://registry.npmjs.org/@akson/api-gtm/-/api-gtm-1.4.4.tgz","fileCount":4,"integrity":"sha512-lJCtabjeLfUtfGuPvVa7yE1e25f9HHOSUIYPUco26juI7hL/ZJMJJ/uHrDzkSrLM/WUYfWT16ET7HPMRwynDvw==","signatures":[{"sig":"MEUCIQDwhAyUFBuuQi0bs9Pd5R32NCAzZxJ/S34zdAWo47XlBgIgXvB5qdopaoqtKNqmi1bOs9Kwdci7VPXzbGPgtr2noG0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":654581},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"bd5fb075ac6b8ac1ea595dc2d566b05bca79401b","scripts":{"dev":"tsup --watch","lint":"biome check src/","test":"vitest","build":"tsup","clean":"rm -rf dist","type-check":"tsc --noEmit","test:terraform":"tsx test-terraform.ts","test:variables":"tsx test-variable-interpolation.ts","test:prod-variables":"tsx test-production-variables.ts"},"_npmUser":{"name":"antoineschaller","email":"antoine.schaller@akson.ch"},"_npmVersion":"11.3.0","description":"Google Tag Manager API client for MyArmy","directories":{},"_nodeVersion":"24.2.0","dependencies":{"zod":"^3.24.1","googleapis":"^144.0.0","@akson/api-shared":"^0.1.10","google-auth-library":"^9.15.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.7.0","tsup":"^8.2.4","chalk":"^5.3.0","vitest":"^2.1.8","typescript":"^5.2.2","@biomejs/biome":"^1.8.3","@types/js-yaml":"^4.0.9"},"_npmOperationalInternal":{"tmp":"tmp/api-gtm_1.4.4_1757540224008_0.42588766398066946","host":"s3://npm-registry-packages-npm-production"},"deprecated":"This package has been renamed to @akson/cortex-api-gtm. Please update your dependencies."},"1.4.5":{"name":"@akson/api-gtm","version":"1.4.5","_id":"@akson/api-gtm@1.4.5","maintainers":[{"name":"antoineschaller","email":"antoine.schaller@akson.ch"}],"dist":{"shasum":"0dc983f99720d62f1d95b7b9d99fd08aef92be07","tarball":"https://registry.npmjs.org/@akson/api-gtm/-/api-gtm-1.4.5.tgz","fileCount":4,"integrity":"sha512-hyZYD35XnU7Md08XTwWwIZx1ruRLoT1iXQp+61oJaKdl48X4K/YRV5wdpP0rhGSkzvnuWL2K9UWG6UDJ2JQrYw==","signatures":[{"sig":"MEUCICK/5uYSkmgIFAfYCQDlyOyVjbX3cYIn7kcM8BcHBdrGAiEAxLIct1VARBgph/cBcfpdYlvRKldXT2nugvmHECGRp58=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":654581},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"bd5fb075ac6b8ac1ea595dc2d566b05bca79401b","scripts":{"dev":"tsup --watch","lint":"biome check src/","test":"vitest","build":"tsup","clean":"rm -rf dist","type-check":"tsc --noEmit","test:terraform":"tsx test-terraform.ts","test:variables":"tsx test-variable-interpolation.ts","test:prod-variables":"tsx test-production-variables.ts"},"_npmUser":{"name":"antoineschaller","email":"antoine.schaller@akson.ch"},"_npmVersion":"11.3.0","description":"Google Tag Manager API client for MyArmy","directories":{},"_nodeVersion":"24.2.0","dependencies":{"zod":"^3.24.1","googleapis":"^144.0.0","@akson/api-shared":"^0.1.11","google-auth-library":"^9.15.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.7.0","tsup":"^8.2.4","chalk":"^5.3.0","vitest":"^2.1.8","typescript":"^5.2.2","@biomejs/biome":"^1.8.3","@types/js-yaml":"^4.0.9"},"_npmOperationalInternal":{"tmp":"tmp/api-gtm_1.4.5_1757540792686_0.4590463741539803","host":"s3://npm-registry-packages-npm-production"},"deprecated":"This package has been renamed to @akson/cortex-api-gtm. Please update your dependencies."},"1.4.6":{"name":"@akson/api-gtm","version":"1.4.6","_id":"@akson/api-gtm@1.4.6","maintainers":[{"name":"antoineschaller","email":"antoine.schaller@akson.ch"}],"dist":{"shasum":"ea595b7a630cc472eb888a47d4ec3d7f328db6f2","tarball":"https://registry.npmjs.org/@akson/api-gtm/-/api-gtm-1.4.6.tgz","fileCount":4,"integrity":"sha512-7piHZ9NCjDcSsaA3a8WA5QWJCa6YQ4VbhjDjK4gRwRnHGN2ktu8S1yhaJeYaP6cl1A3ghJ0Khmi/AovuiCXz0w==","signatures":[{"sig":"MEQCIGT+2JF5b0i0RZ2GrnGitOsdxqDDwcWK7/N9ZIcQDzjOAiAlMociA/FCajm6bd/YECv42oqcvxHA5fLR+sXY0y6CYQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":655621},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"bd5fb075ac6b8ac1ea595dc2d566b05bca79401b","scripts":{"dev":"tsup --watch","lint":"biome check src/","test":"vitest","build":"tsup","clean":"rm -rf dist","type-check":"tsc --noEmit","test:terraform":"tsx test-terraform.ts","test:variables":"tsx test-variable-interpolation.ts","test:prod-variables":"tsx test-production-variables.ts"},"_npmUser":{"name":"antoineschaller","email":"antoine.schaller@akson.ch"},"_npmVersion":"11.3.0","description":"Google Tag Manager API client for MyArmy","directories":{},"_nodeVersion":"24.2.0","dependencies":{"zod":"^3.24.1","googleapis":"^144.0.0","@akson/api-shared":"^0.1.11","google-auth-library":"^9.15.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.7.0","tsup":"^8.2.4","chalk":"^5.3.0","vitest":"^2.1.8","typescript":"^5.2.2","@biomejs/biome":"^1.8.3","@types/js-yaml":"^4.0.9"},"_npmOperationalInternal":{"tmp":"tmp/api-gtm_1.4.6_1757541031140_0.6627489617075684","host":"s3://npm-registry-packages-npm-production"},"deprecated":"This package has been renamed to @akson/cortex-api-gtm. Please update your dependencies."},"1.5.0":{"name":"@akson/api-gtm","version":"1.5.0","keywords":["gtm","google-tag-manager","analytics","mcp","model-context-protocol","myarmy"],"_id":"@akson/api-gtm@1.5.0","maintainers":[{"name":"antoineschaller","email":"antoine.schaller@akson.ch"}],"bin":{"akson-gtm-mcp":"dist/mcp-cli.js"},"dist":{"shasum":"041a3eebab8777e5172f34b12b3c0327434a19ec","tarball":"https://registry.npmjs.org/@akson/api-gtm/-/api-gtm-1.5.0.tgz","fileCount":6,"integrity":"sha512-LQas4Zp2aKTknBLLLgLewgduvOjZnTL3Kr1EqtnbDWfYTyGJeBT5opGURrR7aJnGayeibWjBuknjHrLyQyKFhw==","signatures":[{"sig":"MEUCIQDJCGh9dZxWLg1cn96OmSW7PNlCbG8WrGnbl2/fHdNcNwIgeH04SfbxLHlneDEG9nDiAIxuGeXrqAsUMLCa/0fV+Us=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1069297},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"a122678b11c6b700795a2a629fb56efdcdb4a72f","scripts":{"dev":"tsup --watch","lint":"biome check src/","test":"vitest","build":"tsup","clean":"rm -rf dist","type-check":"tsc --noEmit","test:terraform":"tsx test-terraform.ts","test:variables":"tsx test-variable-interpolation.ts","test:prod-variables":"tsx test-production-variables.ts"},"_npmUser":{"name":"antoineschaller","email":"antoine.schaller@akson.ch"},"_npmVersion":"11.5.1","description":"Google Tag Manager API client and MCP server for MyArmy","directories":{},"_nodeVersion":"24.7.0","dependencies":{"zod":"^3.24.1","googleapis":"^144.0.0","@akson/api-shared":"^0.1.11","google-auth-library":"^9.15.0","@modelcontextprotocol/sdk":"^0.6.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.7.0","tsup":"^8.2.4","chalk":"^5.3.0","vitest":"^2.1.8","typescript":"^5.2.2","@biomejs/biome":"^1.8.3","@types/js-yaml":"^4.0.9"},"_npmOperationalInternal":{"tmp":"tmp/api-gtm_1.5.0_1757669313410_0.747822864529287","host":"s3://npm-registry-packages-npm-production"},"deprecated":"This package has been renamed to @akson/cortex-api-gtm. Please update your dependencies."},"1.5.1":{"name":"@akson/api-gtm","version":"1.5.1","keywords":["gtm","google-tag-manager","analytics","mcp","model-context-protocol","myarmy"],"_id":"@akson/api-gtm@1.5.1","maintainers":[{"name":"antoineschaller","email":"antoine.schaller@akson.ch"}],"bin":{"akson-gtm-mcp":"dist/mcp-cli.js"},"dist":{"shasum":"111d8a24280db2c6534ea3910f37480f14d0adf5","tarball":"https://registry.npmjs.org/@akson/api-gtm/-/api-gtm-1.5.1.tgz","fileCount":6,"integrity":"sha512-6ua3cq7DlLCRiRFIiHiThdactNVe9Ku7T6/vSuB/p6+E3n4FFXMrlTsmgabJRDLZtKxoTA0EXcS1CqXNJUyarg==","signatures":[{"sig":"MEUCIDZYMdQVdnfs38WAgUXViuJ18i92H2DL4votlxXOlg3iAiEA7OnYRKN0WbBvdlNQIsLHKPbA9EtsKhPrrgmpcVjWR8U=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1069312},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"a122678b11c6b700795a2a629fb56efdcdb4a72f","scripts":{"dev":"tsup --watch","lint":"biome check src/","test":"vitest","build":"tsup","clean":"rm -rf dist","type-check":"tsc --noEmit","test:terraform":"tsx test-terraform.ts","test:variables":"tsx test-variable-interpolation.ts","test:prod-variables":"tsx test-production-variables.ts"},"_npmUser":{"name":"antoineschaller","email":"antoine.schaller@akson.ch"},"_npmVersion":"11.5.1","description":"Google Tag Manager API client and MCP server for MyArmy","directories":{},"_nodeVersion":"24.7.0","dependencies":{"zod":"^3.24.1","googleapis":"^144.0.0","@akson/api-shared":"^0.1.11","google-auth-library":"^9.15.0","@modelcontextprotocol/sdk":"^0.6.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.7.0","tsup":"^8.2.4","chalk":"^5.3.0","vitest":"^2.1.8","typescript":"^5.2.2","@biomejs/biome":"^1.8.3","@types/js-yaml":"^4.0.9"},"_npmOperationalInternal":{"tmp":"tmp/api-gtm_1.5.1_1757669874509_0.4847519889517844","host":"s3://npm-registry-packages-npm-production"},"deprecated":"This package has been renamed to @akson/cortex-api-gtm. Please update your dependencies."}},"time":{"created":"2025-08-29T15:00:36.681Z","modified":"2025-09-12T15:50:25.229Z","1.0.0":"2025-08-29T15:00:37.040Z","1.0.1":"2025-08-31T14:23:18.554Z","1.1.0":"2025-09-02T12:49:07.790Z","1.2.0":"2025-09-02T16:32:41.315Z","1.3.0":"2025-09-02T17:49:00.693Z","1.4.0":"2025-09-02T22:34:04.673Z","1.4.1":"2025-09-09T07:41:42.073Z","1.4.2":"2025-09-10T21:09:18.436Z","1.4.3":"2025-09-10T21:12:27.295Z","1.4.4":"2025-09-10T21:37:04.300Z","1.4.5":"2025-09-10T21:46:32.979Z","1.4.6":"2025-09-10T21:50:31.400Z","1.5.0":"2025-09-12T09:28:33.608Z","1.5.1":"2025-09-12T09:37:54.828Z"},"keywords":["gtm","google-tag-manager","analytics","mcp","model-context-protocol","myarmy"],"description":"Google Tag Manager API client and MCP server for MyArmy","maintainers":[{"name":"antoineschaller","email":"antoine.schaller@akson.ch"}],"readme":"# @akson/api-gtm - Google Tag Manager API Client\n\n**Production-ready GTM API client with Terraform-style configuration management.**\n\n## 🚀 Status: FULLY IMPLEMENTED & TESTED ✅\n\n**✅ Complete Terraform-like Workflow**\n\n-   **Plan**: Preview changes before applying (`npm run gtm:plan`)\n-   **Apply**: Execute changes atomically (`npm run gtm:apply`)\n-   **State**: Track resource state with drift detection\n-   **Rollback**: Transaction-based operations with automatic rollback\n-   **Validation**: Configuration syntax and dependency checking\n\n**✅ Test Results (2025-01-09):**\n\n-   **85 operations** executed successfully in dry-run mode\n-   **Test workspace isolation** working perfectly\n-   **Container ID resolution** (GTM-XXXXX ↔ numeric) working\n-   **Zero failures** in comprehensive test suite\n\n## 🎯 Quick Start\n\n```bash\n# Install the package\nnpm install @akson/api-gtm\n\n# Configure environment\nexport GTM_CONTAINER_ID=\"GTM-XXXXXXX\"  # or numeric ID\nexport GOOGLE_SERVICE_ACCOUNT_KEY_FILE=\"path/to/service-key.json\"\n\n# Terraform-style workflow\nnpm run gtm:validate    # Validate configuration syntax\nnpm run gtm:plan        # Preview changes (should show 0 for stable config)\nnpm run gtm:apply       # Apply changes to workspace\nnpm run gtm:status      # Check current workspace state\nnpm run gtm:backup      # Backup workspace for safety\n\n# Full testing suite\nnpm run test:terraform  # End-to-end test on isolated workspace\n```\n\n## 📚 Documentation\n\n### **🎯 Essential Reading**\n\n| Document                                                           | Purpose                                                          | Status         |\n| ------------------------------------------------------------------ | ---------------------------------------------------------------- | -------------- |\n| [**GTM_API_LEARNINGS.md**](./GTM_API_LEARNINGS.md)                 | **Master guide** - Complete GTM API best practices & limitations | ✅ **Current** |\n| [**GTM_TROUBLESHOOTING_GUIDE.md**](./GTM_TROUBLESHOOTING_GUIDE.md) | **Troubleshooting** - Issue resolution & debugging steps         | ✅ **Current** |\n| [**GTM_TAG_TYPES_GUIDE.md**](./GTM_TAG_TYPES_GUIDE.md)             | **Reference** - Complete tag type mappings & parameters          | ✅ **Current** |\n\n### **⚡ Key Features**\n\n-   **✅ Zero-drift Configuration**: GTM workspace matches YAML config exactly (0 plan changes)\n-   **✅ Terraform-style Workflow**: `validate` → `plan` → `apply` → `status`\n-   **✅ State Management**: Tracks resource state with fingerprint-based drift detection\n-   **✅ Transaction Support**: Atomic operations with automatic rollback on failure\n-   **✅ Dependency Resolution**: Topological sorting for proper resource order\n-   **✅ Container ID Resolution**: Handles GTM-XXXXX ↔ numeric format conversion\n-   **✅ Workspace Isolation**: Safe testing with dedicated test workspaces\n-   **✅ Tag Type Accuracy**: Use `gaawe` for GA4 events, `awct` for Google Ads, `gaawc` for GA4 config\n-   **⚠️ Parameter Limitations**: GTM API silently rejects enhanced conversion parameters\n\n## 🚀 Configuration Management\n\n### **Perfect Workflow**\n\n```bash\n# 1. Validate syntax\nnpm run gtm:validate\n\n# 2. Preview changes\nnpm run gtm:plan\n# Output: \"No changes. Your infrastructure matches the configuration.\"\n\n# 3. Apply changes (if any)\nnpm run gtm:apply\n\n# 4. Verify state\nnpm run gtm:status\n```\n\n### **Tag Configuration Examples**\n\n#### ✅ **Google Ads Conversion (Works Perfect)**\n\n```yaml\n- name: Google Ads - Form Submission Conversion\n  type: awct\n  parameter:\n      - key: conversionId\n        type: TEMPLATE\n        value: ${var.google_ads_id}\n      - key: conversionLabel\n        type: TEMPLATE\n        value: ${var.conversion_labels.form_submission}\n      - key: enableNewCustomerReporting\n        type: BOOLEAN\n        value: 'true'\n```\n\n#### ✅ **GA4 Event Tag (Perfect Sync)**\n\n```yaml\n- name: GA4 - Lead Event\n  type: gaawe\n  parameter:\n      - key: measurementIdOverride\n        type: TEMPLATE\n        value: ${var.ga4_measurement_id}\n      - key: eventName\n        type: TEMPLATE\n        value: generate_lead\n      - key: eventSettingsTable\n        type: LIST\n        list:\n            - type: MAP\n              map:\n                  - key: parameter\n                    type: TEMPLATE\n                    value: lead_score\n                  - key: parameterValue\n                    type: TEMPLATE\n                    value: '{{Lead Score}}'\n```\n\n## 🚨 Critical GTM API Limitations\n\n### **❌ Parameters That DON'T Work**\n\n```yaml\n# These parameters are silently rejected by GTM API:\n- key: enableEnhancedConversions # Google Ads enhancement\n- key: enhancedConversionData # Complex MAP structures\n- key: eventParameters # Use eventSettingsTable instead\n- key: conversionCurrency # Currency specification\n```\n\n### **✅ Parameters That Work Perfectly**\n\n```yaml\n# Core tracking parameters (100% reliable):\n- key: conversionId\n- key: conversionLabel\n- key: conversionValue\n- key: enableNewCustomerReporting\n- key: measurementIdOverride # GA4 events\n- key: eventSettingsTable # GA4 event parameters\n```\n\n## 🏗️ Terraform Architecture Implementation\n\n### **Core Components**\n\n-   ✅ **StateManager**: Terraform-style state management with resource tracking\n-   ✅ **ConfigParser**: YAML configuration loading and validation\n-   ✅ **Planner**: Generates execution plans showing create/update/delete operations\n-   ✅ **ApplyEngine**: Executes changes with transaction support and rollback\n-   ✅ **ResourceGraph**: Manages dependencies and execution order\n-   ✅ **ContainerIdResolver**: Handles GTM-XXXXX ↔ numeric format conversion\n\n### **Workflow Features**\n\n-   ✅ **Plan Generation**: Preview all changes before applying\n-   ✅ **Atomic Operations**: All-or-nothing transactions with rollback\n-   ✅ **State Persistence**: Track resource state across operations\n-   ✅ **Drift Detection**: Identify configuration vs workspace differences\n-   ✅ **Safe Testing**: Isolated test workspaces for validation\n-   ✅ **Error Recovery**: Comprehensive error handling and recovery\n\n## 🎯 Success Metrics\n\n**Achieved Results:**\n\n-   **95% Reduction**: From 65+ false plan changes to 0\n-   **100% Sync**: Configuration matches workspace perfectly\n-   **Production-Ready**: Terraform-style workflow fully operational\n-   **Zero Maintenance**: No drift, no manual interventions needed\n\n## 🆘 Need Help?\n\n### **Common Issues**\n\n| Issue                        | Solution                                                                 |\n| ---------------------------- | ------------------------------------------------------------------------ |\n| **Plan shows 50+ changes**   | Wrong tag types - see [GTM_TAG_TYPES_GUIDE.md](./GTM_TAG_TYPES_GUIDE.md) |\n| **Parameters don't persist** | API limitations - see [GTM_API_LEARNINGS.md](./GTM_API_LEARNINGS.md)     |\n| **Authentication fails**     | Check service account key path and permissions                           |\n| **Container not found**      | Use numeric container ID (e.g., `226061083`)                             |\n\n### **Getting Support**\n\n1. **Check Documentation First**: All known issues and solutions are documented\n2. **Validate Configuration**: Run `gtm validate` to check syntax\n3. **Review Logs**: API errors are logged with detailed messages\n4. **Consult Learning Docs**: Most issues are covered in the learning guides\n\n---\n\n## 📊 **Status: PRODUCTION-READY** 🚀\n\nThe GTM infrastructure-as-code workflow is **fully operational** with zero-drift configuration management.\n\n**Last Updated**: 2025-01-09  \n**Version**: 1.4.1 (Terraform Implementation Complete)  \n**Status**: ✅ **FULLY IMPLEMENTED & TESTED**  \n**Test Results**: [GTM_TERRAFORM_TEST_RESULTS.md](./GTM_TERRAFORM_TEST_RESULTS.md)\n\n---\n\n## Legacy User Stories\n\n### Container Management Stories\n\n**As a Digital Marketing Manager**, I want to programmatically access my GTM containers, so that I can audit and manage multiple containers at scale.\n\n**As a DevOps Engineer**, I want to authenticate with GTM API using service accounts, so that I can automate GTM operations in CI/CD pipelines.\n\n**As a Marketing Analyst**, I want to list all available workspaces in a container, so that I can identify staging vs production environments.\n\n**As a Technical Lead**, I want to select and switch between workspaces, so that I can manage different deployment environments safely.\n\n### Tag Management Stories\n\n**As a Growth Marketing Manager**, I want to create conversion tracking tags programmatically, so that I can scale campaign attribution across multiple properties.\n\n**As a Marketing Operations Specialist**, I want to list all existing tags in a workspace, so that I can audit current tracking implementation.\n\n**As a Performance Marketing Manager**, I want to update conversion labels in existing tags, so that I can dynamically map campaigns to tracking codes.\n\n**As a Marketing Automation Engineer**, I want to create custom HTML tags, so that I can deploy third-party scripts and pixels programmatically.\n\n### Variable Management Stories\n\n**As a Technical Marketing Manager**, I want to create GTM variables programmatically, so that I can standardize data layer implementations across properties.\n\n**As a Marketing Developer**, I want to create constant variables for campaign IDs, so that I can centralize configuration management.\n\n**As a Data Analyst**, I want to create data layer variables, so that I can capture custom event parameters from websites.\n\n**As a Marketing Engineer**, I want to create custom JavaScript variables, so that I can implement complex tracking logic.\n\n### Trigger Management Stories\n\n**As a Conversion Optimization Manager**, I want to create custom event triggers, so that I can track specific user interactions.\n\n**As a Marketing Analyst**, I want to create pageview triggers with conditions, so that I can segment tracking by page types or user properties.\n\n**As a Growth Hacker**, I want to list all triggers in a workspace, so that I can understand current event tracking setup.\n\n### Publishing & Deployment Stories\n\n**As a Marketing Technology Manager**, I want to publish workspace changes to production, so that I can deploy tracking updates safely.\n\n**As a DevOps Engineer**, I want to create versioned releases with notes, so that I can maintain deployment history and rollback capabilities.\n\n**As a Campaign Manager**, I want to bulk update conversion labels and immediately publish, so that I can quickly activate new campaigns.\n\n### Integration & Automation Stories\n\n**As a Marketing Operations Director**, I want to integrate GTM management with CI/CD pipelines, so that I can automate tracking deployment alongside application releases.\n\n**As a Multi-Brand Marketing Manager**, I want to replicate tag configurations across multiple containers, so that I can maintain consistent tracking across brand properties.\n\n**As a Agency Technical Director**, I want to audit client GTM setups programmatically, so that I can ensure compliance and best practices across client accounts.\n\n### Monitoring & Maintenance Stories\n\n**As a Marketing Technology Analyst**, I want to validate GTM configuration remotely, so that I can monitor tracking health without manual checks.\n\n**As a Performance Marketing Director**, I want to receive alerts when GTM configurations change, so that I can prevent tracking disruptions.\n\n**As a Data Governance Manager**, I want to export GTM configurations for backup, so that I can maintain disaster recovery procedures.\n\n## Installation\n\n```bash\nnpm install @akson/api-gtm\n```\n\n## Quick Start\n\n```typescript\nimport { GTMClient } from '@akson/api-gtm';\n\nconst client = new GTMClient({\n\tconfig: {\n\t\taccountId: 'your-account-id',\n\t\tcontainerId: 'your-container-id',\n\t\tserviceAccount: {\n\t\t\tkeyFile: 'path/to/service-account.json',\n\t\t\temail: 'service-account@project.iam.gserviceaccount.com',\n\t\t},\n\t},\n});\n\n// Authenticate and select workspace\nawait client.authenticate();\nawait client.selectWorkspace();\n\n// Create conversion tracking tag\nawait client.createTag({\n\tname: 'GA4 Purchase Conversion',\n\ttype: 'gaawe',\n\tconversionId: 'AW-123456789',\n\tconversionLabel: 'abcd1234',\n\ttriggerIds: ['trigger-id'],\n});\n\n// Publish changes\nawait client.publishWorkspace({\n\tversionName: 'Q1 2025 Campaign Launch',\n\tnotes: 'Added purchase conversion tracking',\n});\n```\n\n## Configuration\n\nThe client loads configuration from multiple sources:\n\n1. Constructor options\n2. Environment variables\n3. Configuration file\n\n### Environment Variables\n\n```bash\nGTM_ACCOUNT_ID=your-account-id\nGTM_CONTAINER_ID=your-container-id\nGTM_SERVICE_ACCOUNT_EMAIL=service-account@project.iam.gserviceaccount.com\nGTM_SERVICE_ACCOUNT_KEY_FILE=path/to/key.json\n```\n\n### Configuration File\n\nCreate `gtm-config.json`:\n\n```json\n{\n\t\"accountId\": \"your-account-id\",\n\t\"containerId\": \"your-container-id\",\n\t\"serviceAccount\": {\n\t\t\"email\": \"service-account@project.iam.gserviceaccount.com\",\n\t\t\"keyFile\": \"path/to/service-account.json\"\n\t}\n}\n```\n\n## API Reference\n\n### Authentication\n\n```typescript\n// Authenticate with service account\nconst authResult = await client.authenticate();\nif (!authResult.success) {\n\tthrow new Error(authResult.error);\n}\n```\n\n### Container Operations\n\n```typescript\n// Get container information\nconst container = await client.getContainer();\n\n// List workspaces\nconst workspaces = await client.listWorkspaces();\n\n// Select workspace\nawait client.selectWorkspace('workspace-id');\n```\n\n### Variable Operations\n\n```typescript\n// Create constant variable\nawait client.createVariable({\n\tname: 'GA4 Measurement ID',\n\ttype: 'Constant',\n\tvalue: 'G-XXXXXXXXXX',\n});\n\n// Create data layer variable\nawait client.createVariable({\n\tname: 'Purchase Value',\n\ttype: 'Data Layer Variable',\n\tdataLayerVariableName: 'purchase.value',\n\tdefaultValue: '0',\n});\n\n// List variables\nconst variables = await client.listVariables();\n```\n\n### Trigger Operations\n\n```typescript\n// Create custom event trigger\nawait client.createTrigger({\n\tname: 'Form Submission',\n\ttype: 'customEvent',\n\teventName: 'form_submit',\n\tconditions: [\n\t\t{\n\t\t\tvariable: '{{Page URL}}',\n\t\t\toperator: 'contains',\n\t\t\tvalue: '/contact',\n\t\t},\n\t],\n});\n\n// List triggers\nconst triggers = await client.listTriggers();\n```\n\n### Tag Operations\n\n```typescript\n// Create Google Ads conversion tag\nawait client.createTag({\n\tname: 'Form Conversion',\n\ttype: 'gaawe',\n\tconversionId: 'AW-123456789',\n\tconversionLabel: 'abcd1234',\n\tconversionValue: '100',\n\tcurrencyCode: 'USD',\n\ttriggerIds: ['trigger-id'],\n});\n\n// Create HTML tag\nawait client.createTag({\n\tname: 'Facebook Pixel',\n\ttype: 'html',\n\thtml: '<script>fbq(\"track\", \"Lead\");</script>',\n\ttriggerIds: ['trigger-id'],\n});\n\n// List tags\nconst tags = await client.listTags();\n\n// Update conversion labels\nawait client.updateConversionLabels({\n\tformLabel: 'new-form-label',\n\twhatsappLabel: 'new-whatsapp-label',\n});\n```\n\n### Publishing\n\n```typescript\n// Publish workspace to production\nconst publishResult = await client.publishWorkspace({\n\tversionName: 'Campaign Update v1.2',\n\tnotes: 'Updated conversion labels for Q1 campaigns',\n});\n\nconsole.log(`Published version: ${publishResult.versionId}`);\nconsole.log(`Live URL: ${publishResult.publishedContainerVersionUrl}`);\n```\n\n## Error Handling\n\nAll methods return `GTMOperationResult<T>` with consistent error handling:\n\n```typescript\nconst result = await client.createTag(tagConfig);\n\nif (result.success) {\n\tconsole.log('Tag created:', result.data);\n\tif (result.created) {\n\t\tconsole.log('New tag was created');\n\t} else if (result.existing) {\n\t\tconsole.log('Tag already existed');\n\t}\n} else {\n\tconsole.error('Error creating tag:', result.error);\n}\n```\n\n## Advanced Usage\n\n### Batch Operations\n\n```typescript\n// Create multiple variables\nconst variables = [\n\t{ name: 'GA4 ID', type: 'Constant', value: 'G-XXXXXXXXXX' },\n\t{ name: 'GTM ID', type: 'Constant', value: 'GTM-XXXXXXX' },\n\t{ name: 'Conversion ID', type: 'Constant', value: 'AW-123456789' },\n];\n\nfor (const variable of variables) {\n\tawait client.createVariable(variable);\n}\n```\n\n### Environment-Based Configuration\n\n```typescript\nconst isDev = process.env.NODE_ENV === 'development';\n\nconst client = new GTMClient({\n\tconfig: {\n\t\tcontainerId: isDev ? 'dev-container-id' : 'prod-container-id',\n\t},\n\tdebug: isDev,\n});\n```\n\n### Integration with CI/CD\n\n```typescript\n// Example GitHub Actions integration\nasync function deployGTMChanges() {\n\tconst client = new GTMClient();\n\n\tawait client.authenticate();\n\tawait client.selectWorkspace();\n\n\t// Update conversion labels with campaign data\n\tawait client.updateConversionLabels({\n\t\tformLabel: process.env.FORM_CONVERSION_LABEL,\n\t\twhatsappLabel: process.env.WHATSAPP_CONVERSION_LABEL,\n\t});\n\n\t// Publish to production\n\tconst result = await client.publishWorkspace({\n\t\tversionName: `Deploy ${process.env.GITHUB_SHA}`,\n\t\tnotes: `Automated deployment from commit ${process.env.GITHUB_SHA}`,\n\t});\n\n\tif (!result.success) {\n\t\tthrow new Error(`Deployment failed: ${result.error}`);\n\t}\n\n\tconsole.log(`✅ GTM deployed successfully: ${result.versionId}`);\n}\n```\n\n## TypeScript Support\n\nFull TypeScript definitions included:\n\n```typescript\nimport type {\n\tGTMContainer,\n\tGTMWorkspace,\n\tGTMVariable,\n\tGTMTrigger,\n\tGTMTag,\n\tVariableConfig,\n\tTriggerConfig,\n\tTagConfig,\n\tPublishOptions,\n\tGTMOperationResult,\n\tGTMCreateResult,\n\tGTMListResult,\n\tGTMPublishResult,\n} from '@akson/api-gtm';\n```\n\n## Requirements\n\n-   Node.js ≥18.0.0\n-   Google Tag Manager API access\n-   Service account with Tag Manager permissions\n-   Valid GTM container with appropriate permissions\n\n## License\n\nMIT\n","readmeFilename":"README.md"}