{"_id":"medusa-fulfillment-shippo","_rev":"76-d675b4718f78858bc337242471b3ff33","name":"medusa-fulfillment-shippo","dist-tags":{"latest":"1.1.2"},"versions":{"0.1.0":{"name":"medusa-fulfillment-shippo","version":"0.1.0","description":"Shippo fulfillment plugin for medusa","author":{"name":"Maciej Derulski"},"license":"MIT","scripts":{"build":"babel src -d . --ignore **/__tests__","prepare":"cross-env NODE_ENV=production npm run build","watch":"babel -w src --out-dir . --ignore **/__tests__","test":"jest"},"dependencies":{"body-parser":"^1.19.0","express":"^4.17.1","medusa-core-utils":"^1.1.30","shippo":"git+https://github.com/macder/shippo-node-client.git","@babel/plugin-transform-classes":"^7.9.5","@babel/plugin-transform-instanceof":"^7.8.3"},"peerDependencies":{"medusa-interfaces":"1.x"},"repository":{"type":"git","url":"git+https://github.com/macder/medusa-fulfillment-shippo.git"},"keywords":["medusa","medusa-plugin","medusa-fulfillment","medusa-shippo"],"devDependencies":{"@babel/cli":"^7.7.5","@babel/core":"^7.7.5","@babel/node":"^7.7.4","@babel/plugin-proposal-class-properties":"^7.7.4","@babel/plugin-transform-runtime":"^7.7.6","@babel/preset-env":"^7.7.5","@babel/register":"^7.7.4","@babel/runtime":"^7.9.6","client-sessions":"^0.8.0","cross-env":"^5.2.1","eslint":"^6.8.0","jest":"^25.5.2","medusa-test-utils":"^1.1.33"},"gitHead":"e75ee66aef494422b0b444d1d744aff2953303b0","bugs":{"url":"https://github.com/macder/medusa-fulfillment-shippo/issues"},"homepage":"https://github.com/macder/medusa-fulfillment-shippo#readme","_id":"medusa-fulfillment-shippo@0.1.0","_nodeVersion":"16.15.1","_npmVersion":"8.11.0","dist":{"integrity":"sha512-/qij+PK/2blduWlXVUhWqjcwzo78w8J+E3h/S+x8cFxX4O3/apLIbmSKMZ67lHHzf8x71idO4Ypr4EDGpAntGQ==","shasum":"9a39664855a0d1f189f5283ce8d26d7e9dd3137f","tarball":"https://registry.npmjs.org/medusa-fulfillment-shippo/-/medusa-fulfillment-shippo-0.1.0.tgz","fileCount":14,"unpackedSize":101907,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQChQYBazqt7J7ytVsUWSY3r2fGaKFPTzn5WSKggNkyjvwIhAJRo7DGMulscxA4ltKbsmInaNNDweTMpoTdBJ0zU6BQJ"}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJiqD76ACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmpmgQ//aFx2uy1fEmBwxS3DOhh3yoUwL12QzHaJA6jkCsJnBfClh+zx\r\nI40z1V8RBrT+Bef23KBR7Nf5bday/wPvjLNmAQ7f9TmUa3AaMNtnQlPVaXw7\r\nog7HPDR7Lxh63tMnaZzkchx62AOP+0Ym8IqYc7Q+SwLIvqvB56y9vj4qvYf3\r\nzumnoXvFsQ/M4G1oMqmBjh20aoq2gQ0l4v+aLQ8rhyUdHxPzqyIBuqSkOH8Q\r\nCss/KUCRJ+NXST8ERTV++1SYLXxwd3pNfO2WqshdTKCCLw+tWdTSNFuLyO1N\r\nQdNWIda1+peatRIN9rEOkj1guPBQhX2YA017FAU/gIsktKzF9LE0mSKD2rdV\r\nxajrQFrSfaM4vy/ZGVRhbnJQxJo0uqbCh5zBjV+Vy9ugtpuiubPPJoS5V+lf\r\n+PnOz1ZqkBHQT1KT4mj12UZn99jJWLfFHbmhPYmRO4PgGeBiqlJoGNhtKMcN\r\n06YIgT1WK2wzvVeq2AUr2oJRAiz/4Ez6r/N9/WIQvaq8PMIRUJarxTD6qBAM\r\nD95TsQL/3k0DTIgsiFBEQXCfdSuMi1B0oBwmbjFY4fKg3jfYX0aMgSD6TNOI\r\nVtJftlFL4Rw5XpGQgsVuKx0lmToqgt6Zx8UQcUb/SNP60Ud1U0I4Kt3Tf1Bh\r\nZnPeZL3Fy7tt1wUCk8v0O1h1M3LFFPdZiuI=\r\n=1KFi\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"macder","email":"maciej@derulski.com"},"directories":{},"maintainers":[{"name":"macder","email":"maciej@derulski.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/medusa-fulfillment-shippo_0.1.0_1655193337867_0.29528616508444294"},"_hasShrinkwrap":false},"0.1.1":{"name":"medusa-fulfillment-shippo","version":"0.1.1","description":"Shippo fulfillment plugin for medusa","author":{"name":"Maciej Derulski"},"license":"MIT","scripts":{"build":"babel src -d . --ignore **/__tests__","prepare":"cross-env NODE_ENV=production npm run build","watch":"babel -w src --out-dir . --ignore **/__tests__","test":"jest"},"dependencies":{"body-parser":"^1.19.0","express":"^4.17.1","medusa-core-utils":"^1.1.30","shippo":"git+https://github.com/macder/shippo-node-client.git","@babel/plugin-transform-classes":"^7.9.5","@babel/plugin-transform-instanceof":"^7.8.3"},"peerDependencies":{"medusa-interfaces":"1.x"},"repository":{"type":"git","url":"git+https://github.com/macder/medusa-fulfillment-shippo.git"},"keywords":["medusa","medusa-plugin","medusa-fulfillment","medusa-shippo"],"devDependencies":{"@babel/cli":"^7.7.5","@babel/core":"^7.7.5","@babel/node":"^7.7.4","@babel/plugin-proposal-class-properties":"^7.7.4","@babel/plugin-transform-runtime":"^7.7.6","@babel/preset-env":"^7.7.5","@babel/register":"^7.7.4","@babel/runtime":"^7.9.6","client-sessions":"^0.8.0","cross-env":"^5.2.1","eslint":"^6.8.0","jest":"^25.5.2","medusa-test-utils":"^1.1.33"},"gitHead":"679f4bd9f3e20142bfc7e980051c520ca1bfb0b0","bugs":{"url":"https://github.com/macder/medusa-fulfillment-shippo/issues"},"homepage":"https://github.com/macder/medusa-fulfillment-shippo#readme","_id":"medusa-fulfillment-shippo@0.1.1","_nodeVersion":"16.15.1","_npmVersion":"8.11.0","dist":{"integrity":"sha512-If3c9hoXyJS3+yftZqa71I+UemSgG/ZXRzCpgrQoPTEDZyQyJpy1zGLVsYKBCoKcJKqEOA/c4vREZlp5Gv4rmw==","shasum":"64a17d68d2901272dcb746ce4309e3d7df3a5a65","tarball":"https://registry.npmjs.org/medusa-fulfillment-shippo/-/medusa-fulfillment-shippo-0.1.1.tgz","fileCount":14,"unpackedSize":102640,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDuLXBi/txhFlitAb1PDUpIxsIc2Vl3iqTIn4smK4H8tQIgR5WSN8lhSChH75n1UOthIiFDApXPnz3ICXJlm6mWNt0="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJiqUqSACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmr8PA//SlrkkQj+t0iWRNw95tIWlsgcW/fC4x0s+BI79ysdLpEQaTbo\r\nD1wKeV/NMZmns/kc9Mu0WaOhRL9qoj5bYkNoHVid+vQKmMIyqrR1m3ZApvPU\r\nvWrpQLb5jCItnb7oKOV+Q6bTdHqH6HLPqjUP5ZRmCk9W79xcxTnvUm7mxANz\r\nSanlqiZ7liJHhli0kqakK2G1KvbN9ruoc74hN7aNHAkNuAU8ucmXKXsXNqmX\r\nluI0R0AfhHHkx5iD+9yMZWOZstlS0bv7pCre+a+fRJ0k+gJ1Avl7DEEhUsWS\r\n1ZZeFHjF/6PDKn7TD/tPCEAzJWe5z2eBSkgjcZ/0IxzXX2+kO3mO6fIsKz9r\r\niQHcAVWjBXxj/2kXOYReB8EHzlLpr2rLgJ1UlxeH76XuUFOF/qhqzK5DvUP+\r\nXkklnjcMctk96a6MvvY6qgqqDzXVfPAzdMottW7q+yCNA8gyGYMmxafSOIiS\r\nV+5I6hzUKq0SVIWoASvfQ6PU5mOvBubmmLELP5Y4KpqXGvLFKmvnWARlG1eA\r\nnuG44wl8upXFLs/37pwQxpe9a+VaCVM2QNFmt5YlXmujnlwcjGxzuupNz62Y\r\n13aUbOJj3L4HUvBmUlR3MIqaN/ZPuE4McEfLOprnrZt/YN2Dcukmi+0nKQFR\r\nxunHlmXfjj+hhPFh1rTcMDQH5G9M0CegBbY=\r\n=5/GW\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"macder","email":"maciej@derulski.com"},"directories":{},"maintainers":[{"name":"macder","email":"maciej@derulski.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/medusa-fulfillment-shippo_0.1.1_1655261842653_0.27034119394240363"},"_hasShrinkwrap":false},"0.1.2":{"name":"medusa-fulfillment-shippo","version":"0.1.2","description":"Shippo fulfillment plugin for medusa","author":{"name":"Maciej Derulski"},"license":"MIT","scripts":{"build":"babel src -d . --ignore **/__tests__","prepare":"cross-env NODE_ENV=production npm run build","watch":"babel -w src --out-dir . --ignore **/__tests__","test":"jest"},"dependencies":{"body-parser":"^1.19.0","express":"^4.17.1","medusa-core-utils":"^1.1.30","shippo":"git+https://github.com/macder/shippo-node-client.git","@babel/plugin-transform-classes":"^7.9.5","@babel/plugin-transform-instanceof":"^7.8.3"},"peerDependencies":{"medusa-interfaces":"1.x"},"repository":{"type":"git","url":"git+https://github.com/macder/medusa-fulfillment-shippo.git"},"keywords":["medusa","medusa-plugin","medusa-fulfillment","medusa-shippo"],"devDependencies":{"@babel/cli":"^7.7.5","@babel/core":"^7.7.5","@babel/node":"^7.7.4","@babel/plugin-proposal-class-properties":"^7.7.4","@babel/plugin-transform-runtime":"^7.7.6","@babel/preset-env":"^7.7.5","@babel/register":"^7.7.4","@babel/runtime":"^7.9.6","client-sessions":"^0.8.0","cross-env":"^5.2.1","eslint":"^6.8.0","jest":"^25.5.2","medusa-test-utils":"^1.1.33"},"gitHead":"295796cec74f734f38f6bc53b5cb3e3a4256baf4","bugs":{"url":"https://github.com/macder/medusa-fulfillment-shippo/issues"},"homepage":"https://github.com/macder/medusa-fulfillment-shippo#readme","_id":"medusa-fulfillment-shippo@0.1.2","_nodeVersion":"16.15.1","_npmVersion":"8.11.0","dist":{"integrity":"sha512-4hGQJT8Gnb7nE6NmsPEB3JT7dbeeSnykOsj7lydP/Q3Lxwzqh+musn0PkMh2gNIF5Jv7CEDn8E7XT3DANNDKXg==","shasum":"0c6441e58c3e3851142d0556ceaa340f617b5989","tarball":"https://registry.npmjs.org/medusa-fulfillment-shippo/-/medusa-fulfillment-shippo-0.1.2.tgz","fileCount":14,"unpackedSize":103172,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCsv3bc/suWVA5ZyUA3qaacx7T11J/lYDm0q3yOt+vsjgIhALVH7tCjNR0VksviJSS7Kfe5jluc1ixSZIULSJbZL85z"}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJiqXcCACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmo7Zw/6Aji3mx64SxvwRgrvCIszCnxeM8VZF+YFNR9QH/fTr4YJUuMv\r\nGHGLVZ2i/0RCoAwZGCc9dNvv7MFtlobtCFirLUUjY0ma4/wgbJFccLbQ7+as\r\nQ0FAqqcKGWF5RW/GS7LrIZmlBZEnIZjPwIM4SG3QIBL+YdvrMNwI3VgmJvyL\r\nJZsyrObdAxuqjHaPsRe4CqyXKjSnN0VOFEz7w0cU73pQ6SAvJllpTZM9TpJx\r\nbLdn4MFGPH5Qi80YTYTQEneimHH3CRsJxYIm+3AQOCMegsrHlju+NTHZa8V6\r\nZqPBxWWvhnDX0rBwzlGqws+zzRGEynACGkGEM5oO11HV5a/31QF4fUnsm1XS\r\nd8tfWpKp5A2wY8PtFJBWU6eMM+eGdTcrlkHhhobtLSRc/d/ytuzZhB9IJuj6\r\nh2QgB7NsY9S2McUMobRkQak5qmtPaETNjOPGZz7Jdv6iin85p1mFQkN0zhO2\r\nC1PrytCQTLPM0t9JjIdXES5+0wKHCL7/Z/+A8ZOM7iQzXKkcRRoSPCujgVWr\r\npNDN9nWS8zoJURIb6Y/k6dcnwprsNhQSlwt7V6fPitFo7s5niQT4hzvaG6Dl\r\noVQoGxNG3V+JOLz3JkelL1UFT59RotQ1mk7aENbVd58Hvg5sCoO+gb7/xqMu\r\n1B1XvIEDaeNoGwyQVC0dlXTSDoS/Y3TEUks=\r\n=ZtHr\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"macder","email":"maciej@derulski.com"},"directories":{},"maintainers":[{"name":"macder","email":"maciej@derulski.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/medusa-fulfillment-shippo_0.1.2_1655273218336_0.6190121996805737"},"_hasShrinkwrap":false},"0.2.0":{"name":"medusa-fulfillment-shippo","version":"0.2.0","description":"Shippo fulfillment plugin for medusa","author":{"name":"Maciej Derulski"},"license":"MIT","scripts":{"build":"babel src -d . --ignore **/__tests__","prepare":"cross-env NODE_ENV=production npm run build","watch":"babel -w src --out-dir . --ignore **/__tests__","test":"jest"},"dependencies":{"body-parser":"^1.19.0","express":"^4.17.1","medusa-core-utils":"^1.1.30","shippo":"git+https://github.com/macder/shippo-node-client.git","@babel/plugin-transform-classes":"^7.9.5","@babel/plugin-transform-instanceof":"^7.8.3"},"peerDependencies":{"medusa-interfaces":"1.x"},"repository":{"type":"git","url":"git+https://github.com/macder/medusa-fulfillment-shippo.git"},"keywords":["medusa","medusa-plugin","medusa-fulfillment","medusa-shippo"],"devDependencies":{"@babel/cli":"^7.7.5","@babel/core":"^7.7.5","@babel/node":"^7.7.4","@babel/plugin-proposal-class-properties":"^7.7.4","@babel/plugin-transform-runtime":"^7.7.6","@babel/preset-env":"^7.7.5","@babel/register":"^7.7.4","@babel/runtime":"^7.9.6","client-sessions":"^0.8.0","cross-env":"^5.2.1","eslint":"^6.8.0","jest":"^25.5.2","medusa-test-utils":"^1.1.33"},"gitHead":"c27d1bbf47fec25efd01503eeccb136a07fc641c","bugs":{"url":"https://github.com/macder/medusa-fulfillment-shippo/issues"},"homepage":"https://github.com/macder/medusa-fulfillment-shippo#readme","_id":"medusa-fulfillment-shippo@0.2.0","_nodeVersion":"16.15.1","_npmVersion":"8.11.0","dist":{"integrity":"sha512-ka0RKg3ZCrL4bgjuE4mUlZfcK0dltmcSfyZd6lPGAMOUTDCVd6m9YfTtCqyNk/31K23iDBzIgu8KvWa+7CKOwg==","shasum":"75d67353592af93a92f217fb277ba77dc8a456c3","tarball":"https://registry.npmjs.org/medusa-fulfillment-shippo/-/medusa-fulfillment-shippo-0.2.0.tgz","fileCount":16,"unpackedSize":122763,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICMLOTi7D6taw/m5WJMIpkSIPCBrk6a6T0GyDMsSyRWRAiAlgsN2GvFFZfbdA8y673ovFEIuLXcx3zNsMkytZcXX6A=="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJiqqpJACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmrhuxAAmt3DLB3WIE+h/tW/Intm3If8uHVBeQsmK4w0RR9BzcrnZkO+\r\n5jAfhJIDf+2O03w7PViryau064d83IuGJS5X6llRHYBOz0L0hErHif+K8uet\r\n1MPIXXw9WjfEhqEG/XxrfgdxqMLkQEZZ2cq9EuPJehZIyTfp3cwzpcMezrOz\r\nhZPY379FQRezF/4iyTL9ckOoHvOIULt0CceBQeiYC7hKneOim1Uvp6ocZFcC\r\njQdVqWbKx2FvaOqFBp4scuQKlYK6CjFhXX10liLEgBj46EYvH8VA79wl6gJX\r\nxxVMzsDJCHRRwidDKZUeVrL4ZROblifN1GUzQ1l6d1fYCm1qeCqiwEkFGICo\r\nV7I7Q1zJtLlwbdd+xUdN50SVz3R+N5tNAwk5JX4gg5PxL46uPVvAf56GQ/GK\r\naHzGSAhOfrz4CL7fAIifzi57487DvkmBMGBCimlPY3tz1SEyi7TXZZ0MV0OP\r\nJM3vuY6QkuM5o6eBvkVsA2mP3jwZHirkF9hU4J8uxHBNeFajaovQNoivY+ve\r\nCpNqmRBuE8SUCUx2hwdMDdzzz4ng+TDxPO/dyLnP4+BxzSlvbSnwKdTeYq8z\r\nwh+SIpE6DGThxZt/veJUzkhYC9LP2KtuKd2kiMEsBnc1nwSHYG4d7L0YHqYk\r\n2rPTyuOlqKcgGdWWwrzMmhCPwd1YO8SNZRY=\r\n=kXcw\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"macder","email":"maciej@derulski.com"},"directories":{},"maintainers":[{"name":"macder","email":"maciej@derulski.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/medusa-fulfillment-shippo_0.2.0_1655351881041_0.7575090005983542"},"_hasShrinkwrap":false},"0.3.0":{"name":"medusa-fulfillment-shippo","version":"0.3.0","description":"Shippo fulfillment plugin for medusa","author":{"name":"Maciej Derulski"},"license":"MIT","scripts":{"build":"babel src -d . --ignore **/__tests__","prepare":"cross-env NODE_ENV=production npm run build","watch":"babel -w src --out-dir . --ignore **/__tests__","test":"jest"},"dependencies":{"body-parser":"^1.19.0","express":"^4.17.1","medusa-core-utils":"^1.1.30","shippo":"git+https://github.com/macder/shippo-node-client.git","@babel/plugin-transform-classes":"^7.9.5","@babel/plugin-transform-instanceof":"^7.8.3"},"peerDependencies":{"medusa-interfaces":"1.x"},"repository":{"type":"git","url":"git+https://github.com/macder/medusa-fulfillment-shippo.git"},"keywords":["medusa","medusa-plugin","medusa-fulfillment","medusa-shippo"],"devDependencies":{"@babel/cli":"^7.7.5","@babel/core":"^7.7.5","@babel/node":"^7.7.4","@babel/plugin-proposal-class-properties":"^7.7.4","@babel/plugin-transform-runtime":"^7.7.6","@babel/preset-env":"^7.7.5","@babel/register":"^7.7.4","@babel/runtime":"^7.9.6","client-sessions":"^0.8.0","cross-env":"^5.2.1","eslint":"^6.8.0","jest":"^25.5.2","medusa-test-utils":"^1.1.33"},"gitHead":"da8c72b88a9d5ca53af1c872104e5314518d710a","bugs":{"url":"https://github.com/macder/medusa-fulfillment-shippo/issues"},"homepage":"https://github.com/macder/medusa-fulfillment-shippo#readme","_id":"medusa-fulfillment-shippo@0.3.0","_nodeVersion":"16.15.1","_npmVersion":"8.11.0","dist":{"integrity":"sha512-p/7WGeDCeAklMcV6lYxP1eWkQeMgKnSZDO5IEv81IhhnTagARgFkzg2Gdr/+q9416euhKCKFFNyQ0zOfyuoA1g==","shasum":"5dbbb95fa141f968051a071fc2abb8e1eaca426a","tarball":"https://registry.npmjs.org/medusa-fulfillment-shippo/-/medusa-fulfillment-shippo-0.3.0.tgz","fileCount":17,"unpackedSize":138646,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDwVnZ2xcDp8LL3ecVWzwp09ZLjs1qrTiifczkCfeEkMwIgRxw21GLPnyakjizLPddf/aLLNd9R+qIiYpSBR9DXUms="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJirAIfACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmrMBA/9EXIwcpDrwDib3yY5phc9Knhw+4vZxsS0RxKDS7hpM2hR6qCO\r\nT9LvQne10Rjg6tqC3slJ8xsaO62nH2qOraIbllrcJV/UzfBKiNScaDV9rJuh\r\n1CCVVtZaZdZHJu/sLK9XHN9P9spgQGZcaJDEfneX3jGPPvv62JzuDPMo+sVX\r\n+rYyNMHWHpUG/Dx2LgI0H/88y4kme0xc9Xx85ennuQIW4AMjm9HGHf6o2wuF\r\na55jz9Kf9eVJptANnncyMkyXXTrZ99utDG33oQ9fw67lgy6yzrKOIYP8SxIZ\r\nx/XaT9nL/xBOOysUNOgBP116Ol7Y/koE2D6ldXouIFy5XpRA29T7Z1gELt6o\r\nnj3wCnzu3IURw0E3o5h2PFgEdXrta0d0B1Sks47UBAcCmhxj5DwoVABHyfAg\r\nGbhDdbNoWD8kUdqG6FcMTfklr16yq+EmZKptoctR+9IkP0HVjHTIthyKz1d9\r\nep4+yn3cPVBZEym2A+yJgRYXi4ytGYbmgJ+OZqnD70UWgFubbLzGJUZkOX0u\r\ndh74iP1RPIRiPkm95kBSNBsB1ONOVi1WRcpucNq26xP1K/eloxueKBijA1nD\r\nTHYcSHQ10sjxWDipJUgou4Z6Gze2S0PiAdNqptLeNgzT0lVrgcgOeRdXLdLU\r\nKCl1vPqGoVvGZ1ChnilCub4JcIN8tcIeWv4=\r\n=f3j0\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"macder","email":"maciej@derulski.com"},"directories":{},"maintainers":[{"name":"macder","email":"maciej@derulski.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/medusa-fulfillment-shippo_0.3.0_1655439902768_0.37961032052492105"},"_hasShrinkwrap":false},"0.3.1":{"name":"medusa-fulfillment-shippo","version":"0.3.1","description":"Shippo fulfillment plugin for medusa","author":{"name":"Maciej Derulski"},"license":"MIT","scripts":{"build":"babel src -d . --ignore **/__tests__","prepare":"cross-env NODE_ENV=production npm run build","watch":"babel -w src --out-dir . --ignore **/__tests__","test":"jest"},"dependencies":{"body-parser":"^1.19.0","express":"^4.17.1","medusa-core-utils":"^1.1.30","shippo":"git+https://github.com/macder/shippo-node-client.git","@babel/plugin-transform-classes":"^7.9.5","@babel/plugin-transform-instanceof":"^7.8.3"},"peerDependencies":{"medusa-interfaces":"1.x"},"repository":{"type":"git","url":"git+https://github.com/macder/medusa-fulfillment-shippo.git"},"keywords":["medusa","medusa-plugin","medusa-fulfillment","medusa-shippo"],"devDependencies":{"@babel/cli":"^7.7.5","@babel/core":"^7.7.5","@babel/node":"^7.7.4","@babel/plugin-proposal-class-properties":"^7.7.4","@babel/plugin-transform-runtime":"^7.7.6","@babel/preset-env":"^7.7.5","@babel/register":"^7.7.4","@babel/runtime":"^7.9.6","client-sessions":"^0.8.0","cross-env":"^5.2.1","eslint":"^6.8.0","jest":"^25.5.2","medusa-test-utils":"^1.1.33"},"gitHead":"ce9e9b6967158a51123a7f6a17c1a4f183ae066d","bugs":{"url":"https://github.com/macder/medusa-fulfillment-shippo/issues"},"homepage":"https://github.com/macder/medusa-fulfillment-shippo#readme","_id":"medusa-fulfillment-shippo@0.3.1","_nodeVersion":"16.15.1","_npmVersion":"8.11.0","dist":{"integrity":"sha512-sSXHqtdoObwvkJ8ZMyGQMOgIbu2ffFYN+drklz3YdH48nHMIMA2SpJZpBREphEA0W6yQnGH90V2KX3wppZwtYA==","shasum":"ff827309a2017c260ce1b34bb19f45e95a6ac70f","tarball":"https://registry.npmjs.org/medusa-fulfillment-shippo/-/medusa-fulfillment-shippo-0.3.1.tgz","fileCount":17,"unpackedSize":141432,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQC562qqyzYD8R2G0uBq9gbhufqkX6tGWweWQR8iTVa4CAIhAIzdRcesaJQSr4qNQsG+xl4Jf08PEW1wLezgvWqhusQl"}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJirTjtACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmouuw/+MdFK9cJQskgnGTECVzufN99+Gvl3i+ifom8jfQO0yRsqEbp5\r\nigBmahzSSpDPPUWjLhmjOp41MP3YEQ2xRnn0Kfg9LaxcMd6MQsRh6qXZOy3i\r\nvdaQVukvdEh0TrpMb8eRtKfLvuyREXl6sLmO7sGNT9QAeZtzVXRF1dUEiRXs\r\naRl8hpi/UyDhwrDJCbadPFASIzNB2PawVprzq5VHu2UOYp2b1a+3LSDLkrQa\r\nSPVZG1yiFd6Q68H6Qe3MaAfeAm2Mv0HYffI/OivuC0yGvp90HVL41rO5Pv5D\r\nN3+58u+c/8x8Jl+4fNM2bJa2XmisMRu7KUAEYepzIzgufzNjGIotflec3piA\r\nPvvFn3pxW6IDzBiKbQzCvzhHLtUG6pa+sWJD6jlOR/YPstQV+gOw0xkOHjND\r\nymWgp3S01v1Ke0o17iPoeE/TNqmrUo9zmLmTFAc2AANZIM/GVxYZEza5w6oK\r\n/sHgMC4nLXWKoDVBvh+EMr6wt0Xev2ORDUG5watCNiwhJ2OSSKiKtX0VYgZZ\r\nu3MaqPKvlLpmgg1f9sYMBbRDq/gweGPJdZYPcZ8pQbwalS2bp8xDPU+I8qn2\r\n5xnRy1Iq7xsPN9KFp0XIka3qddToGfdRmZswHulvqgMRzh7SSFLNLYhZuc7P\r\nIVFcuJ2CmUowfDvwtRBEz9h/1RPuKu2kiQ8=\r\n=peaP\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"macder","email":"maciej@derulski.com"},"directories":{},"maintainers":[{"name":"macder","email":"maciej@derulski.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/medusa-fulfillment-shippo_0.3.1_1655519469179_0.05697066578775045"},"_hasShrinkwrap":false},"0.4.0":{"name":"medusa-fulfillment-shippo","version":"0.4.0","description":"Shippo fulfillment provider for medusa","author":{"name":"Maciej Derulski"},"license":"MIT","scripts":{"build":"babel src -d . --ignore **/__tests__","prepare":"cross-env NODE_ENV=production npm run build","watch":"onchange -v src/** -- copyfiles {{file}} ../my-medusa-store","test":"jest"},"dependencies":{"@babel/plugin-transform-classes":"^7.9.5","@babel/plugin-transform-instanceof":"^7.8.3","body-parser":"^1.19.0","express":"^4.17.1","medusa-core-utils":"^1.1.30","shippo":"git+https://github.com/macder/shippo-node-client.git"},"peerDependencies":{"medusa-interfaces":"1.x"},"repository":{"type":"git","url":"git+https://github.com/macder/medusa-fulfillment-shippo.git"},"keywords":["medusa","medusa-plugin","medusa-fulfillment","medusa-shippo"],"devDependencies":{"@babel/cli":"^7.7.5","@babel/core":"^7.7.5","@babel/eslint-parser":"^7.15.8","@babel/node":"^7.7.4","@babel/plugin-proposal-class-properties":"^7.7.4","@babel/plugin-transform-runtime":"^7.7.6","@babel/preset-env":"^7.7.5","@babel/register":"^7.7.4","@babel/runtime":"^7.9.6","client-sessions":"^0.8.0","copyfiles":"^2.4.1","cross-env":"^5.2.1","eslint":"^8.2.0","eslint-config-google":"^0.14.0","eslint-config-prettier":"^8.3.0","eslint-plugin-prettier":"^4.0.0","jest":"^25.5.2","medusa-test-utils":"^1.1.33","onchange":"^7.1.0"},"gitHead":"dfb636e5c983c297f47395469c61df5f439a121f","bugs":{"url":"https://github.com/macder/medusa-fulfillment-shippo/issues"},"homepage":"https://github.com/macder/medusa-fulfillment-shippo#readme","_id":"medusa-fulfillment-shippo@0.4.0","_nodeVersion":"16.15.1","_npmVersion":"8.11.0","dist":{"integrity":"sha512-nEZgEdjkrQk2/BzZwmN96zwwfyvpG23d530qGQQsNjuZIfWOptqbonNQreMAV4lxHCxEB5QQUEIYYzpxmYj9CQ==","shasum":"3c1d48071ce5b98aea07821573b4a39383d47a06","tarball":"https://registry.npmjs.org/medusa-fulfillment-shippo/-/medusa-fulfillment-shippo-0.4.0.tgz","fileCount":18,"unpackedSize":141098,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDm/cTtxuESWQvoW3YVlsRu+s7MjFzM3BXJLJttvFFnKwIhAI+hqRteQJJ1JN2T04rnl6133BvSOb4onqWNeMsp3ulj"}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJirmsMACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmryKg//S1GsRZ+ZvJnrm7M/0aaTka5KAT0ELkRLtDXS06J6imk3/6Z4\r\nftq+B6DnagE2Eq1m+yMjHs432/aUqDSdlaC5TpRNEUwbQ/EQi/sELraTUEdR\r\n/VTimXUBXOP8TPr2Wyj9LdHVxO7ewc3zR3x6dSieEB16zFOWavUdFois2cAT\r\nCdGNH52kfIGhWJjT6zF8ewHIJXvOF26ENksxtarXCdWDS3eQskeD+gPzCS4s\r\nbdFSba6nc5YVp5EIjCo387QL6Z2WzttrQy52tJOnH4RdOs/9268Y5qpyuIKC\r\nEkZg3TQ0j48bJB6TGRytcQ1ZmweV8tPqlqkleZ2MnEvT3ta9+hzWMGujPszq\r\nuyWD5ncMOAS+YfjFfqElXj318GIYo7AMzQq5/ybnS6SCGwMfKmQaW0vPvDz/\r\n1Kyoga8gUveKCVZjkRMwEkrKO8056/EIL+pqjDUvooW8Ksz5P5XEhe9CNjux\r\nru0JXRx1lCyNAM+kv8bODsNZ1UJaWaC6uaIpblHn6OxmUKi1KArtkWcSUlnu\r\nX0GQf2k4mhPf3/yQVQ93GJUPEpmD7SvAq/qC3/SMKwjpQYnmRJAx5JaCUvL1\r\nUUw/18zpBf5ueRZrsybwIqKJbRuY0avyy6A+GZqWT5BnHjvCeBOVkYCv5EZu\r\nGr+LoIqxjItSt9mTQypXclCX4b19RlQovA4=\r\n=AcsX\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"macder","email":"maciej@derulski.com"},"directories":{},"maintainers":[{"name":"macder","email":"maciej@derulski.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/medusa-fulfillment-shippo_0.4.0_1655597836234_0.17194326286039252"},"_hasShrinkwrap":false},"0.5.0":{"name":"medusa-fulfillment-shippo","version":"0.5.0","description":"Shippo fulfillment provider for medusa","author":{"name":"Maciej Derulski"},"license":"MIT","scripts":{"build":"babel src -d . --ignore **/__tests__","prepare":"cross-env NODE_ENV=production npm run build","watch":"onchange -v src/** -- copyfiles {{file}} ../my-medusa-store","test":"jest"},"dependencies":{"@babel/plugin-transform-classes":"^7.9.5","@babel/plugin-transform-instanceof":"^7.8.3","binpackingjs":"^3.0.2","body-parser":"^1.19.0","express":"^4.17.1","medusa-core-utils":"^1.1.30","shippo":"git+https://github.com/macder/shippo-node-client.git#medusa"},"peerDependencies":{"medusa-interfaces":"1.x"},"repository":{"type":"git","url":"git+https://github.com/macder/medusa-fulfillment-shippo.git"},"keywords":["medusa","medusa-plugin","medusa-fulfillment","medusa-shippo"],"devDependencies":{"@babel/cli":"^7.7.5","@babel/core":"^7.7.5","@babel/eslint-parser":"^7.15.8","@babel/node":"^7.7.4","@babel/plugin-proposal-class-properties":"^7.7.4","@babel/plugin-transform-runtime":"^7.7.6","@babel/preset-env":"^7.7.5","@babel/register":"^7.7.4","@babel/runtime":"^7.9.6","client-sessions":"^0.8.0","copyfiles":"^2.4.1","cross-env":"^5.2.1","eslint":"^8.2.0","eslint-config-google":"^0.14.0","eslint-config-prettier":"^8.3.0","eslint-plugin-prettier":"^4.0.0","jest":"^25.5.2","medusa-test-utils":"^1.1.33","onchange":"^7.1.0"},"gitHead":"c43d2176dbd1e59daf5c1a1249aca5fc40cd8c9d","bugs":{"url":"https://github.com/macder/medusa-fulfillment-shippo/issues"},"homepage":"https://github.com/macder/medusa-fulfillment-shippo#readme","_id":"medusa-fulfillment-shippo@0.5.0","_nodeVersion":"16.15.1","_npmVersion":"8.11.0","dist":{"integrity":"sha512-QkJ5kKcc9CQMLmw0UjPW9jLYuAGQaQvqjgRyQBEkTy3FkPlnDNUxBHfWLaTzJAO/Q8hzoZd/WkthDKhqCuSvjQ==","shasum":"1d3f9b354c1f4e4dc19d8a1f1e725ed6b3e08159","tarball":"https://registry.npmjs.org/medusa-fulfillment-shippo/-/medusa-fulfillment-shippo-0.5.0.tgz","fileCount":18,"unpackedSize":148873,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIG0CK2oGbJuPGLVfJCh/2qH61aG+qobxURmlOFKH5fQwAiEAvKt42BKhMH4XiOXofdRY+HySYp6d92LI0pNcHCbRKJk="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJir/dQACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmqVOxAAhpG23ZT1gYqr1GhjOSbDaLKwBVdcYgDuaYYxPz6qMdmnx65m\r\nt1RD7//5TK4VkjqRf5+mqORO2aFR7GzD6gJK27ynrryoTCxWY6QRAvWHLOcB\r\n5TvKfPNJj6YoouFFYz6hD3rSBlgMwrLKLOgTqNL1LdpY3m7iQpVn6mVYOkxZ\r\nUbbAO2LtTEJmCsi2w8Nb3PXa3SlJW0LhBATw5AFNcQEWNe5G7bYI3l0v+eYW\r\n/BjyAwWixenCgTTaPE3HAZX+QPXYG2DTS3KA4ZumxCS3CNDECxP0C+SC19SW\r\nUdrwW6VbmUcGQVhQ3pV6wVLMYAhrTzAgUokF/XPneBOhZLRXIhWIfdd711AY\r\nsk0q8/9z45FErdw3Hu9KhjLse55vryo4h5akoD6t36IDLKXHu9dT6BQRDTKb\r\nEvU+CJ9Z+wOin+dwjuF28tLapxnSNo3EafzbzvAT4hR4cyTJNY5U+c/Kxlr8\r\nbZYL4u2usWGsj4w2VE3uoBnELqSFyU6Vsz0K32hyjkgN4W8iTiPcNtcmYdug\r\n+qB69xIAfaATF/D1psVjrRa8Ss7ToApVG6YMGaU28Oj9Fb7DrPSqHDUtfV2H\r\n8uhL/McfWTQrW7MW3Oi3nn8a72tC4KHCcCPj2xN/dJQBzSVQZF5LCIpLqpmN\r\n9mwF6DK4//TWXtv2IIKN6/lDRVjusTWtkdA=\r\n=Kjml\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"macder","email":"maciej@derulski.com"},"directories":{},"maintainers":[{"name":"macder","email":"maciej@derulski.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/medusa-fulfillment-shippo_0.5.0_1655699280777_0.26253351007437686"},"_hasShrinkwrap":false},"0.5.1":{"name":"medusa-fulfillment-shippo","version":"0.5.1","description":"Shippo fulfillment provider for medusa","author":{"name":"Maciej Derulski"},"license":"MIT","scripts":{"build":"babel src -d . --ignore **/__tests__","prepare":"cross-env NODE_ENV=production npm run build","watch":"onchange -v src/** -- copyfiles {{file}} ../my-medusa-store","test":"jest"},"dependencies":{"@babel/plugin-transform-classes":"^7.9.5","@babel/plugin-transform-instanceof":"^7.8.3","binpackingjs":"^3.0.2","body-parser":"^1.19.0","express":"^4.17.1","medusa-core-utils":"^1.1.30","shippo":"git+https://github.com/macder/shippo-node-client.git#medusa"},"peerDependencies":{"medusa-interfaces":"1.x"},"repository":{"type":"git","url":"git+https://github.com/macder/medusa-fulfillment-shippo.git"},"keywords":["medusa","medusa-plugin","medusa-fulfillment","medusa-shippo"],"devDependencies":{"@babel/cli":"^7.7.5","@babel/core":"^7.7.5","@babel/eslint-parser":"^7.15.8","@babel/node":"^7.7.4","@babel/plugin-proposal-class-properties":"^7.7.4","@babel/plugin-transform-runtime":"^7.7.6","@babel/preset-env":"^7.7.5","@babel/register":"^7.7.4","@babel/runtime":"^7.9.6","client-sessions":"^0.8.0","copyfiles":"^2.4.1","cross-env":"^5.2.1","eslint":"^8.2.0","eslint-config-google":"^0.14.0","eslint-config-prettier":"^8.3.0","eslint-plugin-prettier":"^4.0.0","jest":"^25.5.2","medusa-test-utils":"^1.1.33","onchange":"^7.1.0"},"gitHead":"013dcffdfe6fea90d542750cfc5cd5d3e79cdcb7","bugs":{"url":"https://github.com/macder/medusa-fulfillment-shippo/issues"},"homepage":"https://github.com/macder/medusa-fulfillment-shippo#readme","_id":"medusa-fulfillment-shippo@0.5.1","_nodeVersion":"16.15.1","_npmVersion":"8.11.0","dist":{"integrity":"sha512-IwWPgK3EdJHDOjTtZD0jUtL+YV0SNaOZ366hmloTz2U/YR4sPApWU9vLm6BuKLxX/eLHi5+En0cIpwsRPfMUzw==","shasum":"a6efb8d14fb8a9ff9b6f8baeaddefca354d9d131","tarball":"https://registry.npmjs.org/medusa-fulfillment-shippo/-/medusa-fulfillment-shippo-0.5.1.tgz","fileCount":18,"unpackedSize":150012,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFF6vGJQ4ubF3YLGncxPrQX4cHCkmgqcHvsvaetKbYodAiBx/DeFxpFZsopHzhOYLdQuxvpmWuLsDRbJmi4HxZiTVA=="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJisVFuACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmpXiA//Uu4Myt3Uj62mfovzAw0vdZjWYayPQwnE3i2gC912ouhxJHcN\r\nsk4YDC3FoftBp1ECI4EeWmakNrzWiNj/LDlC7EAKkqHjUJnlkls5i78U32oZ\r\nWjl/+Dc6lCB7rrfK+aoGbtwZ/TPUfBmeX3vDuRYbi3WqYZVxU7n1U+Cj/d7p\r\n4nPDa0JgbX0qVZlWch0fbBCNTHlgJpFT+Y2ysKfpu774ruvgDDbkrmtihg5O\r\nem7AZjq05zIJTq7bDYLLNcTvlVCuBMeXK9e20eEZ0JCwWOmaTblFgCQKS/kN\r\ncwrfsgfWbyf2vVDzNxarMcUxuBTVACnUg0vljmcy3fMv705MR5AQWSqQlP9O\r\na+XwJobh/N5IpqCBb36pf7I9gua++cRDBmtX7iB0aISgDWf0eBhocvpuFTEa\r\nOWPMyWtfaQ7RSsEA+bAxgkTIXcE0ojc3Gj3NlOdSO54U4HbIFJMHWn34EPuA\r\ndWRySF9IT2InlhkN78rjq0BjveJb3jFkcud5ow+OOZjsYanvR02Cw+MsW0LU\r\nXbZS3AZ/JAkDQJXa5dEASA2mj5Fyn+b8pMvT7tzO5wVPIx8TC0i+7YkbQv4s\r\nKQUGD4SWh4uYBdo/YO7JJJC0TbJJjbiYnfgGpP7wiu3RB2kKkL0uPxYSis0c\r\n7DuNUd0isydy5EBecrf8IrjiJSnKEwrdN0w=\r\n=VQ8i\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"macder","email":"maciej@derulski.com"},"directories":{},"maintainers":[{"name":"macder","email":"maciej@derulski.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/medusa-fulfillment-shippo_0.5.1_1655787886565_0.8900796750213729"},"_hasShrinkwrap":false},"0.5.2":{"name":"medusa-fulfillment-shippo","version":"0.5.2","description":"Shippo fulfillment provider for medusa","author":{"name":"Maciej Derulski"},"license":"MIT","scripts":{"build":"babel src -d . --ignore **/__tests__","prepare":"cross-env NODE_ENV=production npm run build","watch":"onchange -v src/** -- copyfiles {{file}} ../my-medusa-store","test":"jest"},"dependencies":{"@babel/plugin-transform-classes":"^7.9.5","@babel/plugin-transform-instanceof":"^7.8.3","binpackingjs":"^3.0.2","body-parser":"^1.19.0","express":"^4.17.1","medusa-core-utils":"^1.1.30","shippo":"git+https://github.com/macder/shippo-node-client.git#medusa"},"peerDependencies":{"medusa-interfaces":"1.x"},"repository":{"type":"git","url":"git+https://github.com/macder/medusa-fulfillment-shippo.git"},"keywords":["medusa","medusa-plugin","medusa-fulfillment","medusa-shippo"],"devDependencies":{"@babel/cli":"^7.7.5","@babel/core":"^7.7.5","@babel/eslint-parser":"^7.15.8","@babel/node":"^7.7.4","@babel/plugin-proposal-class-properties":"^7.7.4","@babel/plugin-transform-runtime":"^7.7.6","@babel/preset-env":"^7.7.5","@babel/register":"^7.7.4","@babel/runtime":"^7.9.6","client-sessions":"^0.8.0","copyfiles":"^2.4.1","cross-env":"^5.2.1","eslint":"^8.2.0","eslint-config-google":"^0.14.0","eslint-config-prettier":"^8.3.0","eslint-plugin-prettier":"^4.0.0","jest":"^25.5.2","medusa-test-utils":"^1.1.33","onchange":"^7.1.0"},"gitHead":"62c7cdffc5a8a4d00d9aff5bdd0655d1cc352fb6","bugs":{"url":"https://github.com/macder/medusa-fulfillment-shippo/issues"},"homepage":"https://github.com/macder/medusa-fulfillment-shippo#readme","_id":"medusa-fulfillment-shippo@0.5.2","_nodeVersion":"16.15.1","_npmVersion":"8.11.0","dist":{"integrity":"sha512-6l2v98IJw6jdKkRTkhXfyi5qBaLuf27cPiah9HyoNiwMaBk4ZAY59fsqFd+6gjO7w5KV04LeY6hTA42qSmTBzQ==","shasum":"8ec3e8103db2c654e74c8aa21aab2e971d799b97","tarball":"https://registry.npmjs.org/medusa-fulfillment-shippo/-/medusa-fulfillment-shippo-0.5.2.tgz","fileCount":18,"unpackedSize":149675,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCcXZhh9PZbJUHDD1gfwHYsFjrCfD+E1PtBgUQTDPQEFgIhAIfG8D7smOHD6x6F0vBNC7xINvMs58n1/wr0iHr7KkqT"}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJisYZRACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmq6Tg/9GLSAIYC3R1LSJvKx49dxkGTm5FlM5PY4hJQrSAoXqcgit2pu\r\nAKor/pYdt44sfU9JG2QWaGK/fJuNlXdEkBYTcNUiCRoiWxo40Tbd1i1B6DqV\r\ncOqVEIR6w/y0HQvph7nMo2Amcy3seWvhL0YLqSpgPGusBTQ45cm8iEZNp20Q\r\n2Lp3kRAbayt0E1dpzRAKoAOqPq9qi31p91yCYIvKOBOHBB/jknpyAHnAkuY4\r\n9Py5ZXNmxgEx1cOPnMsfHXgm8N3pXewMv7uTZrplPLJO5QJnjRfc0mTxD6fP\r\nNeSG5NcNXxsDuLI8OKA10/WoKmmURGBk+EuCQW7CIkGB/t9pdNzHR13a8q+m\r\njB7wSqGP7Ztn3UTBfli9clU5tOS5L2vjJ7YSVWgv7vgNfl/lb64TawpLDtJo\r\nDhwO+u9gfoeh47G2bXA9d5AvRYiDwqMJeUa3KFtXdM6JdtmfMkG1X0cRXa4u\r\ntoQF1Bm2aRGvMXQq13aq+JiEYMQdyXKiMfVUFS1TSnUd4LSDWWaFHDWOsjrC\r\nZN0Q7ikD45FzGt2h60M7+Uln7p+IgPXAnG4txCKuulwlqsyXcRSS+oaLCwAR\r\noa4KoKw4QXxI+PAcuTByHEdmDEfMJoMviCapx4ed28qPgz9Etv2TEzGDJ4DU\r\nWApfSiyQSaMLP2HkMUZ9WERBeUjFjljsmxM=\r\n=Dfoq\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"macder","email":"maciej@derulski.com"},"directories":{},"maintainers":[{"name":"macder","email":"maciej@derulski.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/medusa-fulfillment-shippo_0.5.2_1655801425176_0.6160079682165456"},"_hasShrinkwrap":false},"0.6.0":{"name":"medusa-fulfillment-shippo","version":"0.6.0","description":"Shippo fulfillment provider for medusa","author":{"name":"Maciej Derulski"},"license":"MIT","scripts":{"build":"babel src -d . --ignore **/__tests__","prepare":"cross-env NODE_ENV=production npm run build","watch":"onchange -v src/** -- copyfiles {{file}} ../my-medusa-store","test":"jest"},"dependencies":{"@babel/plugin-transform-classes":"^7.9.5","@babel/plugin-transform-instanceof":"^7.8.3","binpackingjs":"^3.0.2","body-parser":"^1.19.0","express":"^4.17.1","medusa-core-utils":"^1.1.30","shippo":"git+https://github.com/macder/shippo-node-client.git#medusa"},"peerDependencies":{"medusa-interfaces":"1.x"},"repository":{"type":"git","url":"git+https://github.com/macder/medusa-fulfillment-shippo.git"},"keywords":["medusa","medusa-plugin","medusa-fulfillment","medusa-shippo"],"devDependencies":{"@babel/cli":"^7.7.5","@babel/core":"^7.7.5","@babel/eslint-parser":"^7.15.8","@babel/node":"^7.7.4","@babel/plugin-proposal-class-properties":"^7.7.4","@babel/plugin-transform-runtime":"^7.7.6","@babel/preset-env":"^7.7.5","@babel/register":"^7.7.4","@babel/runtime":"^7.9.6","client-sessions":"^0.8.0","copyfiles":"^2.4.1","cross-env":"^5.2.1","eslint":"^8.2.0","eslint-config-google":"^0.14.0","eslint-config-prettier":"^8.3.0","eslint-plugin-prettier":"^4.0.0","jest":"^25.5.2","medusa-test-utils":"^1.1.33","onchange":"^7.1.0"},"gitHead":"a43e783ec3e1dcf94a558e08124bd3c3eb2c065d","bugs":{"url":"https://github.com/macder/medusa-fulfillment-shippo/issues"},"homepage":"https://github.com/macder/medusa-fulfillment-shippo#readme","_id":"medusa-fulfillment-shippo@0.6.0","_nodeVersion":"16.15.1","_npmVersion":"8.11.0","dist":{"integrity":"sha512-O6J3h8OyE7fZnQAOU/ovY7QUM3gdVIPTMPDYr30rumAu7tMGOMk3Wv1dM8CSU5zb6GpUNfT8eYrvRMZ9Lvrs2A==","shasum":"62666cbe7713e3ba1eb2230684c504db499c0769","tarball":"https://registry.npmjs.org/medusa-fulfillment-shippo/-/medusa-fulfillment-shippo-0.6.0.tgz","fileCount":20,"unpackedSize":167224,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDhrsyFq4Av/K3maLkO9ElD25vcN2W/tvNPiDmeafOSTQIhALhjQcSboB58BOquJY/DtTsRr/LP6IH1+/0LQdX/0Dpt"}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJisl35ACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmqT4hAAk7Z++nGZKoSN05d8WKR3gE6SproCFemkq0XPMZ0ELqjTkgf7\r\nMtAm+SHyA5VJxvE5fKqMc/7Lq9DpBAGIFuXtrFx1/napr+E/fxyqpuV8jTgd\r\nOIv6ptqCkA7RbmBzpTq6bndzipYt+nXBq+cZvmW3k9Cj8sq0Xx3Yb/tUD3Jl\r\nr00zf7otAs17NR7Tv4eHVao3uWvuVsk1SFphguBYnmYIUGfY3+m2wgGb011Y\r\nAnlY92JBmAoCm7j2LcWreSBHZxV8H/PBA6amaOnrVVyQmo2xm9xWz7E9Eymu\r\nh5KOSovC+EvMjAiIQmoGs9apRmitkLZFC3MQXUBv7DM2+oCmMSqGLFrI/Dn6\r\neDZIJoJimzWk5I5QQkY8sxoDnm+ORWy2k3X4oWC7rfVjC9vGpw9vEskFeLgi\r\np82m4G8uk3ukmZh55/jmwKUlezCj4GCcq6roK0kunoXLaxz61qpBvf5fh8/B\r\n7C0Nm2SSDxz5xs0+CHnRbXQhXR1XXn3ZZl3qntwHc1mXeg8t4qCFV9xoMcL3\r\nfcqNxXOj2orlocbtP93KrD8pNvuXksExDHs4GC03BB2GWbUCtti/AEmbbgns\r\nN9+70UHxIlRuJyAa39KaFz5xtbZGiBhbc6TpQYLnxpJNPUFuvF1Ynyl6P/6N\r\nyPKspjy3nKAwv6gYXfe9gF4P7K0OyjGYcVw=\r\n=/Koy\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"macder","email":"maciej@derulski.com"},"directories":{},"maintainers":[{"name":"macder","email":"maciej@derulski.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/medusa-fulfillment-shippo_0.6.0_1655856633760_0.3756109091006201"},"_hasShrinkwrap":false},"0.7.0":{"name":"medusa-fulfillment-shippo","version":"0.7.0","description":"Shippo fulfillment provider for medusa","author":{"name":"Maciej Derulski"},"license":"MIT","scripts":{"build":"babel src -d . --ignore **/__tests__","prepare":"cross-env NODE_ENV=production npm run build","watch":"onchange -v src/** -- copyfiles {{file}} ../my-medusa-store","test":"jest"},"dependencies":{"@babel/plugin-transform-classes":"^7.9.5","@babel/plugin-transform-instanceof":"^7.8.3","binpackingjs":"^3.0.2","body-parser":"^1.19.0","express":"^4.17.1","medusa-core-utils":"^1.1.30","shippo":"git+https://github.com/macder/shippo-node-client.git#medusa"},"peerDependencies":{"medusa-interfaces":"1.x"},"repository":{"type":"git","url":"git+https://github.com/macder/medusa-fulfillment-shippo.git"},"keywords":["medusa","medusa-plugin","medusa-fulfillment","medusa-shippo"],"devDependencies":{"@babel/cli":"^7.7.5","@babel/core":"^7.7.5","@babel/eslint-parser":"^7.15.8","@babel/node":"^7.7.4","@babel/plugin-proposal-class-properties":"^7.7.4","@babel/plugin-transform-runtime":"^7.7.6","@babel/preset-env":"^7.7.5","@babel/register":"^7.7.4","@babel/runtime":"^7.9.6","client-sessions":"^0.8.0","copyfiles":"^2.4.1","cross-env":"^5.2.1","eslint":"^8.2.0","eslint-config-google":"^0.14.0","eslint-config-prettier":"^8.3.0","eslint-plugin-prettier":"^4.0.0","jest":"^25.5.2","medusa-test-utils":"^1.1.33","onchange":"^7.1.0"},"gitHead":"d53f6d56c709a3731e7d11644464eb82add1c1d9","bugs":{"url":"https://github.com/macder/medusa-fulfillment-shippo/issues"},"homepage":"https://github.com/macder/medusa-fulfillment-shippo#readme","_id":"medusa-fulfillment-shippo@0.7.0","_nodeVersion":"16.15.1","_npmVersion":"8.11.0","dist":{"integrity":"sha512-yQbz9ev3FAUxVXNM7BMUMqWofiAYkIKfgA8B3CLx4R0UTM7ixCpG2cQfLsXeYY1EVU5uDh3uhG3zlv+8Cd5CqA==","shasum":"aa4be70bf194f8248b85c4a135ab41c359d30cb5","tarball":"https://registry.npmjs.org/medusa-fulfillment-shippo/-/medusa-fulfillment-shippo-0.7.0.tgz","fileCount":20,"unpackedSize":185558,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFIgb8WsLXYkJfD4/ePTIFsBVDqfMmokTY6vDG5fbhY3AiEAjjszscYarVh70+x4haHBa4ctN+OXjvqVUIcZvfgy2mQ="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJitCBRACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmqEoA//U8JtcZf+9I4R6rt4PnSWyYu4m0wl/GDJaYlpL52oqEIcUbGG\r\nqC3C1pz3zwOEiMwAPykvCgu7QUUvD1Weo1a7qk0cVnS+mqPbwLKfG6/L+jX4\r\nb+dcz4p1D8hDvUo9nRfVFz+k33Y2afTiBMRHVSD39tnCAO6QC0ZzC9iP1Gfw\r\nAsRhYHAI4I5EqA/jPigahs3v/FUvrZ+wWtbxNi113Slw8mRz2TbyBCrQoatA\r\n3DmXKMz4G7GyBbiHI1n6zaAunh6dqXbOITVLRPYjnEV0jkA7uXY76RbgEc7x\r\nRBnnM9i964Xad69Z2kAaU+iokHFudwlm8OIw4rIRrzq2RAp7LppWUrGHrSnL\r\nxnVMA24rOvwvowPpNKpzlrFFcIKEjd/fuYmMk7xKDEjEufy8dOjpTihHfMCb\r\nxaEvs+RZJJ9EnC1s+gfC4Bypnd96eEMgwuYFL9jzGHLoAZd7os0hAOZXAs68\r\nfs+/VknEmuryZbP0e4kX5LpFaI131RLu476hmUILXfjq1g+zvE9JnqVdOBVN\r\nlzbzZHk7+34MXOYnfsxsc+x63l96wwU2B3DJMM/zTZWsHZWMrsiL174RofdE\r\nPCca15NMuJnDjuVB2ib/DVINw/Um1ADyG/6o6ny5l/9bfz20dnhLdaMqkwm6\r\nz/CPmcU7S1YjR/3UW7hffABbq5t6ofb5n+E=\r\n=Ulri\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"macder","email":"maciej@derulski.com"},"directories":{},"maintainers":[{"name":"macder","email":"maciej@derulski.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/medusa-fulfillment-shippo_0.7.0_1655971921692_0.3347517104657971"},"_hasShrinkwrap":false},"0.8.0":{"name":"medusa-fulfillment-shippo","version":"0.8.0","description":"Shippo fulfillment provider for medusa","author":{"name":"Maciej Derulski"},"license":"MIT","scripts":{"build":"babel src -d . --ignore **/__tests__","prepare":"cross-env NODE_ENV=production npm run build","watch":"onchange -v src/** -- copyfiles {{file}} ../my-medusa-store","test":"jest"},"dependencies":{"@babel/plugin-transform-classes":"^7.9.5","@babel/plugin-transform-instanceof":"^7.8.3","binpackingjs":"^3.0.2","body-parser":"^1.19.0","express":"^4.17.1","medusa-core-utils":"^1.1.30","shippo":"git+https://github.com/macder/shippo-node-client.git#medusa"},"peerDependencies":{"medusa-interfaces":"1.x"},"repository":{"type":"git","url":"git+https://github.com/macder/medusa-fulfillment-shippo.git"},"keywords":["medusa","medusa-plugin","medusa-fulfillment","medusa-shippo"],"devDependencies":{"@babel/cli":"^7.7.5","@babel/core":"^7.7.5","@babel/eslint-parser":"^7.15.8","@babel/node":"^7.7.4","@babel/plugin-proposal-class-properties":"^7.7.4","@babel/plugin-transform-runtime":"^7.7.6","@babel/preset-env":"^7.7.5","@babel/register":"^7.7.4","@babel/runtime":"^7.9.6","client-sessions":"^0.8.0","copyfiles":"^2.4.1","cross-env":"^5.2.1","eslint":"^8.2.0","eslint-config-google":"^0.14.0","eslint-config-prettier":"^8.3.0","eslint-plugin-prettier":"^4.0.0","jest":"^25.5.2","medusa-test-utils":"^1.1.33","onchange":"^7.1.0"},"gitHead":"afbc6fa833ad19eedd6db97aac56df79d47259c1","bugs":{"url":"https://github.com/macder/medusa-fulfillment-shippo/issues"},"homepage":"https://github.com/macder/medusa-fulfillment-shippo#readme","_id":"medusa-fulfillment-shippo@0.8.0","_nodeVersion":"16.15.1","_npmVersion":"8.11.0","dist":{"integrity":"sha512-DoohR3svpnXeEMSn1kmhfR2TBKq9J2QcosShtzMZn40hqIkJmKvN5h1xokCprZrcg+KWFSkj5z28o71cKXU0ww==","shasum":"65bf9473e3308a629756b404a2c150d701999aad","tarball":"https://registry.npmjs.org/medusa-fulfillment-shippo/-/medusa-fulfillment-shippo-0.8.0.tgz","fileCount":20,"unpackedSize":187018,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDmj1Ixi/8FIF/lub2PdcsEkdoHBLYfvDj2SZkgW7gsoAiA0JK0fV3rnfoMLKX8Unpq4eMLORrK9QXAsqcPgPp0pmw=="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJitQtjACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmq+og//X9lcCrklSQmO2DXR0f8Vh+E2Kg6oxdMz+7qA4WbIogPy+/WA\r\n+O7irsGB1UWrbwNL9p5EXPa/HxAiloLldEHCJt2PLrEj6HWHluaz+vAo3fvV\r\nnBkNKSWA0tE7y9cstlVMLfTzq37wRnFqpn2fNYqjWIC1WOVaBaGAK5U2jHIU\r\ncBrS8fo26Vnb5evSIgyiS3Kn3P1z08/N5oX4cjX6rUtBpSRgHt2ABSxRvKaN\r\ngWaMuiave1aP6RmoNlE0RvZfB2wlHfYU92gNT9/jVYsv8a6zHRk29zV1MaBn\r\nXMCe2Q1/gWWeA2Beq+hvcsLPBdYFUyKASknpNC3mnefPw5XpWPKP/cEQVogk\r\n9vqQ6utj082GfXbM1o+7lG3I8s7nC7AGTy3/qvaSRbYLUrI024uO2XwjkpRP\r\neGfXtPt7+XqjtqZIrRhkuI8Y7csiRYL52jEoPNc/oo9BeZ8auHxleIxU9mQW\r\nEdPYCGEp6RrAoEKfNbzP/4A6towPGCLbTTMS4CyqctwVYwVZqVyECtleLQF5\r\nr/J8Dl3ipkq8C11tqDLOzZtSfOVNDoSj2UBR3e0otldmUTLTmFKVDbGUuwV7\r\n1dTldk6mQhVojzKMDX08uMpArH6JK6T0llHJmGRM6Aj+xtu4kBZB8BUWjr/M\r\nmOcN574SM6kW246LsEtEOwdJ8KVuhJd+NdA=\r\n=OiCk\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"macder","email":"maciej@derulski.com"},"directories":{},"maintainers":[{"name":"macder","email":"maciej@derulski.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/medusa-fulfillment-shippo_0.8.0_1656032099622_0.03491898273242189"},"_hasShrinkwrap":false},"0.8.1":{"name":"medusa-fulfillment-shippo","version":"0.8.1","description":"Shippo fulfillment provider for medusa","author":{"name":"Maciej Derulski"},"license":"MIT","scripts":{"build":"babel src -d . --ignore **/__tests__","prepare":"cross-env NODE_ENV=production npm run build","watch":"onchange -v src/** -- copyfiles {{file}} ../my-medusa-store","test":"jest"},"dependencies":{"@babel/plugin-transform-classes":"^7.9.5","@babel/plugin-transform-instanceof":"^7.8.3","binpackingjs":"^3.0.2","body-parser":"^1.19.0","express":"^4.17.1","medusa-core-utils":"^1.1.30","shippo":"git+https://github.com/macder/shippo-node-client.git#medusa"},"peerDependencies":{"medusa-interfaces":"1.x"},"repository":{"type":"git","url":"git+https://github.com/macder/medusa-fulfillment-shippo.git"},"keywords":["medusa","medusa-plugin","medusa-fulfillment","medusa-shippo"],"devDependencies":{"@babel/cli":"^7.7.5","@babel/core":"^7.7.5","@babel/eslint-parser":"^7.15.8","@babel/node":"^7.7.4","@babel/plugin-proposal-class-properties":"^7.7.4","@babel/plugin-transform-runtime":"^7.7.6","@babel/preset-env":"^7.7.5","@babel/register":"^7.7.4","@babel/runtime":"^7.9.6","client-sessions":"^0.8.0","copyfiles":"^2.4.1","cross-env":"^5.2.1","eslint":"^8.2.0","eslint-config-google":"^0.14.0","eslint-config-prettier":"^8.3.0","eslint-plugin-prettier":"^4.0.0","jest":"^25.5.2","medusa-test-utils":"^1.1.33","onchange":"^7.1.0"},"gitHead":"d64773c77ff3d5e8dbcf6d74480828c3eb3b41a0","bugs":{"url":"https://github.com/macder/medusa-fulfillment-shippo/issues"},"homepage":"https://github.com/macder/medusa-fulfillment-shippo#readme","_id":"medusa-fulfillment-shippo@0.8.1","_nodeVersion":"16.15.1","_npmVersion":"8.11.0","dist":{"integrity":"sha512-wKsoAwJjGUSAJb8jGxMjOfDI489olJS4oyoiKj9IR393GthsyjllenYOqKmsCOl+PX24YX9hjOviXqTF+9WNTg==","shasum":"3fa48a1d115969921f671569b5e5e74622758d11","tarball":"https://registry.npmjs.org/medusa-fulfillment-shippo/-/medusa-fulfillment-shippo-0.8.1.tgz","fileCount":20,"unpackedSize":186530,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDkp1hhLOQA4ZtDVYoFWm0KF3pq0fpQ5pyLv1Qx5PL95QIgMrMdD/m1q3sAPV7k/xiTaFtRODi1P6QinEjbA777hgg="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJitROVACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmp11w//TXPp7XaPslAa/FtUgEULMLe6RBml3dmKXPw/O2DgmjEYnZ85\r\nQ4l+ktcR2jLfljEc7BcQYBpfm2ULUT5B4b9/hab0qN6/RMumXXiNvISnVcQ3\r\n0+GLwqwQavcPQ+xbXzQILhPNclEuMeEq1+A2D9PVoA3D/1oT91QwUsLtN1FY\r\nRSTqq75P7dsboqu/LxGBol3RZ+ZcI1uYBWBZFuJL6cA7LUIdcrUsKIF0jUNZ\r\n1YS15penQ9HW0VFDFSwiGS81sWO/iji/RYagR/V35OfCthRknx9lyJNmwj7y\r\nKZ7AvXmYZOr227hPhAo6v8lVkw37QgYxZ/HbRJ/f5qcB93XJuLuq+Fxj1UDP\r\n8YsJ7Y7YbXhIvC0/PvpHqn8s3LqnguTaHIZoQAI6c9FQ6fTdHObkg3doF79i\r\nu1PK8HPbVWaYXF6B8wv+fZIz3c4dkAVWa4t9oXSumucGOCvsBH5fawda7Coc\r\nJ92ZMqHxCz1rcEv48EnNKdOGwg2HyAjwG58NA9zydmz6MzhSZUzSd2LC6iUx\r\nCseanT5ly/VasR+dJJL7xPzDFifjvaM+SBPNvgVK/SgTCht+nhKnxtIag86z\r\nFsMveuUxzz8LjJ74/jDEmYShHkXKfBUYbb2BzqFDUpmAAdX9ea+v89eiz2eb\r\ncI02L5CRiCKEmEJwCLIrf6YtL/8MUMphDpw=\r\n=1E8v\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"macder","email":"maciej@derulski.com"},"directories":{},"maintainers":[{"name":"macder","email":"maciej@derulski.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/medusa-fulfillment-shippo_0.8.1_1656034197138_0.7153245389172316"},"_hasShrinkwrap":false},"0.8.2":{"name":"medusa-fulfillment-shippo","version":"0.8.2","description":"Shippo fulfillment provider for medusa","author":{"name":"Maciej Derulski"},"license":"MIT","scripts":{"build":"babel src -d . --ignore **/__tests__","prepare":"cross-env NODE_ENV=production npm run build","watch":"onchange -v src/** -- copyfiles {{file}} ../my-medusa-store","test":"jest"},"dependencies":{"@babel/plugin-transform-classes":"^7.9.5","@babel/plugin-transform-instanceof":"^7.8.3","binpackingjs":"^3.0.2","body-parser":"^1.19.0","express":"^4.17.1","medusa-core-utils":"^1.1.30","shippo":"git+https://github.com/macder/shippo-node-client.git#medusa"},"peerDependencies":{"medusa-interfaces":"1.x"},"repository":{"type":"git","url":"git+https://github.com/macder/medusa-fulfillment-shippo.git"},"keywords":["medusa","medusa-plugin","medusa-fulfillment","medusa-shippo"],"devDependencies":{"@babel/cli":"^7.7.5","@babel/core":"^7.7.5","@babel/eslint-parser":"^7.15.8","@babel/node":"^7.7.4","@babel/plugin-proposal-class-properties":"^7.7.4","@babel/plugin-transform-runtime":"^7.7.6","@babel/preset-env":"^7.7.5","@babel/register":"^7.7.4","@babel/runtime":"^7.9.6","client-sessions":"^0.8.0","copyfiles":"^2.4.1","cross-env":"^5.2.1","eslint":"^8.2.0","eslint-config-google":"^0.14.0","eslint-config-prettier":"^8.3.0","eslint-plugin-prettier":"^4.0.0","jest":"^25.5.2","medusa-test-utils":"^1.1.33","onchange":"^7.1.0"},"gitHead":"a1435ada358b37c4a62ec42da9aa386769fbbc2a","bugs":{"url":"https://github.com/macder/medusa-fulfillment-shippo/issues"},"homepage":"https://github.com/macder/medusa-fulfillment-shippo#readme","_id":"medusa-fulfillment-shippo@0.8.2","_nodeVersion":"16.15.1","_npmVersion":"8.11.0","dist":{"integrity":"sha512-b124GGuZFTiQnyl76D8jr+28YalTDc/4Wlyda7TZPwRFCb7CGuEY+f0QPzaUS6Oa1uLt6RkWg/ykdeB7pBgweA==","shasum":"c9d58802644f10affddaaf7f1b43fa6540af9434","tarball":"https://registry.npmjs.org/medusa-fulfillment-shippo/-/medusa-fulfillment-shippo-0.8.2.tgz","fileCount":20,"unpackedSize":186695,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCu8l7cPbKAYuNJbUSMuL53LEV2ZfzUhb5QIbJPRyoiJQIhAKOyrWF7kEXSu+UiOxyI/Zxkwx192CkRw2e4UwwitUhJ"}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJitRTcACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmr+Cw/9HksEEunpW53twf/ZQuG2RfWnv3zYpgB7Duz8MiXLyw3U2Oek\r\nzWMiSVapJpwZiq6nlQQ69E+c8koFrI8xNuCmQQTLFpEkfn5kqWzQqlmXbfYN\r\nch+P/pdm9Q6iYhRAs0D3g2/4AjP48ytRs/WB9Y/YpsM+Ahw19zxKb33HDMdp\r\nvfQLICdmt5IL9it6wwTXKD7bi6rICqHSw6D6FXKo0G8+H0R0wiiaYB9FMa4D\r\nNGU6FKWFKNmNZj0n3/bz/kONldMcP39y1dwTGEMipX9leaYOvlo2yjuOSE4f\r\njPvVE6aSbqawnMrgcvIfAyZ8SkorJCLGayUUBlKiYZgZxvUmK1Z3TBmBJR1C\r\ncqsYE2vhTbwVORRK3uLZs0Rebn2rljTAb9jqjKSE/JAHnzLy4aepGqZdS+yM\r\n81lw+PXHA4FRrMNKrYSLVA12KrDijVbibphdSdGwxOmQg9dPxizeb5MpC5cN\r\nc0ibje39WTxOkzqzGV5mT5dSgJrYh31GUZR/Co45wsg0+OlYqJnjIbrawPA7\r\nHChUe9tJOVgHqRIx30uA9xkXp8HPR5OFRutkP9xd1N7mlnsRf7kaDh4y1tRf\r\n4Bylz27Kx4XRZhjqOwPbZj9Rr+2reZgRje41QSYFBQ1elJxFQwMoJB0k/toy\r\nn9miwrEndlmm0e5+2gkufDfzLq45KUA9geA=\r\n=R0ym\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"macder","email":"maciej@derulski.com"},"directories":{},"maintainers":[{"name":"macder","email":"maciej@derulski.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/medusa-fulfillment-shippo_0.8.2_1656034524331_0.1580023539729718"},"_hasShrinkwrap":false},"0.8.3":{"name":"medusa-fulfillment-shippo","version":"0.8.3","description":"Shippo fulfillment provider for medusa","author":{"name":"Maciej Derulski"},"license":"MIT","scripts":{"build":"babel src -d . --ignore **/__tests__","prepare":"cross-env NODE_ENV=production npm run build","watch":"onchange -v src/** -- copyfiles {{file}} ../my-medusa-store","test":"jest"},"dependencies":{"@babel/plugin-transform-classes":"^7.9.5","@babel/plugin-transform-instanceof":"^7.8.3","binpackingjs":"^3.0.2","body-parser":"^1.19.0","express":"^4.17.1","medusa-core-utils":"^1.1.30","shippo":"git+https://github.com/macder/shippo-node-client.git#medusa"},"peerDependencies":{"medusa-interfaces":"1.x"},"repository":{"type":"git","url":"git+https://github.com/macder/medusa-fulfillment-shippo.git"},"keywords":["medusa","medusa-plugin","medusa-fulfillment","medusa-shippo"],"devDependencies":{"@babel/cli":"^7.7.5","@babel/core":"^7.7.5","@babel/eslint-parser":"^7.15.8","@babel/node":"^7.7.4","@babel/plugin-proposal-class-properties":"^7.7.4","@babel/plugin-transform-runtime":"^7.7.6","@babel/preset-env":"^7.7.5","@babel/register":"^7.7.4","@babel/runtime":"^7.9.6","client-sessions":"^0.8.0","copyfiles":"^2.4.1","cross-env":"^5.2.1","eslint":"^8.2.0","eslint-config-google":"^0.14.0","eslint-config-prettier":"^8.3.0","eslint-plugin-prettier":"^4.0.0","jest":"^25.5.2","medusa-test-utils":"^1.1.33","onchange":"^7.1.0"},"gitHead":"f1ce88ce2f255b6d9d1cc26f1ce9e079e95d12b8","bugs":{"url":"https://github.com/macder/medusa-fulfillment-shippo/issues"},"homepage":"https://github.com/macder/medusa-fulfillment-shippo#readme","_id":"medusa-fulfillment-shippo@0.8.3","_nodeVersion":"16.15.1","_npmVersion":"8.11.0","dist":{"integrity":"sha512-WnqlkjKeVOlrUnrN0I22kcvHDC7gpWMdQjDnaaXNLnVvBjMf35vZNlEOAZgHjO8kznU26NSZJ9PE/jbAZeZv1w==","shasum":"bf77092ed9e53484031ee698e6778a269634b57a","tarball":"https://registry.npmjs.org/medusa-fulfillment-shippo/-/medusa-fulfillment-shippo-0.8.3.tgz","fileCount":20,"unpackedSize":179001,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFV2LO2Jt2BA/VDf4RrdZQWH06chC0506cIhw8WNnLWGAiADZ6d0oOm9Jqp6pO79PYqfJmFULbFVDMlHpr8rrX/W7g=="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJitmIGACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmrgJw//TFCtkrv/hJ3CcPVEeT2oLqpBSzZTS9CqkQ7QxDoxE4osFoI+\r\ngUKm+ugM2f1BLk4ZaZf7UvPnBlil+Edzv3/ZK7xpp1p8FKuE8gQ9JIPW6QYt\r\nI5fccipCVJZKFE9vBL/jV4KHvY/s8BrFX1au2Alp1Ol7cjVdNccgvxOiafl5\r\nmC4cPOYrU0XNwezfHatF0PJ6xXnv8n1qykjJT0+6yRvaMHIgtdt8zfLuUk+/\r\nREPB/uVoqbvGk/V2Rh3Ext+neBafGqyX4kuBTSj4tnlwiSC2z3lTXYWH5qYy\r\nfGqv24kc6hZ3vJ5DmP/P7GoL/mp1r6F2Fvq7YJ7yt3H5tBd99ct9txtI8vZh\r\nc085CyeT7XtLBMH7pq/rLOCGhnI8X8IlM3mqtuawgtcvX9dPZoSs0OYGSxDu\r\nfh+HiD0wCDYmjrmuWblMVdmcGEIM0jOYKyFXWndqbqnZh/38MQa6PRP/l+Zc\r\nY72grdDGmxcpnUR+0cYZlr7A6CCsM8EZQn+lUuA4ZQCjyGcEwRBhMmOJj3dp\r\njCeH8PW0hxLq/xKUJKxI0pGWiWJY9rvqw9aoV+o6OVb3YtCPYMZ1LsjT5oRE\r\n7/clYDl/FURIGJWXx/MzevAEI58eWzbRfRAmS4Gf0ILlwTSnFvwEinHrbF/R\r\nowgYPXKttxchCCpPtcxxpsKjT6UiinMSJIU=\r\n=0fEa\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"macder","email":"maciej@derulski.com"},"directories":{},"maintainers":[{"name":"macder","email":"maciej@derulski.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/medusa-fulfillment-shippo_0.8.3_1656119814677_0.9492279363025979"},"_hasShrinkwrap":false},"0.8.4":{"name":"medusa-fulfillment-shippo","version":"0.8.4","description":"Shippo fulfillment provider for medusa","author":{"name":"Maciej Derulski"},"license":"MIT","scripts":{"build":"babel src -d . --ignore **/__tests__,**/__mocks__","prepare":"cross-env NODE_ENV=production npm run build","watch":"onchange -v src/** -- copyfiles {{file}} ../my-medusa-store","test":"jest"},"dependencies":{"@babel/plugin-transform-classes":"^7.9.5","@babel/plugin-transform-instanceof":"^7.8.3","binpackingjs":"^3.0.2","body-parser":"^1.19.0","express":"^4.17.1","medusa-core-utils":"^1.1.30","shippo":"git+https://github.com/macder/shippo-node-client.git#medusa"},"peerDependencies":{"medusa-interfaces":"1.x"},"repository":{"type":"git","url":"git+https://github.com/macder/medusa-fulfillment-shippo.git"},"keywords":["medusa","medusa-plugin","medusa-fulfillment","medusa-shippo"],"devDependencies":{"@babel/cli":"^7.7.5","@babel/core":"^7.7.5","@babel/eslint-parser":"^7.15.8","@babel/node":"^7.7.4","@babel/plugin-proposal-class-properties":"^7.7.4","@babel/plugin-transform-runtime":"^7.7.6","@babel/preset-env":"^7.7.5","@babel/register":"^7.7.4","@babel/runtime":"^7.9.6","@faker-js/faker":"^7.3.0","client-sessions":"^0.8.0","copyfiles":"^2.4.1","cross-env":"^5.2.1","eslint":"^8.2.0","eslint-config-google":"^0.14.0","eslint-config-prettier":"^8.3.0","eslint-plugin-prettier":"^4.0.0","jest":"^25.5.2","medusa-test-utils":"^1.1.33","onchange":"^7.1.0"},"gitHead":"94414adde6d22edac24bde616612f3e891c5bfe9","bugs":{"url":"https://github.com/macder/medusa-fulfillment-shippo/issues"},"homepage":"https://github.com/macder/medusa-fulfillment-shippo#readme","_id":"medusa-fulfillment-shippo@0.8.4","_nodeVersion":"16.15.1","_npmVersion":"8.11.0","dist":{"integrity":"sha512-8Ik/POKhfKtfttZE2E14FNS2EE1sgIxScsjTCvRe0i+/VszRhA2OSm4/21NYCFQ3Y2HLZrlQt66+fJ4m/VK07A==","shasum":"5ece8ead36cd20351f31c7d91990018b55507865","tarball":"https://registry.npmjs.org/medusa-fulfillment-shippo/-/medusa-fulfillment-shippo-0.8.4.tgz","fileCount":21,"unpackedSize":195236,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCQSAU2K8ktyjb7q5kG/177yd1FDECoNxOeUijUb3AC4AIhAMlj55Kc1HM9b1lDuh26sW7pr5Wdk92gnsRGI3Us3ely"}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJit7OUACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmolng/9EbntimyM5Ic9BQNaXRkGzw2MNlqDWm4IW6iECCIzlXwYDm6/\r\nB6dTIcR0NUEMC+ceOjRcoJi3wF+2tmCoUVWgeqNlyux+CGoV4v04531QdIxC\r\nkxNV36r7pWzw9xCN72rFNp7SgmPqlaZDygsuoYJIeaBzUlPoZJPI1k2imVKH\r\n0z1zebuS7SjYbGTK/3WwEtcIXOq7F6XcWx3xEHKxAoAzOJZu0ZnowYhv15Kw\r\netvdAboNXLtnQQ/XPA75bKRseSDI9qQWiLOK4znpL1MWrNf4qkuJEGNuyf8V\r\nHGAXP3ClaQ+zq8viFFLEmHbUZj2OxNBdz+sGFx2RCUB/mpXyI9PzFFx7bo03\r\newgxDCd6RMWP51KH6NQpZS3/aI4kBUzJQvwMcnY/RYvdpabMaJGbxLguT5tk\r\nq9Fm6WzDA1+x5zz/KnySh8Cr7PkAgUgpDh/l5ue0VgN7BJvbJgoWbMODuDsS\r\nuGghR9O6M4XEStEk/1Y2ofsS8eHvLjrPUPXGTcqhrRkzgGJSbFayzBieJqg8\r\njNcO16B29P+/hJDIllOYBgC76GH5z9ofXH5Qo+JPhr6yWx+I3kmsPKlu9oFt\r\n5Pt21qpoXCF8n4u/UouJw1V3hiDUgEyznAI761sWPYOEQH3DDr8wBABaQ/4Q\r\nHevmHC8Jsv7GKF9saB+MORD47kzGI6vRW30=\r\n=71Qd\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"macder","email":"maciej@derulski.com"},"directories":{},"maintainers":[{"name":"macder","email":"maciej@derulski.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/medusa-fulfillment-shippo_0.8.4_1656206228232_0.04667784087935578"},"_hasShrinkwrap":false},"0.8.5":{"name":"medusa-fulfillment-shippo","version":"0.8.5","description":"Shippo fulfillment provider for medusa","author":{"name":"Maciej Derulski"},"license":"MIT","scripts":{"build":"babel src -d . --ignore **/__tests__,**/__mocks__","prepare":"cross-env NODE_ENV=production npm run build","watch":"onchange -v src/** -- copyfiles {{file}} ../my-medusa-store","test":"jest"},"dependencies":{"@babel/plugin-transform-classes":"^7.9.5","@babel/plugin-transform-instanceof":"^7.8.3","binpackingjs":"^3.0.2","body-parser":"^1.19.0","express":"^4.17.1","medusa-core-utils":"^1.1.30","shippo":"git+https://github.com/macder/shippo-node-client.git#medusa"},"peerDependencies":{"medusa-interfaces":"1.x"},"repository":{"type":"git","url":"git+https://github.com/macder/medusa-fulfillment-shippo.git"},"keywords":["medusa","medusa-plugin","medusa-fulfillment","medusa-shippo"],"devDependencies":{"@babel/cli":"^7.7.5","@babel/core":"^7.7.5","@babel/eslint-parser":"^7.15.8","@babel/node":"^7.7.4","@babel/plugin-proposal-class-properties":"^7.7.4","@babel/plugin-transform-runtime":"^7.7.6","@babel/preset-env":"^7.7.5","@babel/register":"^7.7.4","@babel/runtime":"^7.9.6","@faker-js/faker":"^7.3.0","client-sessions":"^0.8.0","copyfiles":"^2.4.1","cross-env":"^5.2.1","eslint":"^8.2.0","eslint-config-google":"^0.14.0","eslint-config-prettier":"^8.3.0","eslint-plugin-prettier":"^4.0.0","jest":"^25.5.2","medusa-test-utils":"^1.1.33","onchange":"^7.1.0"},"gitHead":"b891eda1a27b1a46ed52a7cb548b517675a2b227","bugs":{"url":"https://github.com/macder/medusa-fulfillment-shippo/issues"},"homepage":"https://github.com/macder/medusa-fulfillment-shippo#readme","_id":"medusa-fulfillment-shippo@0.8.5","_nodeVersion":"16.15.1","_npmVersion":"8.11.0","dist":{"integrity":"sha512-dijjKZF1PeGjJB32Cz+Yv4fCVIZ7ZrHHYQ4YhyV7mHdTleG9zJWoYKUkyE5tDKQOQGttUvuJZUAOaLan8SQS9Q==","shasum":"4f49a3b22fcb1678ab3f958cfc02344c62f5e9b5","tarball":"https://registry.npmjs.org/medusa-fulfillment-shippo/-/medusa-fulfillment-shippo-0.8.5.tgz","fileCount":21,"unpackedSize":195384,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCIbDlIRhprWlI01thKbP8K9e+4wku/43tR8s/EwGee7AIhALBXuMHa4JOP9zocYhse1xVY35RoDJLnBGPpn6mBY+Aa"}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJit7aaACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmqrZhAAhq+GvpC+qVK0/rz5CiNI2q14xw9HofmVj1Kxct7b389WAY5z\r\nNMsXkqYgocPZDyzQ2mb3SsBdcxMSSVAFIjdtWkYuvEQ/RecAzkXnQ5d72XbX\r\nXgFofequyRVl+1j/gTWtCCotVyuDaUa+kTyf48x2XuxcfN1hF7AXxngUrZWA\r\n+Iyjy+TqSUmS72I4Wel9zpd0KJDimuY/iRleSHrFzn1hZixp2QLq0hhJOXn5\r\n+dCiDKDkbDJwSCNnxLc70W6hv1cEDZNUHfelh36SZvL1DLxKI7Uw9MJ0RxRO\r\ntlxAIfpJ2oQPt+cQVdz1o8SEnr5HNRjxz3kDEwBdm2i/QMqP3XdI5+rskxa4\r\nlV0GazyPRhvXUN6TY8nGGEi0FMDODphUgqoesuopaDUGPXvgRjdtysOIZNAn\r\n5Hl22eo8uksX8+QcS4yga7L2bj3WNHKb6x4u9Os+Z1sC5lcCdpUAguOKi/Jq\r\n9Snzjj5VM5JE/1xxDzrRu8mpvcg8IWe9UCpINfldV7FY+5fVVX6/7E6cPs3t\r\nvOtFxnMkNS9tq2LKnAJO75IXoMfVv7UjkbNW+ErgS7MQUIldrRjx6hH6FGl8\r\nWMBdAuK1qVGhWNDjfgpXDIr2sXpgbbcN+g9aC3XqtAAm2ccwUnmxpeUaZgSl\r\ncc3TSAuQx3bHWb1c66rxtNSjCQWp/QONR9k=\r\n=03vo\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"macder","email":"maciej@derulski.com"},"directories":{},"maintainers":[{"name":"macder","email":"maciej@derulski.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/medusa-fulfillment-shippo_0.8.5_1656207002406_0.6689226095056213"},"_hasShrinkwrap":false},"0.8.6":{"name":"medusa-fulfillment-shippo","version":"0.8.6","description":"Shippo fulfillment provider for medusa","author":{"name":"Maciej Derulski"},"license":"MIT","scripts":{"build":"babel src -d . --ignore **/__tests__,**/__mocks__","prepare":"cross-env NODE_ENV=production npm run build","watch":"onchange -v src/** -- copyfiles {{file}} ../my-medusa-store","test":"jest"},"dependencies":{"@babel/plugin-transform-classes":"^7.9.5","@babel/plugin-transform-instanceof":"^7.8.3","binpackingjs":"^3.0.2","body-parser":"^1.19.0","express":"^4.17.1","medusa-core-utils":"^1.1.30","shippo":"git+https://github.com/macder/shippo-node-client.git#medusa"},"peerDependencies":{"medusa-interfaces":"1.x"},"repository":{"type":"git","url":"git+https://github.com/macder/medusa-fulfillment-shippo.git"},"keywords":["medusa","medusa-plugin","medusa-fulfillment","medusa-shippo"],"devDependencies":{"@babel/cli":"^7.7.5","@babel/core":"^7.7.5","@babel/eslint-parser":"^7.15.8","@babel/node":"^7.7.4","@babel/plugin-proposal-class-properties":"^7.7.4","@babel/plugin-transform-runtime":"^7.7.6","@babel/preset-env":"^7.7.5","@babel/register":"^7.7.4","@babel/runtime":"^7.9.6","@faker-js/faker":"^7.3.0","client-sessions":"^0.8.0","copyfiles":"^2.4.1","cross-env":"^5.2.1","eslint":"^8.2.0","eslint-config-google":"^0.14.0","eslint-config-prettier":"^8.3.0","eslint-plugin-prettier":"^4.0.0","jest":"^25.5.2","medusa-test-utils":"^1.1.33","onchange":"^7.1.0"},"gitHead":"3edf1090f49c76dabc2860cece699b08217ab252","bugs":{"url":"https://github.com/macder/medusa-fulfillment-shippo/issues"},"homepage":"https://github.com/macder/medusa-fulfillment-shippo#readme","_id":"medusa-fulfillment-shippo@0.8.6","_nodeVersion":"16.15.1","_npmVersion":"8.11.0","dist":{"integrity":"sha512-9wjxYUIZeMUXZRNTBvVXzKebwxUr8qyRANliDFkSKaLKE1y34YbixGK8OXGxex805wQMCdzi32xHKp24gCb1LQ==","shasum":"b7f3be3a9a5a683b03b0e1b62a6af7617abf1f8a","tarball":"https://registry.npmjs.org/medusa-fulfillment-shippo/-/medusa-fulfillment-shippo-0.8.6.tgz","fileCount":21,"unpackedSize":194689,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFTQch9JErASq3VkKm3yTRlWWfsUGTLpZKYZXg245cNKAiBahQeFiHu1HrSIwjsrx/r36wqsZUQcnbhcVnIJ22TU7g=="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJiuW1TACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmr9GBAAlZCJ3s+Hi/ugp51nQQl+zzZ4y3TsWk4saFGrIeA9B+QcxoUS\r\nW0M7lwueLzLz+AaG8+DsFikE6WplKZ18ornN1NB8qn819sNdeq9Jo0/j75Zd\r\nKm1W0XGmucZAgh4JKvaN2xvR2Zq2IihRvQJDjsJ/l/JnLywMdX3LmhnBMpre\r\n92NjBsFfO7BqpzY+SNbnch6eU3XHFLI3YUyiG6tGssy/yope7zTqrpcFCtq7\r\n06dhgyHCK1vuVTttxKuDC3cyX3nmMn7G5JcyZurjftC+LQSvFIVdLavGY01Q\r\njY1QrWTws511jieghz38IjXANeXEsD3Sx86XUW/u6vS8NxLrJOeVpD0kYBES\r\n+4GV0rbDzV1wS0pHqDD27F3HnJctNrd4T+Q6saJLDaC7RqB1zVYj/kB4c/Lv\r\nkKQMoQ4vX6e5dCTxcOD8z9WKG1MD2t5A/NCEZG7+1+nuPKOBocy+/yX77t5C\r\nSBJ4iNGFMtJS0VAVXZCI+7lubV9R3jvFp04DBUTXadtemuLj1n300ef6knwF\r\nbqdegEnJbDq07+Q1BeqzLDipT7XuFI8YoPNrDc36H2nFz6Oh205sfaLVVSTw\r\njYekqnNYRwrqGqYbQD+rPHml195qcbS7qKotUVnUMtiGM50OZgPN2zqEnrdJ\r\naSGG7JxXL0aZCPisKjvK5VxrJdistIFFx4U=\r\n=rbdP\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"macder","email":"maciej@derulski.com"},"directories":{},"maintainers":[{"name":"macder","email":"maciej@derulski.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/medusa-fulfillment-shippo_0.8.6_1656319315831_0.7409705224270802"},"_hasShrinkwrap":false},"0.8.7":{"name":"medusa-fulfillment-shippo","version":"0.8.7","description":"Shippo fulfillment provider for medusa","author":{"name":"Maciej Derulski"},"license":"MIT","scripts":{"build":"babel src -d . --ignore **/__tests__,**/__mocks__","prepare":"cross-env NODE_ENV=production npm run build","watch":"onchange -v src/** -- copyfiles {{file}} ../my-medusa-store","test":"jest"},"dependencies":{"@babel/plugin-transform-classes":"^7.9.5","@babel/plugin-transform-instanceof":"^7.8.3","binpackingjs":"^3.0.2","body-parser":"^1.19.0","express":"^4.17.1","medusa-core-utils":"^1.1.30","shippo":"git+https://github.com/macder/shippo-node-client.git#medusa"},"peerDependencies":{"medusa-interfaces":"1.x"},"repository":{"type":"git","url":"git+https://github.com/macder/medusa-fulfillment-shippo.git"},"keywords":["medusa","medusa-plugin","medusa-fulfillment","medusa-shippo"],"devDependencies":{"@babel/cli":"^7.7.5","@babel/core":"^7.7.5","@babel/eslint-parser":"^7.15.8","@babel/node":"^7.7.4","@babel/plugin-proposal-class-properties":"^7.7.4","@babel/plugin-transform-runtime":"^7.7.6","@babel/preset-env":"^7.7.5","@babel/register":"^7.7.4","@babel/runtime":"^7.9.6","@faker-js/faker":"^7.3.0","client-sessions":"^0.8.0","copyfiles":"^2.4.1","cross-env":"^5.2.1","eslint":"^8.2.0","eslint-config-google":"^0.14.0","eslint-config-prettier":"^8.3.0","eslint-plugin-prettier":"^4.0.0","jest":"^25.5.2","medusa-test-utils":"^1.1.33","onchange":"^7.1.0"},"gitHead":"8e07106b12f545a9e46052c2fe906bfbb892fa96","bugs":{"url":"https://github.com/macder/medusa-fulfillment-shippo/issues"},"homepage":"https://github.com/macder/medusa-fulfillment-shippo#readme","_id":"medusa-fulfillment-shippo@0.8.7","_nodeVersion":"16.15.1","_npmVersion":"8.11.0","dist":{"integrity":"sha512-08JvHMYEQ540ihXKlSVnx3dKmTIjnpT2hSbElCCK8TJ4ijIap6YfQUaUcRVC8s87Z4Bo+xTI1swbygS7KR2sCQ==","shasum":"d7071f561e214cfe160c9ad497409d91aa943d12","tarball":"https://registry.npmjs.org/medusa-fulfillment-shippo/-/medusa-fulfillment-shippo-0.8.7.tgz","fileCount":38,"unpackedSize":352929,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBUDeNDQvxxxKKLBntxNxDWl41JvcBfiAhX1dwAK4NuOAiB/8EzQbYf8RbUxmCLuVBPa8TL+lh8fYZBdApBerd6Mlw=="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJiuqbUACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmqlohAAkW/dhkMb+n064PdQ80X7xDXwHtkxEaYx0nPXrIQ+VrpVxU67\r\nRRoctWz/AUtr8cVPXsquRV83HUq2dp6zWeXeOOnKGoIke9bbKa3WBocfoL5K\r\n+HmJTEXV53M73HK30RnrJQwaocwl1hTL2774OasR3LkWerc0oG1J8jIsYtBu\r\n6CGG47dZkFc7z2jCIKwRVCF5wJRd7MAGadrYm+nDb2A5KC8Pua1AvizPByiP\r\nQuJHxz6EMkK7k4OYpRGiNlch3L+8cnQDHPfgc8lUkv6AeHce4McLYPTQaUE0\r\n4OQlbEXCtSlw7weC/pvvmO/FLMPBrdZkhBGEBSGnjSofi+mnUlA1OYWreklJ\r\nmbGDsZzD7Z4iDLfiAqCPGRbFxIgWbGYu4otmIOj69RnmOTQyScRArxKnfXUZ\r\nbNTbPxrT1ZX4YIiRQKEvvitXxSNUxuseT8AcZvfVIojZA8g4hAdeXxntPRUG\r\nBE+MYF9zdl8VFpyU2fOByclhvkDleQUohdbtGoM0Z6FkheiBIyW49XfJRF6R\r\n1RF401tq/LvsmV5Py8BCJ035eICiWuANC/rHFhwM1CsWf6ePeJ5igOSeS62O\r\nOscG2vrJWrV6dbT+4IQ7IafQWbLDLm5OzHZgaZ/AQ4R+sqn7PtqRCbSd/dgX\r\nSzsngCy6ccZB1TwprX5xddxmejeTz2iDVyY=\r\n=h+5b\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"macder","email":"maciej@derulski.com"},"directories":{},"maintainers":[{"name":"macder","email":"maciej@derulski.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/medusa-fulfillment-shippo_0.8.7_1656399571957_0.9049354628066997"},"_hasShrinkwrap":false},"0.9.0":{"name":"medusa-fulfillment-shippo","version":"0.9.0","description":"Shippo fulfillment provider for medusa","author":{"name":"Maciej Derulski"},"license":"MIT","scripts":{"build":"babel src -d . --ignore **/__tests__,**/__mocks__","prepare":"cross-env NODE_ENV=production npm run build","watch":"onchange -v src/** -- copyfiles {{file}} ../my-medusa-store","test":"jest"},"dependencies":{"@babel/plugin-transform-classes":"^7.9.5","@babel/plugin-transform-instanceof":"^7.8.3","binpackingjs":"^3.0.2","body-parser":"^1.19.0","express":"^4.17.1","medusa-core-utils":"^1.1.30","shippo":"git+https://github.com/macder/shippo-node-client.git#medusa"},"peerDependencies":{"medusa-interfaces":"1.x"},"repository":{"type":"git","url":"git+https://github.com/macder/medusa-fulfillment-shippo.git"},"keywords":["medusa","medusa-plugin","medusa-fulfillment","medusa-shippo"],"devDependencies":{"@babel/cli":"^7.7.5","@babel/core":"^7.7.5","@babel/eslint-parser":"^7.15.8","@babel/node":"^7.7.4","@babel/plugin-proposal-class-properties":"^7.7.4","@babel/plugin-transform-runtime":"^7.7.6","@babel/preset-env":"^7.7.5","@babel/register":"^7.7.4","@babel/runtime":"^7.9.6","@faker-js/faker":"^7.3.0","client-sessions":"^0.8.0","copyfiles":"^2.4.1","cross-env":"^5.2.1","eslint":"^8.2.0","eslint-config-google":"^0.14.0","eslint-config-prettier":"^8.3.0","eslint-plugin-prettier":"^4.0.0","jest":"^25.5.2","medusa-test-utils":"^1.1.33","onchange":"^7.1.0"},"gitHead":"22758689b107eaa972e4f9e0b14cf7e4dc82b552","bugs":{"url":"https://github.com/macder/medusa-fulfillment-shippo/issues"},"homepage":"https://github.com/macder/medusa-fulfillment-shippo#readme","_id":"medusa-fulfillment-shippo@0.9.0","_nodeVersion":"16.15.1","_npmVersion":"8.11.0","dist":{"integrity":"sha512-+cOnjfIGBxcp5CmN/nh29LTmqDkvWMjGrZfWWAvsth6Cs97n/SiM3BuP3sKbmTnwp48sQDXZRQkRgBSQlD50nw==","shasum":"939c069846483272cf2e09ef7effc4c60773a002","tarball":"https://registry.npmjs.org/medusa-fulfillment-shippo/-/medusa-fulfillment-shippo-0.9.0.tgz","fileCount":21,"unpackedSize":205724,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIG5F8IbkDmFzqSjB7iUnXe8OLKLgugw/k/79Srrcn2zeAiAL2map2UhUI3/cU+oIqtTJ2rUXeRDkphKcq1MtcXHPBg=="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJivBXDACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmpXCg/+NkY97h+OkK7ZAxu7HY29VlmMsMNiSR2NuaXUs4fOFZ1ftCRh\r\nKcUe9nya7EkWEVQqUj8hfOJlMCnXP5y5r63gXlhkc1cCt9y8sDCbtDO6bkBO\r\nmnSU0NssimrnAJNP1yDKF1nUs9s2P65+a8+trXt0A/GAC4CExiLOLHiZIJgO\r\nRcqsV0Nb/vKktXbCuyAE7eh7KudrdHOdReKT4U8ccbzXmi+V8plozR2mUnwE\r\nKSeDF8OcbR4nAVJVezNXW9hXg88A3YpDADGSdE7FoPs3KFqU7bZ+d8jGB/Bj\r\nOt9/81PZO4Bse0r1IiZ+/IoKYAKSypdnwXMezBp6hWBfVN3W8Urt3bTnK7TT\r\nUV+hNa42v6eqNOZ5C066OHmYL13HbR3WA/GG2ZY4u+bKNX/7s48OltMYuBPZ\r\nLRXTvHGQ8CRN7/kdO5eTEt950lH0zEwJ1Zb161tsjDOwh0PxS6yhJjX9WRP6\r\nKMTeI6oMNQGzgv3WtMSQHoc2+3jQ3rxi0kyBVtqTwxym7lxtwH7kbWixtK42\r\nP0/yg9XHAuvTLzYlwahKyCk91c32HGOvBy4QZ9aWcITrwd2DIE9RePB7BbsT\r\n2V4hbbZOIOcsaqS1DNxODVkfX9okgM7HYYjlyuJwnbQP6CEvspa50nyLN731\r\nYoj730fNOeBDSuCTH9p18W7177KKa8xRO2c=\r\n=63Sl\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"macder","email":"maciej@derulski.com"},"directories":{},"maintainers":[{"name":"macder","email":"maciej@derulski.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/medusa-fulfillment-shippo_0.9.0_1656493507083_0.984743411040631"},"_hasShrinkwrap":false},"0.10.0":{"name":"medusa-fulfillment-shippo","version":"0.10.0","description":"Shippo fulfillment provider for medusa","author":{"name":"Maciej Derulski"},"license":"MIT","scripts":{"build":"babel src -d . --ignore **/__tests__,**/__mocks__","prepare":"cross-env NODE_ENV=production npm run build","watch":"onchange -v src/** -- copyfiles {{file}} ../my-medusa-store","test":"jest"},"dependencies":{"@babel/plugin-transform-classes":"^7.9.5","@babel/plugin-transform-instanceof":"^7.8.3","binpackingjs":"^3.0.2","body-parser":"^1.19.0","express":"^4.17.1","medusa-core-utils":"^1.1.30","shippo":"git+https://github.com/macder/shippo-node-client.git#medusa"},"peerDependencies":{"medusa-interfaces":"1.x"},"repository":{"type":"git","url":"git+https://github.com/macder/medusa-fulfillment-shippo.git"},"keywords":["medusa","medusa-plugin","medusa-fulfillment","medusa-shippo"],"devDependencies":{"@babel/cli":"^7.7.5","@babel/core":"^7.7.5","@babel/eslint-parser":"^7.15.8","@babel/node":"^7.7.4","@babel/plugin-proposal-class-properties":"^7.7.4","@babel/plugin-transform-runtime":"^7.7.6","@babel/preset-env":"^7.7.5","@babel/register":"^7.7.4","@babel/runtime":"^7.9.6","@faker-js/faker":"^7.3.0","client-sessions":"^0.8.0","copyfiles":"^2.4.1","cross-env":"^5.2.1","eslint":"^8.2.0","eslint-config-google":"^0.14.0","eslint-config-prettier":"^8.3.0","eslint-plugin-prettier":"^4.0.0","jest":"^25.5.2","medusa-test-utils":"^1.1.33","onchange":"^7.1.0"},"gitHead":"4476db74c0f33a3080b8b3da351d1d8026956b4d","bugs":{"url":"https://github.com/macder/medusa-fulfillment-shippo/issues"},"homepage":"https://github.com/macder/medusa-fulfillment-shippo#readme","_id":"medusa-fulfillment-shippo@0.10.0","_nodeVersion":"16.15.1","_npmVersion":"8.11.0","dist":{"integrity":"sha512-IwiYTxBxNHnx2XLOQOiM64yJFOkChPGn4kFLq/bSK8HdOUFCb2z6BdENtTlucuU8CgD4RWI+i36b0oPmvokxhA==","shasum":"88e241c52f309daf223a3200ba07b7bbf2e7a528","tarball":"https://registry.npmjs.org/medusa-fulfillment-shippo/-/medusa-fulfillment-shippo-0.10.0.tgz","fileCount":39,"unpackedSize":414780,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIEfg5EmniMLlgIi+DKOp6WxsCTtqaBJWvgyKrFlWGGt8AiAOnu+eYbFfwYcAAtXKKfewoW+ivCpurYdV4oF/6VT9/A=="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJivUhCACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmp8Fg//Q4HyGb8SXkaoMVGDOSvnkg/js9ADsXXlSlFQ5PVRBthLDdrP\r\n/3YKATh6/Ecm6+Dit/PRBHII7Ojz2Z9qgmB8SBsI/Y36CK34MIJwvWuhh1zs\r\nAnwOD03nvlwW57ebdo7xb19H7rCGOXt7AejxXJ+G+CEoOjc80KFISz7qKy6z\r\nIAhNYATbhfwO4J2S1+iOg7pwVXtZvuPKnDYbfIhZZfCS0VhfN7ECvNpgKneq\r\nJV00lDNLe+5JJn7uhBqMykkpC/cpB6vKnBMIERBnJXevYELdOmdhLHADbmU0\r\nrysC7I9G1ExkHH4lAhAveyMWCMaajsGtGxHCwj3JV3o2r4+fEMkwcPYQ7suR\r\ntNJziUErGArkFmpaPPMYzYxXh3xTtUYq6viMOMYDAOjzZ1Ht1ZiCIEFc+cIL\r\nIRsFDPuYuaEQNGi8rcbRVxT0algigV7+/+acCZg1rK5p/td67utHULDiPC03\r\n1d5/zEi5+jVCkH1vOcskKPY3sT8YRtieJBtVViIMpy+faSi2E8ezWheyVBJd\r\njpgGKe1PfLM0qgedd56x4mUKm2Mf50zSPjQZcf3WkpuWpkG6Ix82OeqQeCSp\r\nWTuMf9Yl6obnVqzYIU9nKElUotLXH1xWcvR3gPKDgK4gI4Cnwc3tWvcNGPPn\r\nbiP218TguEwI10UhMoO1xK8FsPkTCukmDlE=\r\n=ozvD\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"macder","email":"maciej@derulski.com"},"directories":{},"maintainers":[{"name":"macder","email":"maciej@derulski.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/medusa-fulfillment-shippo_0.10.0_1656571970390_0.6947670030141508"},"_hasShrinkwrap":false},"0.10.1":{"name":"medusa-fulfillment-shippo","version":"0.10.1","description":"Shippo fulfillment provider for medusa","author":{"name":"Maciej Derulski"},"license":"MIT","scripts":{"build":"babel src -d . --ignore **/__tests__,**/__mocks__","prepare":"cross-env NODE_ENV=production npm run build","watch":"onchange -v src/** -- copyfiles {{file}} ../my-medusa-store","test":"jest"},"dependencies":{"@babel/plugin-transform-classes":"^7.9.5","@babel/plugin-transform-instanceof":"^7.8.3","binpackingjs":"^3.0.2","body-parser":"^1.19.0","express":"^4.17.1","medusa-core-utils":"^1.1.30","shippo":"git+https://github.com/macder/shippo-node-client.git#medusa"},"peerDependencies":{"medusa-interfaces":"1.x"},"repository":{"type":"git","url":"git+https://github.com/macder/medusa-fulfillment-shippo.git"},"keywords":["medusa","medusa-plugin","medusa-fulfillment","medusa-shippo"],"devDependencies":{"@babel/cli":"^7.7.5","@babel/core":"^7.7.5","@babel/eslint-parser":"^7.15.8","@babel/node":"^7.7.4","@babel/plugin-proposal-class-properties":"^7.7.4","@babel/plugin-transform-runtime":"^7.7.6","@babel/preset-env":"^7.7.5","@babel/register":"^7.7.4","@babel/runtime":"^7.9.6","@faker-js/faker":"^7.3.0","client-sessions":"^0.8.0","copyfiles":"^2.4.1","cross-env":"^5.2.1","eslint":"^8.2.0","eslint-config-google":"^0.14.0","eslint-config-prettier":"^8.3.0","eslint-plugin-prettier":"^4.0.0","jest":"^25.5.2","medusa-test-utils":"^1.1.33","onchange":"^7.1.0"},"gitHead":"0dae40f0c9c2e6375e9861f371f17993ef16842a","bugs":{"url":"https://github.com/macder/medusa-fulfillment-shippo/issues"},"homepage":"https://github.com/macder/medusa-fulfillment-shippo#readme","_id":"medusa-fulfillment-shippo@0.10.1","_nodeVersion":"16.15.1","_npmVersion":"8.11.0","dist":{"integrity":"sha512-RTsXOgk3tcQE0jDUVmaL4yoflZpT/4P+q5Qs2amSoXo41Y/g/rUDxLak+HLjR0HFhYdWhUUjtkkVifWRLfFgOQ==","shasum":"f42b1a8259488ba468cc9e91e488a7d4d60cd2b4","tarball":"https://registry.npmjs.org/medusa-fulfillment-shippo/-/medusa-fulfillment-shippo-0.10.1.tgz","fileCount":39,"unpackedSize":422241,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDepx9VV3aW1CeYAhv6tnfE9WYa3rWHaiTwJqYB/N08YAIgDXcYH92J93UgjtPkqjbv7a/A/DZE2fJXZBPlpu8rcu0="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJivkjMACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmpcnA//U9apIl5qMKqCQvC1YUF5O+tRalokoyfDVc6PfZGzs9Makn2L\r\nJQYjwLzhenT2Xvxw7jAlVPMRPkv+uY09fRv4LdlGLkfFQdDNvEUe5MpKgVKv\r\n5yjJFE9vOG0gaJBZgyjsCiwfUXntOY/osS9WvMQqCZUL9S0qhXD7cSUeDhW+\r\nNTSzCBQAs2+FtF9ZPNWfj4Qw68S/S4xSrZcBMU7dmRTYilt2NoGsuTfzou3o\r\nHn/hBTvhOIDNM753jqXYjFnHeMcf98RsGQcbtEe2gHPOvnMHqGJodgNBGXNM\r\nPiANf0rIj/ZmarfK45qQSR6e73y/G80Lcs69ZjBL55syokYAEkQCe/4YrPIE\r\nOq6AtQsoTt5Ce47LBiRm0aPDQY6yboTyz76XOQBw6Hmrreqi6p/x1PH8dtM+\r\nDOQERbsemwk+XGnpT9ilaUtX3cwJM2tP/cjekxKX7qCHPGFaQWi1GW1p9DPO\r\nFJ82/YhDXiviD3Hgk1EuFj9Xs7X5TgcTfGVKwQVRYvFhcqn7ipTvleCGoTvI\r\nta2K/XdiI/B/jin0SMryKhW/Tipd+wc4k4qFhSXyDF4Qzs9NnB4YUMoFEJ9y\r\nZHKoTB49Tz+BQN6JYIK6OcrUAzhJNVIcdnAr7YETDv+LxDvo4/VA66WgBCOg\r\nMd06jgcwmhAjRIrJFVrLun/hGs1KkDH/M0s=\r\n=eifD\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"macder","email":"maciej@derulski.com"},"directories":{},"maintainers":[{"name":"macder","email":"maciej@derulski.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/medusa-fulfillment-shippo_0.10.1_1656637644381_0.6871499905127516"},"_hasShrinkwrap":false},"0.10.2":{"name":"medusa-fulfillment-shippo","version":"0.10.2","description":"Shippo fulfillment provider for medusa","author":{"name":"Maciej Derulski"},"license":"MIT","scripts":{"build":"babel src -d . --ignore **/__tests__,**/__mocks__","prepare":"cross-env NODE_ENV=production npm run build","watch":"onchange -v src/** -- copyfiles {{file}} ../my-medusa-store","test":"jest"},"dependencies":{"@babel/plugin-transform-classes":"^7.9.5","@babel/plugin-transform-instanceof":"^7.8.3","binpackingjs":"^3.0.2","body-parser":"^1.19.0","express":"^4.17.1","medusa-core-utils":"^1.1.30","shippo":"git+https://github.com/macder/shippo-node-client.git#medusa"},"peerDependencies":{"medusa-interfaces":"1.x"},"repository":{"type":"git","url":"git+https://github.com/macder/medusa-fulfillment-shippo.git"},"keywords":["medusa","medusa-plugin","medusa-fulfillment","medusa-shippo"],"devDependencies":{"@babel/cli":"^7.7.5","@babel/core":"^7.7.5","@babel/eslint-parser":"^7.15.8","@babel/node":"^7.7.4","@babel/plugin-proposal-class-properties":"^7.7.4","@babel/plugin-transform-runtime":"^7.7.6","@babel/preset-env":"^7.7.5","@babel/register":"^7.7.4","@babel/runtime":"^7.9.6","@faker-js/faker":"^7.3.0","client-sessions":"^0.8.0","copyfiles":"^2.4.1","cross-env":"^5.2.1","eslint":"^8.2.0","eslint-config-google":"^0.14.0","eslint-config-prettier":"^8.3.0","eslint-plugin-prettier":"^4.0.0","jest":"^28.1.2","jest-extended":"^2.0.0","medusa-test-utils":"^1.1.33","onchange":"^7.1.0"},"gitHead":"bec58eee00610e0483d5dfe8b0c5910792eb7d84","bugs":{"url":"https://github.com/macder/medusa-fulfillment-shippo/issues"},"homepage":"https://github.com/macder/medusa-fulfillment-shippo#readme","_id":"medusa-fulfillment-shippo@0.10.2","_nodeVersion":"16.15.1","_npmVersion":"8.11.0","dist":{"integrity":"sha512-hyJK/icPchsUYc9EfnXuOGpOBMUmsOGeY7N5hHFJQPSxUeRZ4I2xn1QFzpyfC///D8cvxj4YfmO0Dc+gIb9cvA==","shasum":"2f13e03724f48cb04375825379cda6e0c0eda8d3","tarball":"https://registry.npmjs.org/medusa-fulfillment-shippo/-/medusa-fulfillment-shippo-0.10.2.tgz","fileCount":22,"unpackedSize":229214,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHZTZ/hRDPA1RMxvOOwjP/0KoFsuqr8lmGoJk8CKjddzAiEAuQKofme8uRk9JBaSu67U+2NDDSUgWinL0SKAFbnlMe0="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJivn2DACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmqQkQ/8C6NBqAjys5/YfrF9O6In7mrGAL62T3DpzucIwS9Ue+zyI06G\r\nyqmVfCcgzMdJs8gXK7pSDhxObFRm6TiadfqqudeC16cwxWFEtcrxDF1hRUNV\r\nb3WmgIXFW7bo+Vo16Ldh3FTdwkDP0yBiZPRtENb6fS2Jvhikmt+xdbW/qum9\r\n+aQh3k0Oag5WS5gG0E514yCjnymT5VMhA+yu9Q166bIN1flcrF8fVsUFiH+r\r\nNVVmaUAwt8YvjFTd2cqb5oq5ni0DlObEsRiI3bP1JUE509pKLaxj0CoBiZsE\r\no4HbpQ7HQy1FlIXnACSn9qKeHQg8ePwEQDZm39Hl8hLo0f7a2zYVmYFu8AhY\r\nPHrgLyy997ujdKE5VSU1yY1dq/XUE6l7DFOvFCgGkajPS69uYDC3FEZEXyeg\r\nhjQbRY86ozmhKAYKbybt59B+7t9+vcb9ou2U98yeGNj9wVC4qjCsGwvoWJdg\r\n8xcZSayK7rMH9DVo3KsLlBGBuJ4y8q8yYT8/7fJzd56Sd4L4AsgBfF4fMpTJ\r\nleKRyfTFfAtEyV1+fn+L3ufpe9+3Eq8+SUjjWiZrt3Ih0MaLyy9iUn0AXgII\r\nzeucdN43BJzoCeGGVOLtDvbXkZ2YQEKhoPp6Vpp6wy//UnunklW/VW+E5qBc\r\nnlmSPLPF314V3Q9iPoC1Oma0AKGPRuRbj94=\r\n=02KD\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"macder","email":"maciej@derulski.com"},"directories":{},"maintainers":[{"name":"macder","email":"maciej@derulski.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/medusa-fulfillment-shippo_0.10.2_1656651139020_0.6632135939536214"},"_hasShrinkwrap":false},"0.10.3":{"name":"medusa-fulfillment-shippo","version":"0.10.3","description":"Shippo fulfillment provider for medusa","author":{"name":"Maciej Derulski"},"license":"MIT","scripts":{"build":"babel src -d . --ignore **/__tests__,**/__mocks__","prepare":"cross-env NODE_ENV=production npm run build","watch":"onchange -v src/** -- copyfiles {{file}} ../my-medusa-store","test":"jest"},"dependencies":{"@babel/plugin-transform-classes":"^7.9.5","@babel/plugin-transform-instanceof":"^7.8.3","binpackingjs":"^3.0.2","body-parser":"^1.19.0","express":"^4.17.1","medusa-core-utils":"^1.1.30","shippo":"git+https://github.com/macder/shippo-node-client.git#medusa"},"peerDependencies":{"medusa-interfaces":"1.x"},"repository":{"type":"git","url":"git+https://github.com/macder/medusa-fulfillment-shippo.git"},"keywords":["medusa","medusa-plugin","medusa-fulfillment","medusa-shippo"],"devDependencies":{"@babel/cli":"^7.7.5","@babel/core":"^7.7.5","@babel/eslint-parser":"^7.15.8","@babel/node":"^7.7.4","@babel/plugin-proposal-class-properties":"^7.7.4","@babel/plugin-transform-runtime":"^7.7.6","@babel/preset-env":"^7.7.5","@babel/register":"^7.7.4","@babel/runtime":"^7.9.6","@faker-js/faker":"^7.3.0","client-sessions":"^0.8.0","copyfiles":"^2.4.1","cross-env":"^5.2.1","eslint":"^8.2.0","eslint-config-google":"^0.14.0","eslint-config-prettier":"^8.3.0","eslint-plugin-prettier":"^4.0.0","jest":"^28.1.2","jest-extended":"^2.0.0","medusa-test-utils":"^1.1.33","onchange":"^7.1.0"},"gitHead":"7af511b735924ca87ab518305df26a0a6f21195f","bugs":{"url":"https://github.com/macder/medusa-fulfillment-shippo/issues"},"homepage":"https://github.com/macder/medusa-fulfillment-shippo#readme","_id":"medusa-fulfillment-shippo@0.10.3","_nodeVersion":"16.15.1","_npmVersion":"8.11.0","dist":{"integrity":"sha512-kJNs4KIYfFTGBrJGGsSTGaEd8AxUy1KxE2JdterQJ/jJjJcHSMoTq1ZvQkzUNHsjN/5/d43YMlU9mEJ6lPXbCg==","shasum":"94e71fac0cea18970bd1a7b5cd4bfe4efe7866fd","tarball":"https://registry.npmjs.org/medusa-fulfillment-shippo/-/medusa-fulfillment-shippo-0.10.3.tgz","fileCount":20,"unpackedSize":225922,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFvv61nkC6ZQeubJCKPT0a01HusmMzzlRYB/UEFuwNTCAiBClVWXh+86F4z48tf58I2u1dqsted35qAmPivSCqUdQg=="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJiv7mcACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmraKg//eMI7XtrIEgXKLqv51dXbY8yyGTl2ruqRSp6FD0Q5U3h5MoUH\r\n0cW+VqxkV3vLMmj/GcAFQZE/EAJkhvV9d96qPuvU3xEcMtLFXyJdpwszGwm5\r\nIrrX7aC1tzPcl7bK4Cq7fVSClUY7v3+boLXpEXiidgzpMbJ/o8Gum3qocPRu\r\nCbMity7/C5NADcgWpm1KekSuuXpsmKY1ZXqZBZGnrku4ZKqfUE6hmYc0O6mB\r\njgE0GyWYDkjrc2Kk5dmwGnJ5xHCNG1pLhX73rioGyy4DjYjnnNoUbvQp5Gun\r\n0j6lH5lPF7fbFGdNJV+NFYa4CwPIKE4Q4pv79/j2BQd+A9SDIe7f9JMzqDjU\r\ngNaxNxHLr34jpl/xsqs/45QKMBxPs09DeH2akZPH0okyMJQY+D57TU4T4J9h\r\nsnN3QyWS2ZQSSqNbkFcAydyyutUazbXlXx2NYsbhUQf/hvhBPn5ru4lXxxe6\r\nKIecmghs4KZ6Uz7uDmRWY+glDCN5hXkWoLMyblgOADIPo8JuxyUcRU/2FrPg\r\njqeERZnmoYcv5xzAEu2Srv0MUx8zVO6U1B5F4I1oiwJ+72AzEAUFfhsP8ufa\r\nnCznRCIDl4+qvtOhLmDJoIhCjcSpdgXHSdROpU0A1iMrHC00l6wRWFrwxz8t\r\nnY9+gnt0tDCTkxO6ppUUzueB6c7asEV1P/Q=\r\n=sElr\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"macder","email":"maciej@derulski.com"},"directories":{},"maintainers":[{"name":"macder","email":"maciej@derulski.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/medusa-fulfillment-shippo_0.10.3_1656732059795_0.9716085513644837"},"_hasShrinkwrap":false},"0.10.4":{"name":"medusa-fulfillment-shippo","version":"0.10.4","description":"Shippo fulfillment provider for medusa","author":{"name":"Maciej Derulski"},"license":"MIT","scripts":{"build":"babel src -d . --ignore **/__tests__,**/__mocks__","prepare":"cross-env NODE_ENV=production npm run build","watch":"onchange -v src/** -- copyfiles {{file}} ../my-medusa-store","test":"jest"},"dependencies":{"binpackingjs":"^3.0.2","body-parser":"^1.19.0","express":"^4.17.1","medusa-core-utils":"^1.1.30","shippo":"git+https://github.com/macder/shippo-node-client.git#medusa"},"peerDependencies":{"medusa-interfaces":"1.x"},"repository":{"type":"git","url":"git+https://github.com/macder/medusa-fulfillment-shippo.git"},"keywords":["medusa","medusa-plugin","medusa-fulfillment","medusa-shippo"],"devDependencies":{"@babel/cli":"^7.7.5","@babel/core":"^7.7.5","@babel/eslint-parser":"^7.15.8","@babel/node":"^7.7.4","@babel/plugin-proposal-class-properties":"^7.7.4","@babel/plugin-transform-runtime":"^7.7.6","@babel/preset-env":"^7.7.5","@babel/plugin-transform-classes":"^7.9.5","@babel/plugin-transform-instanceof":"^7.8.3","@babel/register":"^7.7.4","@babel/runtime":"^7.9.6","@faker-js/faker":"^7.3.0","client-sessions":"^0.8.0","copyfiles":"^2.4.1","cross-env":"^5.2.1","eslint":"^8.2.0","eslint-config-google":"^0.14.0","eslint-config-prettier":"^8.3.0","eslint-plugin-prettier":"^4.0.0","jest":"^28.1.2","jest-extended":"^2.0.0","medusa-test-utils":"^1.1.33","onchange":"^7.1.0"},"gitHead":"83dd0b140a98b5c799df792279ebafe746afbc55","bugs":{"url":"https://github.com/macder/medusa-fulfillment-shippo/issues"},"homepage":"https://github.com/macder/medusa-fulfillment-shippo#readme","_id":"medusa-fulfillment-shippo@0.10.4","_nodeVersion":"16.15.1","_npmVersion":"8.11.0","dist":{"integrity":"sha512-xwl7mhDUqBYEcEW4oDmEmxJ8zla+5owzMv1kzN4k4thq6QFOZdFp+ZgihxtaUJVcakoKFJgL41C1XH2Ljv5jtA==","shasum":"ae260595ac1d68e037b43298927299f8579e53e9","tarball":"https://registry.npmjs.org/medusa-fulfillment-shippo/-/medusa-fulfillment-shippo-0.10.4.tgz","fileCount":20,"unpackedSize":227386,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDrZkT/qw3aJ+slaZTTkow78SDViqGyGO8y6EXvzpsMdwIgMNKorEjxqMTHZ7zU6nLHs9nzo7mqWesDtrKNg1VaHY0="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJiwRTMACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmqhtBAAhxxFnO/kt1PfOvRgKPskWMq+WO/OQx2nQWNBxQAhSR9KrX4D\r\nCuJgn5Cm12mS9pnwaqFcMAFGCl+8LoCv90HsXY+VAB6Z7citBTn8V90w1FUB\r\nMeE7EIuxePtTjrYHvzTK1USgLvXWysBE2oIY8pGFVeulxEQ5tMBtmhkxJHEb\r\nvL713VZ1xNfpMoBYBPVkTpGfQvKSzM04DM/UYlCm8FpJGFqv79LhzZFT7i/F\r\nfM4sQu6VoGE5w/Rd20eScHigKrvcQ6AlacKAsM22BTUCVb9tae6m8bxSLOX4\r\noNLS2TogXcKN0xFWaVabJEBoCvM5sxyxlzau48Cw76T5vRxEVdLruLm36ryb\r\nKfhi2zm7/izJdhzNAKiv3E+RT21NJrhxPLG53rE6Zw+kPPKNCLMyCKnMdwA/\r\nCgsNnFM1U0PU5acKR2WWz1I6mGeRsdVzl0M0salIRnJsoEpqWSDnfHdiZg/J\r\nRdIsNYWGkmbHpof6IclWeZVzIYPgnzcFfVgyiHxuXZurd8JVZrU4heK4duys\r\n4o94S7t38xj6dR2F6aWYr11OzkudLoIQmZW5uwhQLSC1ZHMpcUe5B+BfgH6j\r\np2Ql0cVPasUSKCKudhSq4lm9/CnId+dUsjuEzo/f8nriW7M0DyJ+dy7dPQJm\r\nr+Kx1GM7Y08qWehAfk4GX4WBHJ2EqhgJee8=\r\n=7D7Z\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"macder","email":"maciej@derulski.com"},"directories":{},"maintainers":[{"name":"macder","email":"maciej@derulski.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/medusa-fulfillment-shippo_0.10.4_1656820939600_0.34053832122259053"},"_hasShrinkwrap":false},"0.11.0":{"name":"medusa-fulfillment-shippo","version":"0.11.0","description":"Shippo fulfillment provider for medusa","author":{"name":"Maciej Derulski"},"license":"MIT","scripts":{"build":"babel src -d . --ignore **/__tests__,**/__mocks__","prepare":"cross-env NODE_ENV=production npm run build","watch":"onchange -v src/** -- copyfiles {{file}} ../my-medusa-store","test":"jest"},"dependencies":{"binpackingjs":"^3.0.2","body-parser":"^1.19.0","express":"^4.17.1","express-rate-limit":"^6.4.0","medusa-core-utils":"^1.1.30","shippo":"git+https://github.com/macder/shippo-node-client.git#medusa"},"peerDependencies":{"medusa-interfaces":"1.x"},"repository":{"type":"git","url":"git+https://github.com/macder/medusa-fulfillment-shippo.git"},"keywords":["medusa","medusa-plugin","medusa-fulfillment","medusa-shippo"],"devDependencies":{"@babel/cli":"^7.7.5","@babel/core":"^7.7.5","@babel/eslint-parser":"^7.15.8","@babel/node":"^7.7.4","@babel/plugin-proposal-class-properties":"^7.7.4","@babel/plugin-transform-classes":"^7.9.5","@babel/plugin-transform-instanceof":"^7.8.3","@babel/plugin-transform-runtime":"^7.7.6","@babel/preset-env":"^7.7.5","@babel/register":"^7.7.4","@babel/runtime":"^7.9.6","@faker-js/faker":"^7.3.0","client-sessions":"^0.8.0","copyfiles":"^2.4.1","cross-env":"^5.2.1","eslint":"^8.2.0","eslint-config-google":"^0.14.0","eslint-config-prettier":"^8.3.0","eslint-plugin-prettier":"^4.0.0","jest":"^28.1.2","jest-extended":"^2.0.0","medusa-test-utils":"^1.1.33","onchange":"^7.1.0"},"gitHead":"af7d640c2edc735e283867ae62aaa0738ae6cf93","bugs":{"url":"https://github.com/macder/medusa-fulfillment-shippo/issues"},"homepage":"https://github.com/macder/medusa-fulfillment-shippo#readme","_id":"medusa-fulfillment-shippo@0.11.0","_nodeVersion":"16.15.1","_npmVersion":"8.11.0","dist":{"integrity":"sha512-nd78nBDUY/K+9mWR9oZsycuhVxLU1ER050IGrVvHvFleZ7e6oXE9nEdPqg3/LQeEYYVgh5lYaPGTA8wsjlVDBQ==","shasum":"1eaa2083215ea93a76937f636b88edff48b9bdaf","tarball":"https://registry.npmjs.org/medusa-fulfillment-shippo/-/medusa-fulfillment-shippo-0.11.0.tgz","fileCount":24,"unpackedSize":296864,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIEVRFyyXPlP0vbr4aEgJhK7x894v9oINit5AHIzZKeftAiAjeFtHhaVN1BDWzAIiGFJZsacWRLlmiMMoeMbMx7M0Bg=="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJiw+5VACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmpFDg//Z0OemFWmC8kMODOLbfkkea4CbwOxf0173zKRNIA1g5Kuftoe\r\nhdLIhhkcgnaG0Vl1J9fh3WEHxvIn7VZteP+3YBexYf54a6lQl9hgm97XSrp+\r\nw2VMdUJHtjfim5nEImooCXvy6aVp8UIEVx2wbHjhWhjI3TPZ05nQ0utV1+Nc\r\nxBFyKoy94Ub8KZZUa6SI2RKCUhi5woojboPQpZN8Az3V3F14Wip/UvZXBsez\r\nGChi5bpYHj35zSJgN7/2W0/pIDLAoujlj75h/6zHM5Q/b25bdF7pwUUJGdMk\r\nwiHysXza3NBEgGlzx47hH1+BkCg4ABUf4Im53s6qmCY6CsplmJNlZBwg4tqP\r\na+e1+FA2vfVM8xS+vW4CyOUt1/G3x8pkiRWC2/PJ8QUOnQQgpsaqnd6JKygE\r\nUrDXd0A8ypJAcFkFHiG8Z1Y12+zws0sn2IFKTAk9NfAErNy8ZPfcAMF35Typ\r\n6m5mv+jVp2P3TcpwO0RTQPXS+cFQlvXHJe9uMmqQxo3vcvhlfKtKgINn6tF7\r\nINIXXIjsH2gZkp8sAEKFu00tCQg8GcmO31DKG2zQNZ863m2Kimuib/yOORk1\r\nDGU/07ro/p/hnlTOlt1WWIWUbbLcDz7t8DGw+aSWfwY/70ERTjuvrMn/rSfT\r\nSkB5O6cEX3Wa5AmguKfpZsVEc+MEIGNVuEU=\r\n=ixJa\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"macder","email":"maciej@derulski.com"},"directories":{},"maintainers":[{"name":"macder","email":"maciej@derulski.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/medusa-fulfillment-shippo_0.11.0_1657007701284_0.9628613693284076"},"_hasShrinkwrap":false},"0.12.0":{"name":"medusa-fulfillment-shippo","version":"0.12.0","description":"Shippo fulfillment provider for medusa","author":{"name":"Maciej Derulski"},"license":"MIT","scripts":{"build":"babel src -d . --ignore **/__tests__,**/__mocks__","prepare":"cross-env NODE_ENV=production npm run build","watch":"onchange -v src/** -- copyfiles {{file}} ../my-medusa-store","test":"jest"},"dependencies":{"binpackingjs":"^3.0.2","body-parser":"^1.19.0","express":"^4.17.1","express-rate-limit":"^6.4.0","medusa-core-utils":"^1.1.30","shippo":"git+https://github.com/macder/shippo-node-client.git#medusa"},"peerDependencies":{"medusa-interfaces":"1.x"},"repository":{"type":"git","url":"git+https://github.com/macder/medusa-fulfillment-shippo.git"},"keywords":["medusa","medusa-plugin","medusa-fulfillment","medusa-shippo"],"devDependencies":{"@babel/cli":"^7.7.5","@babel/core":"^7.7.5","@babel/eslint-parser":"^7.15.8","@babel/node":"^7.7.4","@babel/plugin-proposal-class-properties":"^7.7.4","@babel/plugin-transform-classes":"^7.9.5","@babel/plugin-transform-instanceof":"^7.8.3","@babel/plugin-transform-runtime":"^7.7.6","@babel/preset-env":"^7.7.5","@babel/register":"^7.7.4","@babel/runtime":"^7.9.6","@faker-js/faker":"^7.3.0","client-sessions":"^0.8.0","copyfiles":"^2.4.1","cross-env":"^5.2.1","eslint":"^8.2.0","eslint-config-google":"^0.14.0","eslint-config-prettier":"^8.3.0","eslint-plugin-prettier":"^4.0.0","jest":"^28.1.2","jest-extended":"^2.0.0","medusa-test-utils":"^1.1.33","onchange":"^7.1.0"},"gitHead":"dd896c072061bcd7ce35ca48489b789a73a1b9e9","bugs":{"url":"https://github.com/macder/medusa-fulfillment-shippo/issues"},"homepage":"https://github.com/macder/medusa-fulfillment-shippo#readme","_id":"medusa-fulfillment-shippo@0.12.0","_nodeVersion":"16.15.1","_npmVersion":"8.11.0","dist":{"integrity":"sha512-cgAOS3kfV5a0zUQ17kRxxF2SpBNZLpvaCiniN4923OaUDXC+wShxk858v4/Fuu2w9EsFmQUmNvdAoKIVFE8vCA==","shasum":"b4c4c2604923a44c5335a921df8a34b38d884a61","tarball":"https://registry.npmjs.org/medusa-fulfillment-shippo/-/medusa-fulfillment-shippo-0.12.0.tgz","fileCount":26,"unpackedSize":328472,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC8mUjVI0FnkkNhWBHYvfr5lcrXc4XScisNCsW1GHVfawIgE1OdFCOuSi4R13V8SmkmMeUAIJbDkXcGV4UWMlfJIwA="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJix5FgACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmpR8A/9F4OKOCpd8xregBPLvwJerq39Ta//psBd3mpIiYXiiCTfy2Mc\r\nWgKIsoFmZGGaAWedfwEsFhO1lkRUeIsaUvfBdjSG3D4kvKIUZCguytI1ooVl\r\nqxsNAc4PVpLzHhmBXsrlYtI0qwFLYMOTgHOPYEZf1reeC/RRQFmPyglVUVo3\r\nmfB4HBZ6Wkm/vb7b4axRW7zh0C/sH1hed221Q2PEFDewjDZqCPWaM7HVjb2u\r\nx3bsZhZxNm/wCUHHK/wHuQeBmcQy5/9/NgH/ELfBgaaYeTMp6SmXT5g06OCC\r\nGDatQclWi5Z5AwRQkeA1A5Sii7Tzu1NnbOIVmkG9GJ/mLhYQH1xNa+Ag8N6C\r\nUovtVgqIudjO5zlaROWr4Y5cxldGmCfPyRnrNBjEiM1gm+j8etuKp+frqc7a\r\nLaTucWThj+EOuVKw1va1tnqlzOHv0ODh2K98F542IDhQRAfoApbQoY0MvS5a\r\n6EMkDfW9V6gpuSWwFRxTr0XaRwgvuM7XiDeHOHiTUzEpUnvUjSacW1rfGVZk\r\nFYK5JpenkIbE5nWbB8gKnk8zalwOEZ+2GAvEWXrGvatfQ8EYk/5Pdc/f+qif\r\nQ74kmHWaW4IsdMm1uyQ+ngS2l5EG+1xWRHtWOwkZg7JjcfjWZBC9H6RLpsyi\r\n7C+apvB0qUXzgJmcLB6pfpFpjNK4gx/8m9Q=\r\n=OKvu\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"macder","email":"maciej@derulski.com"},"directories":{},"maintainers":[{"name":"macder","email":"maciej@derulski.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/medusa-fulfillment-shippo_0.12.0_1657246047758_0.7556007214744414"},"_hasShrinkwrap":false},"0.12.1":{"name":"medusa-fulfillment-shippo","version":"0.12.1","description":"Shippo fulfillment provider for medusa","author":{"name":"Maciej Derulski"},"license":"MIT","scripts":{"build":"babel src -d . --ignore **/__tests__,**/__mocks__","prepare":"cross-env NODE_ENV=production npm run build","watch":"onchange -v src/** -- copyfiles {{file}} ../my-medusa-store","test":"jest"},"dependencies":{"binpackingjs":"^3.0.2","body-parser":"^1.19.0","express":"^4.17.1","express-rate-limit":"^6.4.0","medusa-core-utils":"^1.1.30","shippo":"git+https://github.com/macder/shippo-node-client.git#medusa"},"peerDependencies":{"medusa-interfaces":"1.x"},"repository":{"type":"git","url":"git+https://github.com/macder/medusa-fulfillment-shippo.git"},"keywords":["medusa","medusa-plugin","medusa-fulfillment","medusa-shippo"],"devDependencies":{"@babel/cli":"^7.7.5","@babel/core":"^7.7.5","@babel/eslint-parser":"^7.15.8","@babel/node":"^7.7.4","@babel/plugin-proposal-class-properties":"^7.7.4","@babel/plugin-transform-classes":"^7.9.5","@babel/plugin-transform-instanceof":"^7.8.3","@babel/plugin-transform-runtime":"^7.7.6","@babel/preset-env":"^7.7.5","@babel/register":"^7.7.4","@babel/runtime":"^7.9.6","@faker-js/faker":"^7.3.0","client-sessions":"^0.8.0","copyfiles":"^2.4.1","cross-env":"^5.2.1","eslint":"^8.2.0","eslint-config-google":"^0.14.0","eslint-config-prettier":"^8.3.0","eslint-plugin-prettier":"^4.0.0","jest":"^28.1.2","jest-extended":"^2.0.0","medusa-test-utils":"^1.1.33","onchange":"^7.1.0"},"gitHead":"3be49c30906c8490e0bfde2915ed79b7960f479e","bugs":{"url":"https://github.com/macder/medusa-fulfillment-shippo/issues"},"homepage":"https://github.com/macder/medusa-fulfillment-shippo#readme","_id":"medusa-fulfillment-shippo@0.12.1","_nodeVersion":"16.15.1","_npmVersion":"8.11.0","dist":{"integrity":"sha512-siK343VapzUKsdmytIY4y7YH1Qm+zQnKWL6NP7Eg/esHyh0uqURBT+z5mpkDEL0+3yh3QbTl/cd/8xUWg8dlZw==","shasum":"c171c2e52086d884889aae0a9e9c5d21305bbbe2","tarball":"https://registry.npmjs.org/medusa-fulfillment-shippo/-/medusa-fulfillment-shippo-0.12.1.tgz","fileCount":26,"unpackedSize":328683,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCXV52vTmq9XVLxLOGOC2dIUoPrtU2F7IWliw7Ah1nOUAIgU6IoDIgB4TaE+e2ZNCBOWPsCNRJmg8tDP7IOdaGQmBE="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJix7N6ACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmoHyg/+MYK+gdZ8RY6UthJaOORkHsBBsO+eJwnwbNWp9wb2ive8N9Xr\r\naM38pimRDp3wYh9Maf+mLUk/btSjkBnBFvxZ7KHZIJ4MIc7IBEteVn+lJ37R\r\nezt1zTYlHiKIOmLXGqNj89JGE2w/dBmCYO8ni0vBmPW7cKh82Om+pOr1CNr0\r\n1NapC0xH0Ofpy5F2n3sSumENb8AI8o/V3FJYOHPtoBMVwkBwSG/feLUEfP3s\r\njfCM+XcQMduFaHMLSxI1NWTAhD0UXEXHDE9E6VFKkOJuWdxFC6gYDWMDZso4\r\nr4AHHgPepVZd3gQ5cc/tqamQmySoaWptqkgTrcF+6FPx4oLII+fNmljmGgD9\r\n724eMaTJzLIHwwOooE0bDA1AZzLYgRpNUsdvkyihwskXYdPDZJ6ySguvPdCa\r\nD4jgWxv9Vn4ipm9BCu5Tf4kMg79Yj7/2mm6ZFVdMOoUbS0nDDuiFFNvCrEFC\r\n+yw7npddNJ1PWgCBmy/v/GyoZ2z2bjZIo2ZwupTJw+aJtTujaGqb1GF8gnpP\r\nbdRMJ+O80SH6UbXkiA0nkdYBfMnGe2C81asT1r4vyF908UdkEmPbuxLcLlwZ\r\n42ItKwYAMkFFMrPouSw0GBgFsMXTpmgc9nmJygYhKOfXXaDPXfQTNIY23Jsu\r\no3gWEMeW9BZLzpYf5/M12uMdm3W67d58JzI=\r\n=+P3n\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"macder","email":"maciej@derulski.com"},"directories":{},"maintainers":[{"name":"macder","email":"maciej@derulski.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/medusa-fulfillment-shippo_0.12.1_1657254778012_0.31545910130027943"},"_hasShrinkwrap":false},"0.12.2":{"name":"medusa-fulfillment-shippo","version":"0.12.2","description":"Shippo fulfillment provider for medusa","author":{"name":"Maciej Derulski"},"license":"MIT","scripts":{"build":"babel src -d . --ignore **/__tests__,**/__mocks__","prepare":"cross-env NODE_ENV=production npm run build","watch":"onchange -v src/** -- copyfiles {{file}} ../my-medusa-store","test":"jest"},"dependencies":{"binpackingjs":"^3.0.2","body-parser":"^1.19.0","express":"^4.17.1","express-rate-limit":"^6.4.0","medusa-core-utils":"^1.1.30","shippo":"git+https://github.com/macder/shippo-node-client.git#medusa"},"peerDependencies":{"medusa-interfaces":"1.x"},"repository":{"type":"git","url":"git+https://github.com/macder/medusa-fulfillment-shippo.git"},"keywords":["medusa","medusa-plugin","medusa-fulfillment","medusa-shippo"],"devDependencies":{"@babel/cli":"^7.7.5","@babel/core":"^7.7.5","@babel/eslint-parser":"^7.15.8","@babel/node":"^7.7.4","@babel/plugin-proposal-class-properties":"^7.7.4","@babel/plugin-transform-classes":"^7.9.5","@babel/plugin-transform-instanceof":"^7.8.3","@babel/plugin-transform-runtime":"^7.7.6","@babel/preset-env":"^7.7.5","@babel/register":"^7.7.4","@babel/runtime":"^7.9.6","@faker-js/faker":"^7.3.0","client-sessions":"^0.8.0","copyfiles":"^2.4.1","cross-env":"^5.2.1","eslint":"^8.2.0","eslint-config-google":"^0.14.0","eslint-config-prettier":"^8.3.0","eslint-plugin-prettier":"^4.0.0","jest":"^28.1.2","jest-extended":"^2.0.0","medusa-test-utils":"^1.1.33","onchange":"^7.1.0"},"gitHead":"4f5936f1d4cc14a825b9c98d9495649114396e88","bugs":{"url":"https://github.com/macder/medusa-fulfillment-shippo/issues"},"homepage":"https://github.com/macder/medusa-fulfillment-shippo#readme","_id":"medusa-fulfillment-shippo@0.12.2","_nodeVersion":"16.15.1","_npmVersion":"8.11.0","dist":{"integrity":"sha512-7bIgI2NUZaffJiL7XdW/0SmIsKv95FDuGcLJO5Ks+Zacg+LV303B6ltzdRJgB23YhEL7Vl0NBGlCq310GtrI9Q==","shasum":"9ae181b4aee0caf69a6b335f8a0511e129a91955","tarball":"https://registry.npmjs.org/medusa-fulfillment-shippo/-/medusa-fulfillment-shippo-0.12.2.tgz","fileCount":26,"unpackedSize":328911,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHR9ftGiZ9CxtVIMNxwAVMaB9Ju0edkdGgBpTzkeGsZLAiEAxEe0zfjN7rASmE1V7imZ1ZwWZ4eqceUTssITmLNanGw="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJix8OuACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmrqOg//cAWr/0lgF9jzUFpCLtO3U70ihYHb+4P7yO+O5FjoYhhsc+jA\r\nMrln89TUEqsbpefiMzX+hF5hKdTGAg0L/azD5PlOJ44FGkrrxriDHK+uT0m4\r\nKFI76fm16/k3pHxLP/mAB4O/m3iOPXyewsRQssk2wGYlKLoG82ZD78JfN9pL\r\nzSBL7u4F5ZVkRqH/TsGIuJ0xejdaqpDj0fi3mFGFT7CUzH9qZ1VYFyyR7M7K\r\nSKRwbrng54Irdqa18SHmN/Og/q1ohvFXMF0p6vmie1E7aBEiopl9vLgZpWuk\r\nxL3teh8XFVVi4faCdjaxiM2eGu3ZS4gIqMtLoQgWBqJvkxBFUMxwT71QIdr9\r\nJiOsEzhnCclobqAASfRwsj/wr2f7KpgvpxECCJY+XDp1MPbk+kkqwUQ34ddh\r\nKq3PZ/AvJmpqk6zOra/w5zAmsFYHR8UFlkfzCwsk5n4ElI9TOrxIwv8fUI8l\r\ndOG7NoPc90L7HhXksrTuu+wYx4q0+aF9Ampg+ilR0/jMoXlCDSxI/Vs3miKM\r\nizu3qREsBXl4QHyFet3mKz3J9X58EsRZC+ShVOBu/0sYywPkMo04AtFEnYf7\r\n+H+PmWN6/uJGbK45oLgEQAMuA6sc7DZgEdxB6jlyM6YdeIODRADDEHZlRGFA\r\n6gIa9nznOETu6FdzpX7EKNIK1QY/KIx175s=\r\n=dxJw\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"macder","email":"maciej@derulski.com"},"directories":{},"maintainers":[{"name":"macder","email":"maciej@derulski.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/medusa-fulfillment-shippo_0.12.2_1657258926031_0.3901505666679099"},"_hasShrinkwrap":false},"0.13.0":{"name":"medusa-fulfillment-shippo","version":"0.13.0","description":"Shippo fulfillment provider for medusa","author":{"name":"Maciej Derulski"},"license":"MIT","scripts":{"build":"babel src -d . --ignore **/__tests__,**/__mocks__","prepare":"cross-env NODE_ENV=production npm run build","watch":"onchange -v src/** -- copyfiles {{file}} ../my-medusa-store","test":"jest"},"dependencies":{"binpackingjs":"^3.0.2","body-parser":"^1.19.0","express":"^4.17.1","express-rate-limit":"^6.4.0","medusa-core-utils":"^1.1.30","shippo":"git+https://github.com/macder/shippo-node-client.git#medusa"},"peerDependencies":{"medusa-interfaces":"1.x"},"repository":{"type":"git","url":"git+https://github.com/macder/medusa-fulfillment-shippo.git"},"keywords":["medusa","medusa-plugin","medusa-fulfillment","medusa-shippo"],"devDependencies":{"@babel/cli":"^7.7.5","@babel/core":"^7.7.5","@babel/eslint-parser":"^7.15.8","@babel/node":"^7.7.4","@babel/plugin-proposal-class-properties":"^7.7.4","@babel/plugin-transform-classes":"^7.9.5","@babel/plugin-transform-instanceof":"^7.8.3","@babel/plugin-transform-runtime":"^7.7.6","@babel/preset-env":"^7.7.5","@babel/register":"^7.7.4","@babel/runtime":"^7.9.6","@faker-js/faker":"^7.3.0","client-sessions":"^0.8.0","copyfiles":"^2.4.1","cross-env":"^5.2.1","eslint":"^8.2.0","eslint-config-google":"^0.14.0","eslint-config-prettier":"^8.3.0","eslint-plugin-prettier":"^4.0.0","jest":"^28.1.2","jest-extended":"2.0.0","medusa-test-utils":"^1.1.33","onchange":"^7.1.0"},"gitHead":"a1833f43f6cc0ea41ae18f68697f8e9fbe539303","bugs":{"url":"https://github.com/macder/medusa-fulfillment-shippo/issues"},"homepage":"https://github.com/macder/medusa-fulfillment-shippo#readme","_id":"medusa-fulfillment-shippo@0.13.0","_nodeVersion":"16.15.1","_npmVersion":"8.11.0","dist":{"integrity":"sha512-BbQjpTKFNxGqHeIiYC89IS/ECiLh4b4hbZicNFf8xVDUQjJg3wTqjoWs3Zmn+xqnvxd0NZOUvHxyAm0csTDajA==","shasum":"b718baca7e9c2f0140cf4cdc5635875aa7858146","tarball":"https://registry.npmjs.org/medusa-fulfillment-shippo/-/medusa-fulfillment-shippo-0.13.0.tgz","fileCount":26,"unpackedSize":332521,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQD8cy7El5OvDZw2PjaoYjRE0ew419/A9bmN4VG8hGwvBwIhAJzqBlc6Klx0iOkJsQDJ89Hshb+a7FiW9zXaZYUH227P"}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJiymHsACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmoDSA//XONQ0MvkNLVQO9C4kjhO46XNgqRT7pxH75G/mlyrdOOPz9H9\r\n0ZL3uad59zbRErur0GYr2IvtDHHX0skrzDwUpLOIau9qqwnNxi18jGtzaHKY\r\nE2oaxXhkPCj3+ZbOTR4lOifjkwSCgs8A/hYsFBsjrOUJqHaCprbUkZoiYY38\r\nZCHdn/0qlIErLOuhgsj0OHIAZ9C06BQtE6m9hmbnYne5MVsE2zaJFO85JcJl\r\nOfqSl9VC92Zr6s5Jkdi7l/mh08oJTu0yZ7AgKBuVkldFJXi9Peky6SVkwvnh\r\n5O/7xKnRx6iT3pu2PM2x0unkJ2BG5vESa+i/ce0318bs8AL94zZ8otArsX93\r\nqeKrM0rD7OKy59TdSTD5HtV/Qyg4YWxqzZZONHklMwNn7E425WCIjbGGCiOz\r\nzYQCpvNJsaqFEZauAvVVJLNO8rig2V0SAwk/ea0mVcFdMIbCpk14iwiNdjZ2\r\nBJGcJzdyufdnYohzVhhJEH8CyGIR0+xmJcofTdn3ilPBOH/MWy92FJmaZXre\r\n8BPUuCEW0YEibFOTejB5q+nHGCzmztJ7EP90IcCf/b2YCW+aSZqyjF4FdJIX\r\ndQSu5l8iMApqyMpxGNvCvfBsYecmahsRepLcZ1Rohq0ka+WjiFnUGlcC2NYf\r\n+r3w7oL7OvyglnHK3gpSUmFPj6tnpOn1xtg=\r\n=lAq9\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"macder","email":"maciej@derulski.com"},"directories":{},"maintainers":[{"name":"macder","email":"maciej@derulski.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/medusa-fulfillment-shippo_0.13.0_1657430508412_0.8663418491242325"},"_hasShrinkwrap":false},"0.14.0":{"name":"medusa-fulfillment-shippo","version":"0.14.0","description":"Shippo fulfillment provider for medusa","author":{"name":"Maciej Derulski"},"license":"MIT","scripts":{"build":"babel src -d . --ignore **/__tests__,**/__mocks__","prepare":"cross-env NODE_ENV=production npm run build","watch":"onchange -v src/** -- copyfiles {{file}} ../my-medusa-store","test":"jest"},"dependencies":{"binpackingjs":"^3.0.2","body-parser":"^1.19.0","express":"^4.17.1","express-rate-limit":"^6.4.0","medusa-core-utils":"^1.1.30","shippo":"git+https://github.com/macder/shippo-node-client.git#medusa-fulfillment-shippo"},"peerDependencies":{"medusa-interfaces":"1.x"},"repository":{"type":"git","url":"git+https://github.com/macder/medusa-fulfillment-shippo.git"},"keywords":["medusa","medusa-plugin","medusa-fulfillment","medusa-shippo"],"devDependencies":{"@babel/cli":"^7.7.5","@babel/core":"^7.7.5","@babel/eslint-parser":"^7.15.8","@babel/node":"^7.7.4","@babel/plugin-proposal-class-properties":"^7.7.4","@babel/plugin-transform-classes":"^7.9.5","@babel/plugin-transform-instanceof":"^7.8.3","@babel/plugin-transform-runtime":"^7.7.6","@babel/preset-env":"^7.7.5","@babel/register":"^7.7.4","@babel/runtime":"^7.9.6","@faker-js/faker":"^7.3.0","client-sessions":"^0.8.0","copyfiles":"^2.4.1","cross-env":"^5.2.1","eslint":"^8.2.0","eslint-config-google":"^0.14.0","eslint-config-prettier":"^8.3.0","eslint-plugin-prettier":"^4.0.0","jest":"^28.1.2","jest-extended":"2.0.0","medusa-test-utils":"^1.1.33","onchange":"^7.1.0"},"gitHead":"a60d0f519ade267f6cb2b42299f34caeebf38bf0","bugs":{"url":"https://github.com/macder/medusa-fulfillment-shippo/issues"},"homepage":"https://github.com/macder/medusa-fulfillment-shippo#readme","_id":"medusa-fulfillment-shippo@0.14.0","_nodeVersion":"16.15.1","_npmVersion":"8.11.0","dist":{"integrity":"sha512-dzI1vGxTOg0kECnkualkZuPB5bhjJY81LnqAHdLIjf4jtpIZ1Jzj/iTSB9/7DAREpdXU9EaMuXtfh35YJ4KnPg==","shasum":"67ac77a41fde552e8e20eb5065af80b6719a8259","tarball":"https://registry.npmjs.org/medusa-fulfillment-shippo/-/medusa-fulfillment-shippo-0.14.0.tgz","fileCount":26,"unpackedSize":344264,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCH0yTCz43vOOs87uMYQURlWfL5XyaQFfiMu9r7vC39fICIQCeDVh6NIHH48xqrgu71KvJ5+GzxspQt1ZCw4/OcO3rWw=="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJiy6PiACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmoWxRAAj7JEM8ndP0sshe8bwPfU22gE6z5LsKGpC+t9/K/9/tv4A10h\r\nSxugBRj0hKJepxes4Qkxb+g0GL2qkQz+7y+BEu6X96G4xdTUROkqpIqd6RFP\r\n4APLXQtdEmHMzfwKxBPpozPWJDLnzdhhmdDga83PdZLRu7Z1NZfYPfsxqyhv\r\n3XTghiafgkM7g0I7fTI8uGCkJWO/IlAySSmYNNwIMIE0NN3tNA1cJY13zfg3\r\nhXmjx26kgvZwetbZm0YXnrcWGNwrpkqlnLCAtXXi1eNlaDnv8bN4Xzm9O/S0\r\nClQqkxCaHOWWIYvEr8kkg2OWmObGlWX8PTydPm5hesMX06VfOPGgdTYLvSfR\r\nN1yZak0IIk0OvnD7rT6jI46MKbi3zxZb4Gvjq8jzXHqIK3oFuH0hG2TVTYng\r\nc1nzhsW15WT8nq6Xd7HCxWTEjeNigv+02+x9ILP81fl4NWlxgBObf6pmhFSU\r\nylQV5VyLcmN3de3afnGpvCVqWViE4KQD20SZ6Lavq01zAf3jT1lx/OLPO2Zr\r\n6KVBIyiwqvBn7Qvb1tNWn+BTUpiVg+MGGDW1fBJSlKypxGQA9zHHYscvZ6Or\r\nvAkGlhygeDrUKMJTd8pK3L4YZwbrzVWeqIGBwl4rAxlaE6NvIgCMsgPok70l\r\nwJxOprOaSjCBWdmfg1jw96+HwmO1NYaLTIQ=\r\n=GqTZ\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"macder","email":"maciej@derulski.com"},"directories":{},"maintainers":[{"name":"macder","email":"maciej@derulski.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/medusa-fulfillment-shippo_0.14.0_1657512930602_0.47747342059830467"},"_hasShrinkwrap":false},"0.15.0":{"name":"medusa-fulfillment-shippo","version":"0.15.0","description":"Shippo fulfillment provider for medusa","author":{"name":"Maciej Derulski"},"license":"MIT","scripts":{"build":"babel src -d . --ignore **/__tests__,**/__mocks__","prepare":"cross-env NODE_ENV=production npm run build","watch":"onchange -v src/** -- copyfiles {{file}} ../my-medusa-store","test":"jest"},"dependencies":{"binpackingjs":"^3.0.2","body-parser":"^1.19.0","express":"^4.17.1","express-rate-limit":"^6.4.0","medusa-core-utils":"^1.1.30","shippo":"git+https://github.com/macder/shippo-node-client.git#medusa-fulfillment-shippo"},"peerDependencies":{"medusa-interfaces":"1.x"},"repository":{"type":"git","url":"git+https://github.com/macder/medusa-fulfillment-shippo.git"},"keywords":["medusa","medusa-plugin","medusa-fulfillment","medusa-shippo"],"devDependencies":{"@babel/cli":"^7.7.5","@babel/core":"^7.7.5","@babel/eslint-parser":"^7.15.8","@babel/node":"^7.7.4","@babel/plugin-proposal-class-properties":"^7.7.4","@babel/plugin-transform-classes":"^7.9.5","@babel/plugin-transform-instanceof":"^7.8.3","@babel/plugin-transform-runtime":"^7.7.6","@babel/preset-env":"^7.7.5","@babel/register":"^7.7.4","@babel/runtime":"^7.9.6","@faker-js/faker":"^7.3.0","client-sessions":"^0.8.0","copyfiles":"^2.4.1","cross-env":"^5.2.1","eslint":"^8.2.0","eslint-config-google":"^0.14.0","eslint-config-prettier":"^8.3.0","eslint-plugin-prettier":"^4.0.0","jest":"^28.1.2","jest-extended":"2.0.0","medusa-test-utils":"^1.1.33","onchange":"^7.1.0"},"gitHead":"0e9b4c7ed39fe36d60bffeab3cc51f3ffa8ab8d9","bugs":{"url":"https://github.com/macder/medusa-fulfillment-shippo/issues"},"homepage":"https://github.com/macder/medusa-fulfillment-shippo#readme","_id":"medusa-fulfillment-shippo@0.15.0","_nodeVersion":"16.15.1","_npmVersion":"8.11.0","dist":{"integrity":"sha512-a1HNgqUxviLBOo1NI8MOQrDLOYhFrE42jwzEbQsGemwEKTnzUs7OEoWn5QzTLSkVZWCwn96fKujTnkw0sV/iDA==","shasum":"b785daac5c390f787149f8fc09a0dbedd66921ae","tarball":"https://registry.npmjs.org/medusa-fulfillment-shippo/-/medusa-fulfillment-shippo-0.15.0.tgz","fileCount":26,"unpackedSize":350578,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIC8E2EkdDOKqAJzl3/rduvYI2wkgJCS83n0qAvfcs0bXAiBkBJxRpVTtn9fUc2p5ai3Ec9Tie2G4UfoMLsRs4RedZQ=="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJizRilACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmruuRAAmPHqEuyrL3MsscugUBd6lPe7KVH2bripoW3mGGj0F5kz/6xR\r\niuY+O3I6I6P1AdBPsk7Gqxy9RTyWhQY1FBwq1eE0In4WQxSwr0n+aWEUxAX8\r\nbxdrouYf2cd3mL8H1o/XcTb630MKsFtIYNOHvm4/ezfX9b7oEhPM8W8AYdp3\r\nkjBXqD1O/XGVpAl1KTZaDFwsGDQ8lchLRCo7Dn3Ht6gBQA4oXiIEvipOCpYY\r\nEYoX9RGaY+sW2HgV+i+TvhggejEtEclLI4LylxLLFF9epEjh0dBVqGiB4TyZ\r\nMH35KJEldn9yJjjV3O73ul7Wk3PWZq4NkZrkh3gKjSPyDDWXrwZM4UcdLkVz\r\nWhXsMuN/gMmbDOzc4WRbPOKHjbqrlrOMR1hJmwPVjfSGozpfLs6q6KIv5/i9\r\nMBgFt5Yj7RDUtVkWKDAS5fRy1Vl9EGFzWrToJsIX5CgCjh0+/G1CfgJn3DiJ\r\nw7By1RmHsuOakauqOW7kHuVr3KplwtXc20YTD7COArzCcyM4OKoOa+3eUJm/\r\nsUoGBtcr2fewoO0ji6MvFsx7wbumgNxCPuK/+fUmFlywoX7kdoOqFuHkE3eW\r\nvV8wxPj0IM2DNE9orcZHSkekOMVV1Agdr1NdlF4HKryseUsT4LLenvi4ibH7\r\nXBWJuxZH9mXWUZTD0M6gCL2BF+9vVkQqFhI=\r\n=fuiZ\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"macder","email":"maciej@derulski.com"},"directories":{},"maintainers":[{"name":"macder","email":"maciej@derulski.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/medusa-fulfillment-shippo_0.15.0_1657608357151_0.5677925245638227"},"_hasShrinkwrap":false},"0.16.0":{"name":"medusa-fulfillment-shippo","version":"0.16.0","description":"Shippo fulfillment provider for medusa","author":{"name":"Maciej Derulski"},"license":"MIT","scripts":{"build":"babel src -d . --ignore **/__tests__,**/__mocks__","prepare":"cross-env NODE_ENV=production npm run build","watch":"onchange -v src/** -- copyfiles {{file}} ../my-medusa-store","test":"jest"},"dependencies":{"binpackingjs":"^3.0.2","body-parser":"^1.19.0","express":"^4.17.1","express-rate-limit":"^6.4.0","medusa-core-utils":"^1.1.30","shippo":"git+https://github.com/macder/shippo-node-client.git#medusa-fulfillment-shippo"},"peerDependencies":{"medusa-interfaces":"1.x"},"repository":{"type":"git","url":"git+https://github.com/macder/medusa-fulfillment-shippo.git"},"keywords":["medusa","medusa-plugin","medusa-fulfillment","medusa-shippo"],"devDependencies":{"@babel/cli":"^7.7.5","@babel/core":"^7.7.5","@babel/eslint-parser":"^7.15.8","@babel/node":"^7.7.4","@babel/plugin-proposal-class-properties":"^7.7.4","@babel/plugin-transform-classes":"^7.9.5","@babel/plugin-transform-instanceof":"^7.8.3","@babel/plugin-transform-runtime":"^7.7.6","@babel/preset-env":"^7.7.5","@babel/register":"^7.7.4","@babel/runtime":"^7.9.6","@faker-js/faker":"^7.3.0","client-sessions":"^0.8.0","copyfiles":"^2.4.1","cross-env":"^5.2.1","eslint":"^8.2.0","eslint-config-google":"^0.14.0","eslint-config-prettier":"^8.3.0","eslint-plugin-prettier":"^4.0.0","jest":"^28.1.2","jest-extended":"2.0.0","medusa-test-utils":"^1.1.33","onchange":"^7.1.0"},"gitHead":"49fcb1008097ba4bbdcab8504ead7b819a2ad3a4","bugs":{"url":"https://github.com/macder/medusa-fulfillment-shippo/issues"},"homepage":"https://github.com/macder/medusa-fulfillment-shippo#readme","_id":"medusa-fulfillment-shippo@0.16.0","_nodeVersion":"16.15.1","_npmVersion":"8.11.0","dist":{"integrity":"sha512-0R3pn6tsZleYk6hWGEMjhigyreEUHEwGqvGJDvmFL2acNXiF2mXFfjxZcUC683nlOOZ5isPAAbbBPEDHPy0M3Q==","shasum":"d24bc3cac36782f8e24f66432cc4f4fdcc625e70","tarball":"https://registry.npmjs.org/medusa-fulfillment-shippo/-/medusa-fulfillment-shippo-0.16.0.tgz","fileCount":26,"unpackedSize":356605,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQD0HdCIPh6x/TbQjeM0SFfLtjjyE4A5pxbvqLdjsoz7LAIhAPGT4yfHGO//rqLHJAQICfIDaXTbmjr2ViSVk86AJEYu"}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJizoaTACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmrSrw//ZmDgD3U122ZUKU8op8Eks8bb73iUZnmnECkFff/3Cqs5CgK+\r\n69BcmhW4UmIskoIbMe5NodnhQjimq2Y82klSkTaKzfGKgMOaiTI7V9tcTzaM\r\n1+PNj4Fu7+agc3ZP8YPcwHG6AGYnqPc3b0wux4Z2yGsfjhBZ0mpeHRV+QFrv\r\nRGKtFhqZrVjUx1lJCFQ0mrzsmYZreZxDuwJd+og14dWznqBY5kUaCuY6UUIb\r\nwjKzEgVKR5B0EQCZeVtcB7o+ML3AFz6e6y6y1xGWRGAOdvBYaxbEd8Er81Ab\r\n+MOu1Q6Ob1DN366sWEinqaoZBnWyyNT1cvQbY47/CJfyXboXXW69zohPIP+e\r\nUWhENkjw99zLzeJbAv/HYSWXBig4ntC4LC0RXYrBM71frkjx8l9W2SkwKjHl\r\nnnl8u5yUIIuylO4tgQF+BIZ7xd5+Sm/z/DOhtv6iNm51FsGJtBHoaPt5xg6F\r\ndv0mPObejgZJougD4odkxzKTWyQIfQe1XTze2S5HUAyq7Ol8RhzI6qgv/aYu\r\nd+QsBp9xBKreNvxnKhVZTfknoCxd/mDMZ02s2Xrdqda5CkJqToD1lkukZuUn\r\nfSg+laBf60LY5Vk6MZsaG57OfJh7lzxYsP3WzRuShXokNaf9ximhizL7PYb8\r\nY4xjoSMFHBF5hdIfwRZVhbwXdZs++aAKWrE=\r\n=iSGp\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"macder","email":"maciej@derulski.com"},"directories":{},"maintainers":[{"name":"macder","email":"maciej@derulski.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/medusa-fulfillment-shippo_0.16.0_1657702035652_0.8389836709224312"},"_hasShrinkwrap":false},"0.16.1":{"name":"medusa-fulfillment-shippo","version":"0.16.1","description":"Shippo fulfillment provider for medusa","author":{"name":"Maciej Derulski"},"license":"MIT","scripts":{"build":"babel src -d . --ignore **/__tests__,**/__mocks__","prepare":"cross-env NODE_ENV=production npm run build","watch":"onchange -v src/** -- copyfiles {{file}} ../my-medusa-store","test":"jest"},"dependencies":{"binpackingjs":"^3.0.2","body-parser":"^1.19.0","express":"^4.17.1","express-rate-limit":"^6.4.0","medusa-core-utils":"^1.1.30","shippo":"git+https://github.com/macder/shippo-node-client.git#medusa-fulfillment-shippo"},"peerDependencies":{"medusa-interfaces":"1.x"},"repository":{"type":"git","url":"git+https://github.com/macder/medusa-fulfillment-shippo.git"},"keywords":["medusa","medusa-plugin","medusa-fulfillment","medusa-shippo"],"devDependencies":{"@babel/cli":"^7.7.5","@babel/core":"^7.7.5","@babel/eslint-parser":"^7.15.8","@babel/node":"^7.7.4","@babel/plugin-proposal-class-properties":"^7.7.4","@babel/plugin-transform-classes":"^7.9.5","@babel/plugin-transform-instanceof":"^7.8.3","@babel/plugin-transform-runtime":"^7.7.6","@babel/preset-env":"^7.7.5","@babel/register":"^7.7.4","@babel/runtime":"^7.9.6","@faker-js/faker":"^7.3.0","client-sessions":"^0.8.0","copyfiles":"^2.4.1","cross-env":"^5.2.1","eslint":"^8.2.0","eslint-config-google":"^0.14.0","eslint-config-prettier":"^8.3.0","eslint-plugin-prettier":"^4.0.0","jest":"^28.1.2","jest-extended":"2.0.0","medusa-test-utils":"^1.1.33","onchange":"^7.1.0"},"gitHead":"cfbefd50fc8ef6428b5012584b2cae6e687b7bb6","bugs":{"url":"https://github.com/macder/medusa-fulfillment-shippo/issues"},"homepage":"https://github.com/macder/medusa-fulfillment-shippo#readme","_id":"medusa-fulfillment-shippo@0.16.1","_nodeVersion":"16.15.1","_npmVersion":"8.11.0","dist":{"integrity":"sha512-b8V/Ckz3eD2jVxyzbcmx5dAIGFpAQXDmb74PmKPjYmzoyIWi+Di4Me4+nyZezZ4eS5QZvCZ1PN7RpJMwbvRNrw==","shasum":"5207a058c20879c89970fab3a85cd16bebd4483d","tarball":"https://registry.npmjs.org/medusa-fulfillment-shippo/-/medusa-fulfillment-shippo-0.16.1.tgz","fileCount":26,"unpackedSize":356868,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDPGpWr/OwIr1JPn0l2D8qmKGv2TGMp84YxXzQA1YyNDwIhALDe3itVWf3qLtMxTOYwtJQLquURTQT5ft6ndMxW0kgy"}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJiz6RMACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmqUuw//ewRmmKwSxYXCEG3gbxHZXLEWLVbCzFNEclESzWpgshnTyFiN\r\nclmBqSvmwcKowLE7BHlIQzlEFns2LzrWLgZPktBrmrV2N2i9FG1hRMBp51zj\r\nOCmbVTgGAuiffyRFyWn4vxwz7lJQayYlBltKcjscIEl+xMVLh+WALkaJfiyp\r\natNzr5HDpItMbV7zCovCgmbaou6NExX2kFWgUE7lNTjhqVRONcreBQFpG+te\r\noLoXmWspeRQo6txTGLujzasHWeIK+eD7xgBAFbD3Jj+ESOPQYvhEjDnR95ft\r\n7sA+FrLdJxy/80ELHVX5JWqdze2wLc/76RxOQWXdWMWSpg/f1Usp7N/fF3ZU\r\numEQCxPRQBHaJNqR82PisFySVHf6rEY0kGTMcrZMJxMmNS0P3E0z0A8IT9RI\r\nl5lHswJhYrUfEYC68wycNFNqvJfoqtZqOp87oSaqCmRdEKAllMDHLRYyRx2R\r\nzb+ymdkYuj7OSz0Qmz5c1yL0wHmAgGnHArQN1JVJc0yAUaoRKTV1Md6Ve//7\r\np+2Nks6wGS0yprb4vhk5I+xep2KYffCkZZmFO9wSxzmhXf2bJcIaAEEW0RO8\r\nFzO7pgKu1BqB+YluNMTZ8Ty/fW/7eJ8//662foEbpYMkrHZUG8ucGfgSHRcY\r\n5NZGHOmCVLeYboyQCBf1M+/BcvTirxGTO+E=\r\n=XLtA\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"macder","email":"maciej@derulski.com"},"directories":{},"maintainers":[{"name":"macder","email":"maciej@derulski.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/medusa-fulfillment-shippo_0.16.1_1657775180683_0.9413787859340172"},"_hasShrinkwrap":false},"0.17.0":{"name":"medusa-fulfillment-shippo","version":"0.17.0","description":"Shippo fulfillment provider for medusa","author":{"name":"Maciej Derulski"},"license":"MIT","scripts":{"build":"babel src -d . --ignore **/__tests__,**/__mocks__","prepare":"cross-env NODE_ENV=production npm run build","watch":"onchange -v src/** -- copyfiles {{file}} ../my-medusa-store","test":"jest"},"dependencies":{"binpackingjs":"^3.0.2","body-parser":"^1.19.0","express":"^4.17.1","express-rate-limit":"^6.4.0","medusa-core-utils":"^1.1.30","shippo":"git+https://github.com/macder/shippo-node-client.git#medusa-fulfillment-shippo"},"peerDependencies":{"medusa-interfaces":"1.x"},"repository":{"type":"git","url":"git+https://github.com/macder/medusa-fulfillment-shippo.git"},"keywords":["medusa","medusa-plugin","medusa-fulfillment","medusa-shippo"],"devDependencies":{"@babel/cli":"^7.7.5","@babel/core":"^7.7.5","@babel/eslint-parser":"^7.15.8","@babel/node":"^7.7.4","@babel/plugin-proposal-class-properties":"^7.7.4","@babel/plugin-transform-classes":"^7.9.5","@babel/plugin-transform-instanceof":"^7.8.3","@babel/plugin-transform-runtime":"^7.7.6","@babel/preset-env":"^7.7.5","@babel/register":"^7.7.4","@babel/runtime":"^7.9.6","@faker-js/faker":"^7.3.0","client-sessions":"^0.8.0","copyfiles":"^2.4.1","cross-env":"^5.2.1","eslint":"^8.2.0","eslint-config-google":"^0.14.0","eslint-config-prettier":"^8.3.0","eslint-plugin-prettier":"^4.0.0","jest":"^28.1.2","jest-extended":"2.0.0","medusa-test-utils":"^1.1.33","onchange":"^7.1.0"},"gitHead":"89cd201a5eecca764f10aaf35b37f909656511f5","bugs":{"url":"https://github.com/macder/medusa-fulfillment-shippo/issues"},"homepage":"https://github.com/macder/medusa-fulfillment-shippo#readme","_id":"medusa-fulfillment-shippo@0.17.0","_nodeVersion":"16.15.1","_npmVersion":"8.11.0","dist":{"integrity":"sha512-ppf4Xmv+b0GTaQxuEfrw5flTqPXNLt3Lq+lXHG4MSWSHSy4FDoMgaiNxiXWPZjvxk/+U9xN7RkzHlz0AR0x1Ng==","shasum":"f3284de1230651ed90300480bb6eba59703dacdd","tarball":"https://registry.npmjs.org/medusa-fulfillment-shippo/-/medusa-fulfillment-shippo-0.17.0.tgz","fileCount":26,"unpackedSize":360140,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQC8u04INTkkBJDJh01XdTcGCwu/xpaOLmvBswxUZ/yBdQIhAOglAjpDpAhMbA+9PNIhh1hzJ5hIH+z/uU9EYKtvmVZC"}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJi0RLKACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmphcA//a/EBklvjzMvhP2BnUz8nMIUEmXFWslnQ198Cv7zEMucpT+Tz\r\nKXnzz0DQJOXBMCz139yOrw7LWIhQ934b4syKSeGpH56ZHysDPbwm9mDUZndP\r\nRBwcCTguOr3uhCb9onsh2zszJbrwYaGAUx3MsGZqy1qzPL+t5tXPEsxnawPf\r\nlozZGkTGP5DNPYMPG7XG/+7c/oiNjrHyjLEt4Ir+DWcZ2gu09dUDQjslVIeg\r\n7gWAHm3IhmKGo8yAnxfJCk0ZNxrbwDxGU2Px0U9KdxDh2ZU2wYSl0k1P6r8Y\r\nri0KYcGjhDi1YlfiXf5oY6ct+XZvXs/ZrWrCaF8DhJOfAAYYlFHWcCLU1jMf\r\nxPiFGU5EnoCvNYMjsK8i0G8aM0M7Ep813Pff2MBAYwSJbt6F+EhgVNfbo0s/\r\nzpscGDFgsehyBo/Ngn6pTxQVhArDGpargysngmbYB08WW0M3je/IKmWMxgdi\r\nHeLtEy9F0dssEcdUOJIKCNmlzn6jIVzEg8nAq8lT2N6WD7HoX76w1QzIrgCs\r\nlflGa9NYgoT4wzobt/gjiGUyUahB+dl0omWzGSCGFiFfMREuy78f+Df8JxpS\r\nX9aMXk8aIeIZNeU+zTysWYjlNGKjGpYYkTEWfiiYK3JVXrjFW4ghkaHOgWJP\r\nPFHTWgoTfMlenCiR0E52mC5h3d2FKdSam/s=\r\n=KZLM\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"macder","email":"maciej@derulski.com"},"directories":{},"maintainers":[{"name":"macder","email":"maciej@derulski.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/medusa-fulfillment-shippo_0.17.0_1657869001847_0.9083867376549433"},"_hasShrinkwrap":false},"0.18.0":{"name":"medusa-fulfillment-shippo","version":"0.18.0","description":"Shippo fulfillment provider for medusa","author":{"name":"Maciej Derulski"},"license":"MIT","scripts":{"build":"babel src -d . --ignore **/__tests__,**/__mocks__","prepare":"cross-env NODE_ENV=production npm run build","watch":"onchange -v src/** -- copyfiles {{file}} ../my-medusa-store","test":"jest"},"dependencies":{"binpackingjs":"^3.0.2","body-parser":"^1.19.0","express":"^4.17.1","express-rate-limit":"^6.4.0","medusa-core-utils":"^1.1.30","shippo":"git+https://github.com/macder/shippo-node-client.git#medusa-fulfillment-shippo"},"peerDependencies":{"medusa-interfaces":"1.x"},"repository":{"type":"git","url":"git+https://github.com/macder/medusa-fulfillment-shippo.git"},"keywords":["medusa","medusa-plugin","medusa-fulfillment","medusa-shippo"],"devDependencies":{"@babel/cli":"^7.7.5","@babel/core":"^7.7.5","@babel/eslint-parser":"^7.15.8","@babel/node":"^7.7.4","@babel/plugin-proposal-class-properties":"^7.7.4","@babel/plugin-transform-classes":"^7.9.5","@babel/plugin-transform-instanceof":"^7.8.3","@babel/plugin-transform-runtime":"^7.7.6","@babel/preset-env":"^7.7.5","@babel/register":"^7.7.4","@babel/runtime":"^7.9.6","@faker-js/faker":"^7.3.0","client-sessions":"^0.8.0","copyfiles":"^2.4.1","cross-env":"^5.2.1","eslint":"^8.2.0","eslint-config-google":"^0.14.0","eslint-config-prettier":"^8.3.0","eslint-plugin-prettier":"^4.0.0","jest":"^28.1.2","jest-extended":"2.0.0","medusa-test-utils":"^1.1.33","onchange":"^7.1.0"},"gitHead":"b8558e7cfa88dbabfbb91495ad0e5ca6d5d401b2","bugs":{"url":"https://github.com/macder/medusa-fulfillment-shippo/issues"},"homepage":"https://github.com/macder/medusa-fulfillment-shippo#readme","_id":"medusa-fulfillment-shippo@0.18.0","_nodeVersion":"16.15.1","_npmVersion":"8.11.0","dist":{"integrity":"sha512-44t9/E4CTvYog8z9OHr+8VuqCTNAX+IhxhFtWU3iRywcZG89lOKuyint5uOhQPwMMRegVTiK0RQZl5GEvDetmw==","shasum":"70a58c378fd71f31871cfa132b115f95a70d2e8d","tarball":"https://registry.npmjs.org/medusa-fulfillment-shippo/-/medusa-fulfillment-shippo-0.18.0.tgz","fileCount":24,"unpackedSize":345279,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBqPnBYSZrWxlDu2Ev6K2WMSRDpVlJaLQ8qKVLDEdN3sAiEAhFwVC2WiU/BfMdD3aHBuraGV3NJ8zoNB+k0jFP/yNSo="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJi0kRdACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmq+ChAAgQ5hfMQytx4sre/hKNz/2kP1JY7LN6irilkcyQsHjEOEsX13\r\n4Wja4VeMx7MvKhkRKogz+7BoOvsK0PfycoFeqsBl/SHW+wN9WWMLgUPIA2eB\r\n84A3vtKmbylvsF6SL29ZDVSxQ08QY7GnCNjL08cXLheGqV5aJXS5hhMJlyRF\r\nL9axbf3q57xUE/5HpdXbXnvzXN4pBZz0SOoQzbAxVLE1xlBIyKG2vbJlCFEa\r\nh/fLX3RzWhxdbA4Ujc8gpg2y9w5UTSH0SYor9shIN44zBncGS6TRQZbD64A/\r\n6Ed+zsRASYrBNI9wx+XnNkt83nSgE3iaQKGq2S5gVDoQEuaruyPmBGZEUyk0\r\nW09Pyxn0E1Bs9rLnc9zF6Y2mRnGDHPJ9Xlw1oyt722wVB5AWqqUafQv/bCDM\r\npDZfNqnihC4kUDob5xWAJ38C/Tr/+oxJcL9iC2JoG+Zbcjo4+Yv2LJIxKv5k\r\nmO03R9XGuwlW05ZTQ70lZNDuG+Y9vu16K85bizlZxB9JiKqNbIrZPNLHP+7M\r\nGGCpEoDC7CTP7vreyOij6nFHFrpHYjFxRA8pECzCNr7nmUgdCtTCEM5SB87j\r\nEn3sB6tF0vJ44qKT6u/2t1vVFT8cl/Yq1v8CWTB5JFbuEAnNTRFC/z4d4S16\r\nsjxvPXkFiQOxTEigJrxDEaI37xnuZB+/90A=\r\n=pWKn\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"macder","email":"maciej@derulski.com"},"directories":{},"maintainers":[{"name":"macder","email":"maciej@derulski.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/medusa-fulfillment-shippo_0.18.0_1657947228817_0.20171953042026436"},"_hasShrinkwrap":false},"0.18.1":{"name":"medusa-fulfillment-shippo","version":"0.18.1","description":"Shippo fulfillment provider for medusa","author":{"name":"Maciej Derulski"},"license":"MIT","scripts":{"build":"babel src -d . --ignore **/__tests__,**/__mocks__","prepare":"cross-env NODE_ENV=production npm run build","watch":"onchange -v src/** -- copyfiles {{file}} ../my-medusa-store","test":"jest"},"dependencies":{"binpackingjs":"^3.0.2","body-parser":"^1.19.0","express":"^4.17.1","express-rate-limit":"^6.4.0","medusa-core-utils":"^1.1.30","shippo":"git+https://github.com/macder/shippo-node-client.git#medusa-fulfillment-shippo"},"peerDependencies":{"medusa-interfaces":"1.x"},"repository":{"type":"git","url":"git+https://github.com/macder/medusa-fulfillment-shippo.git"},"keywords":["medusa","medusa-plugin","medusa-fulfillment","medusa-shippo"],"devDependencies":{"@babel/cli":"^7.7.5","@babel/core":"^7.7.5","@babel/eslint-parser":"^7.15.8","@babel/node":"^7.7.4","@babel/plugin-proposal-class-properties":"^7.7.4","@babel/plugin-transform-classes":"^7.9.5","@babel/plugin-transform-instanceof":"^7.8.3","@babel/plugin-transform-runtime":"^7.7.6","@babel/preset-env":"^7.7.5","@babel/register":"^7.7.4","@babel/runtime":"^7.9.6","@faker-js/faker":"^7.3.0","client-sessions":"^0.8.0","copyfiles":"^2.4.1","cross-env":"^5.2.1","eslint":"^8.2.0","eslint-config-google":"^0.14.0","eslint-config-prettier":"^8.3.0","eslint-plugin-prettier":"^4.0.0","jest":"^28.1.2","jest-extended":"2.0.0","medusa-test-utils":"^1.1.33","onchange":"^7.1.0"},"gitHead":"aadc9f81762d3fca197cbba424f3a2ffb198806f","bugs":{"url":"https://github.com/macder/medusa-fulfillment-shippo/issues"},"homepage":"https://github.com/macder/medusa-fulfillment-shippo#readme","_id":"medusa-fulfillment-shippo@0.18.1","_nodeVersion":"16.15.1","_npmVersion":"8.11.0","dist":{"integrity":"sha512-ph/gXlCqncZs/4cqFdW/M/o9Aks5iCr3cypUvsOoBOchaFC9McU0X2/OlT6Ga2QF7TZ1VVQE0b7vpWnH+0hmuA==","shasum":"8addd4144a4cc837862a9eb2cc22867f778f9289","tarball":"https://registry.npmjs.org/medusa-fulfillment-shippo/-/medusa-fulfillment-shippo-0.18.1.tgz","fileCount":24,"unpackedSize":345952,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGTzLi9LtspqbZWpVoybcbQApfOWZhLC9OScM6FCPOS/AiAvDSeKRL/ZNTt7nnP2Hj5lzzANLx9pYzy1NGASb4xdtQ=="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJi0nwhACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmowzQ//TS5+3zRqw8G0ba7rC/ulqGhLaog/RK1zvpjqCuc1gr9jtrOj\r\nh8kN3EzT7DVkCMNjsLkbixnRnl3V26ofScN5RlL6+2at6rnXuFOhMaVrsRQd\r\nPD35wQXo8ytEW3hNEeThc2OwNq/r0XBT9haMoqD9eh2SpE+ukzH9dYcPmKKG\r\nAKzzTchg5fmZShsVRRmj6jTRKvHBDP9b8AdOoFfG/X5cIJoLa1FBqodfPyl8\r\nffYNw3XLqSWDdSh3a8SBNbDVRGcLfYZ7RXmqZ/MODcsHZqVrCtbWbUt/B3JJ\r\nA7xHt0+gHolOwof3dkOSqzHHZGpMb4QtGMhmRHqT11786dFqWztR4LGyxOcf\r\nTwxRVnXHFf5Ck/Xyba6HkCbCz1pxaZPhoLZ2wo6DL5sIq4Ay39Fh7eX6TIGp\r\nAu1P2bDBlZKqsTFNniyaQuVmclGf6AjB3bLuBPowsrR8NMpHzB9RR3X5aAjY\r\nwjTy4scYjyvhdZEHK4Bdy4QSpHG5QyVcoV/pTzMKSHWeXAST9234LL/FThoH\r\nBqyiWycWlR9yp8+eRMyRHDk8OfU16LHHbCRIPOLZTAtNS2nhyQ5vi+d88+Zd\r\nX9Znsv+oPa1JUOzLdcFjzPLQhb6KF9RoLocDunk487rwxsyq1wDIkcuuIMnq\r\npZ4gL4fBYB/3jT2pJI+1cx4xkmjt3wtFziM=\r\n=wW67\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"macder","email":"maciej@derulski.com"},"directories":{},"maintainers":[{"name":"macder","email":"maciej@derulski.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/medusa-fulfillment-shippo_0.18.1_1657961504881_0.15175023712298108"},"_hasShrinkwrap":false},"0.18.2":{"name":"medusa-fulfillment-shippo","version":"0.18.2","description":"Shippo fulfillment provider for medusa","author":{"name":"Maciej Derulski"},"license":"MIT","scripts":{"build":"babel src -d . --ignore **/__tests__,**/__mocks__","prepare":"cross-env NODE_ENV=production npm run build","watch":"onchange -v src/** -- copyfiles {{file}} ../my-medusa-store","test":"jest"},"dependencies":{"binpackingjs":"^3.0.2","body-parser":"^1.19.0","express":"^4.17.1","express-rate-limit":"^6.4.0","medusa-core-utils":"^1.1.30","shippo":"git+https://github.com/macder/shippo-node-client.git#medusa-fulfillment-shippo"},"peerDependencies":{"medusa-interfaces":"1.x"},"repository":{"type":"git","url":"git+https://github.com/macder/medusa-fulfillment-shippo.git"},"keywords":["medusa","medusa-plugin","medusa-fulfillment","medusa-shippo"],"devDependencies":{"@babel/cli":"^7.7.5","@babel/core":"^7.7.5","@babel/eslint-parser":"^7.15.8","@babel/node":"^7.7.4","@babel/plugin-proposal-class-properties":"^7.7.4","@babel/plugin-transform-classes":"^7.9.5","@babel/plugin-transform-instanceof":"^7.8.3","@babel/plugin-transform-runtime":"^7.7.6","@babel/preset-env":"^7.7.5","@babel/register":"^7.7.4","@babel/runtime":"^7.9.6","@faker-js/faker":"^7.3.0","client-sessions":"^0.8.0","copyfiles":"^2.4.1","cross-env":"^5.2.1","eslint":"^8.2.0","eslint-config-google":"^0.14.0","eslint-config-prettier":"^8.3.0","eslint-plugin-prettier":"^4.0.0","jest":"^28.1.2","jest-extended":"2.0.0","onchange":"^7.1.0"},"gitHead":"76f0a1c3f06e74afe3b3f813af9f10e9a968047a","bugs":{"url":"https://github.com/macder/medusa-fulfillment-shippo/issues"},"homepage":"https://github.com/macder/medusa-fulfillment-shippo#readme","_id":"medusa-fulfillment-shippo@0.18.2","_nodeVersion":"16.15.1","_npmVersion":"8.11.0","dist":{"integrity":"sha512-9Havp8NR/5WFM2ze/YmTLxXdzniJ1MOK38rNqqXCuEwRD7A9ZcERH5CCyVT+o3wurcHYax5Z2Hu+ewMnNtOOxg==","shasum":"38ac04ece5ba7bc7b90b65095f43d72f714ae6c8","tarball":"https://registry.npmjs.org/medusa-fulfillment-shippo/-/medusa-fulfillment-shippo-0.18.2.tgz","fileCount":24,"unpackedSize":350371,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICdNshEI6uTTSK2TB2OG7iswSLV+Y6BygxFW+QyybRM3AiAFrZJwYis49G3cdl+5InnZbXktuU6nAlIgtRqV4br2AA=="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJi03D8ACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmpb8Q//aHX8JZnpH2tbjvNNCTy7k+hNrTcTzeHxNtf7kSU/RChegDe6\r\nIhrF6+T42hI1HeGHysHIJm8Pte3sCe3l7l4B8rXL4UjViNNqm+x3dDQBweHs\r\nuwnYy1fshQj2Gc49WYDqwB/lRgE2esxOY61i6k5KpbrXMJlnfM59DjSoJlhb\r\ndm9oVEsSg1l8dyFbRe/VasP2FiA8maX6UT3/pLafxAiPaHS7bPU7kxhje/i6\r\nLYIWdeGDW8IRlqFZOd+T8Qfg/4yg3acNMiMU85mBmtn940eQzM7Oxu18Wabo\r\nH8YDDfKm6to/tAE+29x4n3HhWyqltcXE2wAo9M83p15pzK9TKgobeQPYQS1o\r\nyz5RptKA2vP8rbKU+fWFSAg3uhFfMZ+CP11dI/bRWsZJw4H3brFK9F3Jig2e\r\n2IdMHoPg8HKddSNEsoRasbl+9C8nDr3tsmPRqLOkgDgSrq4BwXZOimLEkcaL\r\nKhVHOxYtPL6ff5eGo3JXXiNvIzjOX1UdR/6K/JKlCP4W04YTgdDdS/YlmXtN\r\naAkYwijMy0jL8c9n+hI78MbfCRqwaG0v0eiL2InHJXbJrPLMdYAMHsKHfLk+\r\nosUW+FUdmsytL6uOWdJSqk+EDyCo//9C2B0a0hCMv9KkAlDJ9qt3mzqHyj5o\r\nHbuYezNXDdmJYLrmvMt+YobH7oS0PWj8H/M=\r\n=AKk0\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"macder","email":"maciej@derulski.com"},"directories":{},"maintainers":[{"name":"macder","email":"maciej@derulski.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/medusa-fulfillment-shippo_0.18.2_1658024188696_0.006427955893160586"},"_hasShrinkwrap":false},"0.19.0":{"name":"medusa-fulfillment-shippo","version":"0.19.0","description":"Shippo fulfillment provider for medusa","author":{"name":"Maciej Derulski"},"license":"MIT","scripts":{"build":"babel src -d . --ignore **/__tests__,**/__mocks__","prepare":"cross-env NODE_ENV=production npm run build","watch":"onchange -v src/** -- copyfiles {{file}} ../my-medusa-store","test":"jest"},"dependencies":{"binpackingjs":"^3.0.2","body-parser":"^1.19.0","express":"^4.17.1","express-rate-limit":"^6.4.0","medusa-core-utils":"^1.1.30","shippo":"git+https://github.com/macder/shippo-node-client.git#medusa-fulfillment-shippo"},"peerDependencies":{"medusa-interfaces":"1.x"},"repository":{"type":"git","url":"git+https://github.com/macder/medusa-fulfillment-shippo.git"},"keywords":["medusa","medusa-plugin","medusa-fulfillment","medusa-shippo"],"devDependencies":{"@babel/cli":"^7.7.5","@babel/core":"^7.7.5","@babel/eslint-parser":"^7.15.8","@babel/node":"^7.7.4","@babel/plugin-proposal-class-properties":"^7.7.4","@babel/plugin-transform-classes":"^7.9.5","@babel/plugin-transform-instanceof":"^7.8.3","@babel/plugin-transform-runtime":"^7.7.6","@babel/preset-env":"^7.7.5","@babel/register":"^7.7.4","@babel/runtime":"^7.9.6","@faker-js/faker":"^7.3.0","client-sessions":"^0.8.0","copyfiles":"^2.4.1","cross-env":"^5.2.1","eslint":"^8.2.0","eslint-config-google":"^0.14.0","eslint-config-prettier":"^8.3.0","eslint-plugin-prettier":"^4.0.0","jest":"^28.1.2","jest-extended":"2.0.0","onchange":"^7.1.0"},"gitHead":"e1b44905aaa9166aeb910d6e799ff433c78b93ef","bugs":{"url":"https://github.com/macder/medusa-fulfillment-shippo/issues"},"homepage":"https://github.com/macder/medusa-fulfillment-shippo#readme","_id":"medusa-fulfillment-shippo@0.19.0","_nodeVersion":"16.15.1","_npmVersion":"8.11.0","dist":{"integrity":"sha512-GsBplCddJxphaEVDeGxc4XUH208oYcqZkQMNLp/Ys+wvoMxVzI5vWiY9hinfmCIhSActOSUZ5ZQXNKvWidFPzg==","shasum":"ef8ca0cb8822f051f6de067665ffdb230daf31aa","tarball":"https://registry.npmjs.org/medusa-fulfillment-shippo/-/medusa-fulfillment-shippo-0.19.0.tgz","fileCount":24,"unpackedSize":355505,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIAbEdVBiCNs0h1o/bQFzXEJtPQVgz9F9d2q6WDlZsHvHAiAZ3tS8/55cV23GpDvJ+vvxF4afRISQVQvwB9rUVIjhKg=="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJi1JKTACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmrtCw/8C1n51tyCzwTOhZ+SvqzxcnJZbb64EI/Stm7KllEo9mNszoM4\r\nQ5IrmpWReAy1ZOBOB/ROjtRFm6mo0RfvUFlHezhf3JWpcqlIrd4Cx9782b6X\r\no63PaXrKqs4JXnDWeGmYCzHmTf8Rb6IbipBNi0j5UpRAaSjUEo5URipV8Qvu\r\nfTXITrVl0XIBHMY5k9Wgw/gt3WogWQhzK5zEQwgPVYd/cuQlNFT0ITZOH1sN\r\na5+qXiFSrJcP7zpNKCFlzRUPzWyd8YafqOhBpkLLch5loyx1QxnwUjZCW0I0\r\nQqYmG6PedDNZKOFFDkPRUg5+uoCTIH61hKzjn26kr9hcL/XicqiGqMDPVpLh\r\nGavttj9SUMSinxwFALb3ukfdlrRmTCrBWRyXOrXVml6jvWlfw9RzZJOxhX/Y\r\niDcU1/Ppx/wkCgbMUohg32Sj+NTp3eaI/AL8nPcZrI6Q4cvgpFQrkeK8vdeY\r\nSCTFBIRCmlKjsT11uVcSLol0GCA1MZ+/6WjX5GtaPdhK7BdO3+V48xDmKsxy\r\nRt+l8Y3DgKPiK4XD7e9hhPtJ6LdtWEyxFGtjO29bGYyvT1JFaoIpvy3Gz1/m\r\n4m5fN+VErA2mWJrZFIWYPHh74uESBOxGEBJ9XukwFQuV9Tt3gDQlVZQxprbS\r\nDi2uQHfp5Z9d4ZKOBlDxvFoq8B3WQuLfEDM=\r\n=ILkT\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"macder","email":"maciej@derulski.com"},"directories":{},"maintainers":[{"name":"macder","email":"maciej@derulski.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/medusa-fulfillment-shippo_0.19.0_1658098323411_0.8448426838566461"},"_hasShrinkwrap":false},"0.20.0":{"name":"medusa-fulfillment-shippo","version":"0.20.0","description":"Shippo fulfillment provider for medusa","author":{"name":"Maciej Derulski"},"license":"MIT","scripts":{"build":"babel src -d . --ignore **/__tests__,**/__mocks__","prepare":"cross-env NODE_ENV=production npm run build","watch":"onchange -v src/** -- copyfiles {{file}} ../my-medusa-store","test":"jest"},"dependencies":{"binpackingjs":"^3.0.2","body-parser":"^1.19.0","express":"^4.17.1","express-rate-limit":"^6.4.0","medusa-core-utils":"^1.1.30","shippo":"git+https://github.com/macder/shippo-node-client.git#medusa-fulfillment-shippo"},"peerDependencies":{"medusa-interfaces":"1.x"},"repository":{"type":"git","url":"git+https://github.com/macder/medusa-fulfillment-shippo.git"},"keywords":["medusa","medusa-plugin","medusa-fulfillment","medusa-shippo"],"devDependencies":{"@babel/cli":"^7.7.5","@babel/core":"^7.7.5","@babel/eslint-parser":"^7.15.8","@babel/node":"^7.7.4","@babel/plugin-proposal-class-properties":"^7.7.4","@babel/plugin-transform-classes":"^7.9.5","@babel/plugin-transform-instanceof":"^7.8.3","@babel/plugin-transform-runtime":"^7.7.6","@babel/preset-env":"^7.7.5","@babel/register":"^7.7.4","@babel/runtime":"^7.9.6","@faker-js/faker":"^7.3.0","client-sessions":"^0.8.0","copyfiles":"^2.4.1","cross-env":"^5.2.1","eslint":"^8.2.0","eslint-config-google":"^0.14.0","eslint-config-prettier":"^8.3.0","eslint-plugin-prettier":"^4.0.0","jest":"^28.1.2","jest-extended":"2.0.0","onchange":"^7.1.0"},"gitHead":"3598b3754286cbb70950e61232ba5696b4f8df9e","bugs":{"url":"https://github.com/macder/medusa-fulfillment-shippo/issues"},"homepage":"https://github.com/macder/medusa-fulfillment-shippo#readme","_id":"medusa-fulfillment-shippo@0.20.0","_nodeVersion":"16.15.1","_npmVersion":"8.11.0","dist":{"integrity":"sha512-QRMMIUI7ZMkOYgfQ8BZwmxrxJqDHmMbuiACB//FiQQX/mMj4ATVCQ9nRvgYrewuwISKIQY/NsQ3Pg2pNdBcgTQ==","shasum":"34fa829ea6899e1bd8bf638bd15b40dffbfba930","tarball":"https://registry.npmjs.org/medusa-fulfillment-shippo/-/medusa-fulfillment-shippo-0.20.0.tgz","fileCount":23,"unpackedSize":399527,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDLxjX4SBBAi2cblGL0oTsvCRMxQ5zhCrFdgIm5p9dqzQIhAK3/mVfypv38Bd6gwDYb0ujML/UKKcy3xNrU+oDWQ82H"}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJi1nM+ACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmp7cQ//VB/K/XuW1FGQ7afLQn0xxzJ48+V2EoD2mArLFf4dUHaERGCe\r\nw1TXrP1h6iCCwedhyQWbWK0ptTxTIBVHc1K0nalvqaMtndGXVW6wNaWHnqaO\r\nH2oJ2lurNoomD/VszDGjfPtK+ZzXUUPUd+/9HpzyS7fkhGWsk0IfoapHfoAu\r\n+fnQxafu+xsdgsKecQgDdDS164U5qMCtAPBZ4EU3wV8L7Hh10/2x8mnAFJlo\r\ns/RbMmkmer3LmDnQCnkFX9nsmuGjxN9k2BRfVsIw2l1Yg//VhNSw6JZsh39L\r\nZ+i/mNjA2JJ3SmPG+y0fH13ZwCQQxJLR3o405j0r7WvKNZacUJ+5NesM6p00\r\nPlEw2b9bALYV/REHgKxrcwOz0pC7GYDqiB3ic2ayQpM06pJn1xedseXe1PGo\r\nDceRWNT+OG9rRl8lWjknE9YkQiI9N0ZHltisCH3Z7+Vm4aP5jzO+5wydD4Q7\r\nPqWM/CCbMD1DDNvNnxYMjnvjAY6oHtYtaFx2z4AzDLAYNxPQB9+sJ2+cP99I\r\nLBJzB5QZIOuNp2+w9EZwvwTO8whNkRqetWt2sDxf2sSWCaypM/Idn+hP9IJf\r\n5072WXcRh0Bwd0CdqXG2lvgQyDECwqpodf2XAotri+YN2j+Os1TNp3pa+OCm\r\nszDq3MZZvNFgqrU3qADSZ+JsH7C5O+vk7KA=\r\n=Dk3s\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"macder","email":"maciej@derulski.com"},"directories":{},"maintainers":[{"name":"macder","email":"maciej@derulski.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/medusa-fulfillment-shippo_0.20.0_1658221373753_0.14767085512626466"},"_hasShrinkwrap":false},"0.21.0":{"name":"medusa-fulfillment-shippo","version":"0.21.0","description":"Shippo fulfillment provider for medusa","author":{"name":"Maciej Derulski"},"license":"MIT","scripts":{"build":"babel src -d . --ignore **/__tests__,**/__mocks__","prepare":"cross-env NODE_ENV=production npm run build","watch":"onchange -v src/** -- copyfiles {{file}} ../my-medusa-store","test":"jest"},"dependencies":{"binpackingjs":"^3.0.2","body-parser":"^1.19.0","express":"^4.17.1","express-rate-limit":"^6.4.0","medusa-core-utils":"^1.1.30","shippo":"git+https://github.com/macder/shippo-node-client.git#medusa-fulfillment-shippo"},"peerDependencies":{"medusa-interfaces":"1.x"},"repository":{"type":"git","url":"git+https://github.com/macder/medusa-fulfillment-shippo.git"},"keywords":["medusa","medusa-plugin","medusa-fulfillment","medusa-shippo"],"devDependencies":{"@babel/cli":"^7.7.5","@babel/core":"^7.7.5","@babel/eslint-parser":"^7.15.8","@babel/node":"^7.7.4","@babel/plugin-proposal-class-properties":"^7.7.4","@babel/plugin-transform-classes":"^7.9.5","@babel/plugin-transform-instanceof":"^7.8.3","@babel/plugin-transform-runtime":"^7.7.6","@babel/preset-env":"^7.7.5","@babel/register":"^7.7.4","@babel/runtime":"^7.9.6","@faker-js/faker":"^7.3.0","client-sessions":"^0.8.0","copyfiles":"^2.4.1","cross-env":"^5.2.1","eslint":"^8.2.0","eslint-config-google":"^0.14.0","eslint-config-prettier":"^8.3.0","eslint-plugin-prettier":"^4.0.0","jest":"^28.1.2","jest-extended":"2.0.0","onchange":"^7.1.0"},"gitHead":"2f1c30d8823c8a3c8e1a187cc85d959ec2617db0","bugs":{"url":"https://github.com/macder/medusa-fulfillment-shippo/issues"},"homepage":"https://github.com/macder/medusa-fulfillment-shippo#readme","_id":"medusa-fulfillment-shippo@0.21.0","_nodeVersion":"16.15.1","_npmVersion":"8.11.0","dist":{"integrity":"sha512-pjeigBPNdm+8qph+PLht+iHhOt3NHmQLFCMBfwMH8Vmx9lzPdFM50W51r6ZxZGadBeRnhCAU9EFKk2HUhYKidg==","shasum":"30a80e02e47842cc2f14fce6a175e982161c04c3","tarball":"https://registry.npmjs.org/medusa-fulfillment-shippo/-/medusa-fulfillment-shippo-0.21.0.tgz","fileCount":24,"unpackedSize":434846,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDH7OKyONRHP+eIAcG0sUxrQaIBvUnCVgV9Qtqo+t//pAIgV8Ov0gow1vBJ5+lxygyxdWY3rG+GSuShUxnFferWjoE="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJi15ReACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmprnRAAkBrO8WedVvxGLNbUXq6kf2xzXRe2E0r3wRt1DxB8qVKW15q8\r\nXYvLmQS27wOuj2C3WRfh3T0Pi2mpUe/5OtonRT8GsdxhyKQU8mTK+h5fUQzn\r\n2Kqwdvq+wzUe8/X8wVWv6lwpCv0hVboedyyV7Tg7fZO5YdeGXiJuT53ouohA\r\nWrH5iy2kytdNOpa4rKnwDqcXkytaOdfNUF6DcrOMICpgyUEhOm7JpgInQhdb\r\noZTBB9ZkO1RZzinHSJOp3YkLt++UJyGApGtktvusjxbgnzuFq+5RmEfkIcnF\r\nel5Zki1hiDpBOi0K9LWOpOKJdWH5WHT7/JDp0/KxHjPYbyJCohAp7hnJqC3n\r\n3VyEzBZm7ExqTVJyJUqMDdrfeKiqeFEqNUpkLmzKrbVsEpvm1LeZSn38zCwD\r\nRAfoHYBCpZqlMApQG3AtpX5qZlY5/9yp4pXUYu+a0HhPE1433/XoiBqD0JS7\r\nM8SHci00hMBzTwR9pMMiBzXpuGEzeidV7ZWtgg+/R5YYiG4IJLqkN2lhf8wQ\r\ncKXWEySLuru3P0IY85fvixZQ3qLCdrlaHHdpecLCZzlq3fJdSAc1OB4hij3P\r\n2XuUCE3nWxjFC0jWSKXi7s9yMUfUt6DaL+cnUAI/UjMJttWft8Xgj3I/1Qul\r\nvgBsjLimBvDG1n3aDl8uDEqTj0Bwcjl8tLE=\r\n=ZovP\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"macder","email":"maciej@derulski.com"},"directories":{},"maintainers":[{"name":"macder","email":"maciej@derulski.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/medusa-fulfillment-shippo_0.21.0_1658295390510_0.36428419148863833"},"_hasShrinkwrap":false},"0.21.1":{"name":"medusa-fulfillment-shippo","version":"0.21.1","description":"Shippo fulfillment provider for medusa","author":{"name":"Maciej Derulski"},"license":"MIT","scripts":{"build":"babel src -d . --ignore **/__tests__,**/__mocks__","prepare":"cross-env NODE_ENV=production npm run build","watch":"onchange -v src/** -- copyfiles {{file}} ../my-medusa-store","test":"jest"},"dependencies":{"binpackingjs":"^3.0.2","body-parser":"^1.19.0","express":"^4.17.1","express-rate-limit":"^6.4.0","medusa-core-utils":"^1.1.30","shippo":"git+https://github.com/macder/shippo-node-client.git#medusa-fulfillment-shippo"},"peerDependencies":{"medusa-interfaces":"1.x"},"repository":{"type":"git","url":"git+https://github.com/macder/medusa-fulfillment-shippo.git"},"keywords":["medusa","medusa-plugin","medusa-fulfillment","medusa-shippo"],"devDependencies":{"@babel/cli":"^7.7.5","@babel/core":"^7.7.5","@babel/eslint-parser":"^7.15.8","@babel/node":"^7.7.4","@babel/plugin-proposal-class-properties":"^7.7.4","@babel/plugin-transform-classes":"^7.9.5","@babel/plugin-transform-instanceof":"^7.8.3","@babel/plugin-transform-runtime":"^7.7.6","@babel/preset-env":"^7.7.5","@babel/register":"^7.7.4","@babel/runtime":"^7.9.6","@faker-js/faker":"^7.3.0","client-sessions":"^0.8.0","copyfiles":"^2.4.1","cross-env":"^5.2.1","eslint":"^8.2.0","eslint-config-google":"^0.14.0","eslint-config-prettier":"^8.3.0","eslint-plugin-prettier":"^4.0.0","jest":"^28.1.2","jest-extended":"2.0.0","onchange":"^7.1.0"},"gitHead":"935008a9e7608b1f671ce25c3242341f19942d8e","bugs":{"url":"https://github.com/macder/medusa-fulfillment-shippo/issues"},"homepage":"https://github.com/macder/medusa-fulfillment-shippo#readme","_id":"medusa-fulfillment-shippo@0.21.1","_nodeVersion":"16.15.1","_npmVersion":"8.11.0","dist":{"integrity":"sha512-eQfFqSnYxzH/OTjm1zuIJoPy7f6TiktBqcN+f2TSXtTASTk97Ct09etTaa9vh6DLHKxMmVWzCZ2z7y7fx+2gkw==","shasum":"63cf858098572a361cd08d41166a476058f16804","tarball":"https://registry.npmjs.org/medusa-fulfillment-shippo/-/medusa-fulfillment-shippo-0.21.1.tgz","fileCount":24,"unpackedSize":439711,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDPh/IVTToqakBWCMJ2KoTrRS/cRWVZWNp3AIcQMvJq7QIgSaqx+Qa5yUjpCcZIfP3sYZ/E40neJQWKScJW6NYlO3A="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJi2IQdACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmrHJQ/9FfT2VCkURjXTMVFYAW50T45jbuOrYAtXhh3ZTbQYbE29QT9L\r\nx78btDLpm1EjgJx0VNdyrTFjftRdA0TeRyE9v/hDOW4dKLx2RJhaeU8BhEae\r\nUXmhtEOdARyc1saJ8SJbpayKMnzZBeSDY7AB2DARlEj+TdpB7JVi8EMm0Qa1\r\nUxSj2NILSD7Xt8XiTLcpTybWv0DWv+xx1eO/g/76YBuByoZ7E5bKwR4a9x5X\r\nDbbphNlUaOCSa3JB5z8T4iZ0t0+r2gG8qORHYV3hqra9mVzuU4cmD2Di23RN\r\npvsrQRvBuGxliswwZM5qKbUIxTbrsaNX9wPpCbzvxkZ7iYfDoWWLUcCy6BxN\r\nuAN9NR2Yz1gy7JZTKfZUQTNYupR9Qf+xQfFJvLy9qUj+gmu9gBiFsVUkbKXx\r\nC3zdMQEWj1qX7tLgf9bzFb75iIOFH2V+cu4s7ja75M29PVmBOV7DOGx9McJe\r\nsn2tCyXT+CGuRLtSAW31YDaBl3AtN7iNA8COyILJ6mWYBSMF7jmHtUGHK/rk\r\npcD2YXhSbnl8AnXAdMU6MqQMf9PITmBzAZT0Sl1yYp9MqPAbDlBks3//JWNQ\r\noKE+RsEzhXnKCWq7Im6suxp3GgJ7aRARnnFkWYTI6dVs2KiMLmaAamQ3v+0j\r\nvqrnZabkbXRv2ttQhzRHmuD2pnbkur7NJ+I=\r\n=Rq8I\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"macder","email":"maciej@derulski.com"},"directories":{},"maintainers":[{"name":"macder","email":"maciej@derulski.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/medusa-fulfillment-shippo_0.21.1_1658356765645_0.80341324073653"},"_hasShrinkwrap":false},"0.22.0":{"name":"medusa-fulfillment-shippo","version":"0.22.0","description":"Shippo fulfillment provider for medusa","author":{"name":"Maciej Derulski"},"license":"MIT","scripts":{"build":"babel src -d . --ignore **/__tests__,**/__mocks__,**/sandbox,**/sand.js","prepare":"cross-env NODE_ENV=production npm run build","watch":"onchange -v src/** -- copyfiles {{file}} ../my-medusa-store","test":"jest"},"dependencies":{"binpackingjs":"^3.0.2","body-parser":"^1.19.0","express":"^4.17.1","express-rate-limit":"^6.4.0","medusa-core-utils":"^1.1.30","shippo":"git+https://github.com/macder/shippo-node-client.git#medusa-fulfillment-shippo"},"peerDependencies":{"medusa-interfaces":"1.x"},"repository":{"type":"git","url":"git+https://github.com/macder/medusa-fulfillment-shippo.git"},"keywords":["medusa","medusa-plugin","medusa-fulfillment","medusa-shippo"],"devDependencies":{"@babel/cli":"^7.7.5","@babel/core":"^7.7.5","@babel/eslint-parser":"^7.15.8","@babel/node":"^7.7.4","@babel/plugin-proposal-class-properties":"^7.7.4","@babel/plugin-transform-classes":"^7.9.5","@babel/plugin-transform-instanceof":"^7.8.3","@babel/plugin-transform-runtime":"^7.7.6","@babel/preset-env":"^7.7.5","@babel/register":"^7.7.4","@babel/runtime":"^7.9.6","@faker-js/faker":"^7.3.0","client-sessions":"^0.8.0","copyfiles":"^2.4.1","cross-env":"^5.2.1","eslint":"^8.20.0","eslint-config-airbnb-base":"^15.0.0","eslint-config-prettier":"^8.3.0","eslint-plugin-import":"^2.26.0","eslint-plugin-prettier":"^4.0.0","jest":"^28.1.2","jest-extended":"2.0.0","onchange":"^7.1.0"},"gitHead":"45270f889352d2c12b4dd570d079c0db34ea012c","bugs":{"url":"https://github.com/macder/medusa-fulfillment-shippo/issues"},"homepage":"https://github.com/macder/medusa-fulfillment-shippo#readme","_id":"medusa-fulfillment-shippo@0.22.0","_nodeVersion":"16.15.1","_npmVersion":"8.11.0","dist":{"integrity":"sha512-nB/49yPz07FutmX1vGki+SrvDlWIKKVEk8GclvujS155XOj/xF2GuCx4hCV+tYbiPtE1kJe0eAc2RLhVA8NgiA==","shasum":"1d5cd7779f26509aee0b0e5fd360eff929d8fef4","tarball":"https://registry.npmjs.org/medusa-fulfillment-shippo/-/medusa-fulfillment-shippo-0.22.0.tgz","fileCount":24,"unpackedSize":460294,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQChrpUFaIanD97WTLGP6vqRkXlqgumAa4kiq3tG/JSSRgIgNtNPfYPmZeSaUb8wVHx6mf3WHUaMAunfLczEwlpz9zk="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJi2hbQACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmqO0A/9FEhVFrdw1DC8IiAMAZ5+cb/jkeugU5ubKR9vaSDpgaphYwMX\r\nzpLlo2NiWKqzxy1d3IvRP9qNm3KoA6nv5bPPFH9rT6nJPIWxd54aNoIiuzl/\r\nqSMRX19xcGl+SY0vohwcNQi9CAMq6XiT5gg3tDxBmDvNR3Zlj2R7WqE8UrWx\r\nHXLs0BN+jll7R8b4zuDvS4bxIw57Gf3PRoJ23u1DalNZCXJvHug3f21uLgNk\r\nowFEKjw3qjJboDKmjhkLVYCXs4MMbHWnI0eYMM4V4XpG11Pdh5fKXeQR2Hgy\r\nDB5q12wQgE713art+i1MM7XEK6wX53rolCMDf87AnNgxcTzvKrJXhIiURVtK\r\nqRdQrIRIvarD9yAOh4L6FFjy4G32B7jnO9RjdyFsETUjObQUL9cANYcGtyiN\r\nlOyA8irWdStgd8uoyHCDEtv/90rtXkWyFbHcjAAgNYkY45Ay6fRmcyYOEADB\r\nmPJrLgHJzmLQXzsgGqSTCkK0UYi44PiLyNOfMaknsrZdosp8ymi55Qai0mbx\r\nmykhT5mMQYgbF1ZW7f494m7TAmtKDwnxBF/JCXxlxOUp7fMlhjCk5mNddG6F\r\nWRNt4Jy0TlZhURwgZtf7CeNNh4i+btHAvYj54Spilf5ISJ2S1jd+gLJFkUlU\r\nVnWpb8yMZL9GBqidMdLqoCeHs8oPDnkHCPM=\r\n=gWZ5\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"macder","email":"maciej@derulski.com"},"directories":{},"maintainers":[{"name":"macder","email":"maciej@derulski.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/medusa-fulfillment-shippo_0.22.0_1658459856236_0.1631257717436847"},"_hasShrinkwrap":false},"0.22.1":{"name":"medusa-fulfillment-shippo","version":"0.22.1","description":"Shippo fulfillment provider for medusa","author":{"name":"Maciej Derulski"},"license":"MIT","scripts":{"build":"babel src -d . --ignore **/__tests__,**/__mocks__,**/sandbox,**/sand.js","prepare":"cross-env NODE_ENV=production npm run build","watch":"onchange -v src/** -- copyfiles {{file}} ../my-medusa-store","test":"jest"},"dependencies":{"binpackingjs":"^3.0.2","body-parser":"^1.19.0","express":"^4.17.1","express-rate-limit":"^6.4.0","medusa-core-utils":"^1.1.30","shippo":"git+https://github.com/macder/shippo-node-client.git#medusa-fulfillment-shippo"},"peerDependencies":{"medusa-interfaces":"1.x"},"repository":{"type":"git","url":"git+https://github.com/macder/medusa-fulfillment-shippo.git"},"keywords":["medusa","medusa-plugin","medusa-fulfillment","medusa-shippo"],"devDependencies":{"@babel/cli":"^7.7.5","@babel/core":"^7.7.5","@babel/eslint-parser":"^7.15.8","@babel/node":"^7.7.4","@babel/plugin-proposal-class-properties":"^7.7.4","@babel/plugin-transform-classes":"^7.9.5","@babel/plugin-transform-instanceof":"^7.8.3","@babel/plugin-transform-runtime":"^7.7.6","@babel/preset-env":"^7.7.5","@babel/register":"^7.7.4","@babel/runtime":"^7.9.6","@faker-js/faker":"^7.3.0","client-sessions":"^0.8.0","copyfiles":"^2.4.1","cross-env":"^5.2.1","eslint":"^8.20.0","eslint-config-airbnb-base":"^15.0.0","eslint-config-prettier":"^8.3.0","eslint-plugin-import":"^2.26.0","eslint-plugin-prettier":"^4.0.0","jest":"^28.1.2","jest-extended":"2.0.0","onchange":"^7.1.0"},"gitHead":"ea576755be6d56363f8335fa4e66a61fd85bf95f","bugs":{"url":"https://github.com/macder/medusa-fulfillment-shippo/issues"},"homepage":"https://github.com/macder/medusa-fulfillment-shippo#readme","_id":"medusa-fulfillment-shippo@0.22.1","_nodeVersion":"16.15.1","_npmVersion":"8.11.0","dist":{"integrity":"sha512-NL+uCCuDJ0WgHdCePxRJELlQCv0XEd8GvWsirmfZvZtsSdzCY4LOfHMb+cXS1AIW4+Zycsx+FBsPoCzqQiy10A==","shasum":"9ea57f3cd44cad6d82e663b0d008a191e2b4f9f6","tarball":"https://registry.npmjs.org/medusa-fulfillment-shippo/-/medusa-fulfillment-shippo-0.22.1.tgz","fileCount":24,"unpackedSize":460441,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHvrhievJgBpR5Wr3pHYqRZtaPUZj7OFg3RVMuc52ohQAiA9bI/NP60lzpo+Rd208KmkUGGosWyifjCmCu1W0PHQRg=="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJi2lEXACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmq+0w//RnZxBLUqbhVh8CpCNBwme7ckTvyOsycYf+TlKPFHFyXLobMz\r\nr544SmwtjW4c1DL8Z0nxu8UBij9vyyN1XWaGbnNgeLczhdpCj23cSPg4Z37V\r\nCbitszQDXMITXotBihpi7Z7aRytKvHiFFzgy6ViTBl4j6LY4zEKAr54zQPja\r\nqsxKr2oRX7y2waj+eBobeqBt1owWqhe8nW/RMLp7+WRCpHjrMaHUTqdGCxuU\r\nA1v+GS2nSzsVLDy7KI+nylGPW4lxFj/mt3nQm1Diswxx8+rg668dLlf6O4DX\r\n5XMQKjR9xJlUlrQB/DvxsU3cXh6ELy2Zc+nKzohkbSQGRRC5Xk2oJXiRIp58\r\n2qU4lZvlgJlsePCIqxGzoGCv5/zbxNP2ify6lWRZjcU+BMmFzTjMhG7F3zbS\r\n7dyyqz01qxjtMjke/5aFWH4UTtbxm+ylT4qe2QnJyQuvKj/Qnflt6WgmQUi/\r\nl7gwpOcNTpp2OpnGy426a7U96GFRg6REwNRaSs2hRHdQuzu4hbVEk//DqqAv\r\n954+QW0Ikop7w2QidJKEPxSNE2ma/nkr2yRpHaEb4NvCMEUzQL8BSBoRY6rE\r\nQkvIHLewLHXjeAI36RlgrFkVbljT+wdFrOgvRINhsiRZ0+CNO0ldSzcvqdQR\r\n7h7xQQPbJOn3AjfX0oHM/1cXcx8OvTBezMU=\r\n=itN9\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"macder","email":"maciej@derulski.com"},"directories":{},"maintainers":[{"name":"macder","email":"maciej@derulski.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/medusa-fulfillment-shippo_0.22.1_1658474775148_0.7530348520446795"},"_hasShrinkwrap":false},"0.22.2":{"name":"medusa-fulfillment-shippo","version":"0.22.2","description":"Shippo fulfillment provider for medusa","author":{"name":"Maciej Derulski"},"license":"MIT","scripts":{"build":"babel src -d . --ignore **/__tests__,**/__mocks__,**/sandbox,**/sand.js","prepare":"cross-env NODE_ENV=production npm run build","watch":"onchange -v src/** -- copyfiles {{file}} ../my-medusa-store","test":"jest"},"dependencies":{"binpackingjs":"^3.0.2","body-parser":"^1.19.0","express":"^4.17.1","express-rate-limit":"^6.4.0","medusa-core-utils":"^1.1.30","shippo":"git+https://github.com/macder/shippo-node-client.git#medusa-fulfillment-shippo"},"peerDependencies":{"medusa-interfaces":"1.x"},"repository":{"type":"git","url":"git+https://github.com/macder/medusa-fulfillment-shippo.git"},"keywords":["medusa","medusa-plugin","medusa-fulfillment","medusa-shippo"],"devDependencies":{"@babel/cli":"^7.7.5","@babel/core":"^7.7.5","@babel/eslint-parser":"^7.15.8","@babel/node":"^7.7.4","@babel/plugin-proposal-class-properties":"^7.7.4","@babel/plugin-transform-classes":"^7.9.5","@babel/plugin-transform-instanceof":"^7.8.3","@babel/plugin-transform-runtime":"^7.7.6","@babel/preset-env":"^7.7.5","@babel/register":"^7.7.4","@babel/runtime":"^7.9.6","@faker-js/faker":"^7.3.0","client-sessions":"^0.8.0","copyfiles":"^2.4.1","cross-env":"^5.2.1","eslint":"^8.20.0","eslint-config-airbnb-base":"^15.0.0","eslint-config-prettier":"^8.3.0","eslint-plugin-import":"^2.26.0","eslint-plugin-prettier":"^4.0.0","jest":"^28.1.2","jest-extended":"2.0.0","onchange":"^7.1.0"},"gitHead":"28442a9c2728e698844d0d6be85541389add7922","bugs":{"url":"https://github.com/macder/medusa-fulfillment-shippo/issues"},"homepage":"https://github.com/macder/medusa-fulfillment-shippo#readme","_id":"medusa-fulfillment-shippo@0.22.2","_nodeVersion":"16.15.1","_npmVersion":"8.11.0","dist":{"integrity":"sha512-CxEtJhFubaJRn9vuI0SCCY0Gk+c7AoHK3af893BGk5qPZfj5slgNx8JHiDgGpsSfD7ni6n5hHugk2Lah5LeHQw==","shasum":"9fc50f9e42ae2f22ae6d3634e7059f8094cf9053","tarball":"https://registry.npmjs.org/medusa-fulfillment-shippo/-/medusa-fulfillment-shippo-0.22.2.tgz","fileCount":24,"unpackedSize":464277,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGrgeAJI2cryG3GWs6vzH9pHwSpYKUK1eOVoR0gS1SckAiEAln+y7UCCoA0JoMkVzkc8PMl91UcoacpTQ1vPYVBum54="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJi23BdACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmpLgA//Z2M+P/dbVabyITgrA++xGqua/zu23lbQOBMB7nyr3SQ0z49W\r\nd5YdxL/zYxbtorNI9xN1OACUuh2/h3q/JR71fO2MayIUtfhDiCND7P+3A/Sw\r\n/Qnl/IbfystsJ2WK5CQu3VPNYTjv3JgiB7F2KF0vRnZ0Zjcy4MWD0Y4cuiQX\r\nAZKKXbLo5XeTr00+KcPenc4yeKONs6MVwNsiQBqrYmAyqiqZIn68tPJKT1Zr\r\n9v6W2esRVZMBjA2pOWfnd20BHJds7aSYPtlz3Ipkz3AcOez2ELoyQE77cP6t\r\nOGG4iyrvbXaDzzCiOgSwfYFJ5547tKbRJqbDKQzZBEPUCnv5BLI4bjjqK4lS\r\n8oznY4IR3wfqWSPigjfW3DIw98WdYqtjG8P3XEiVuSPgPajxYdS6acBVXNDh\r\nSBYF6mTx4obV4f7nBYEHc0kYsfZwrFtt8rvfMu44mHI9GtCictZGWiZuWU9m\r\nYOZNDKUjKK3jyfsz7QjtsKQdjBpYNRrd3bvDTubf+p8C4WLC5+admBZRTTQR\r\nMicme7ikTzr0ipQOfZqJOmPHs5e9Fzek/fGLsQ658CK10htJeVer9JZmNAgF\r\nFX7k3BZVfe6VFAD6VAsbBMMdH3XYFPagxqaompdk0nsIMDsVJZQJO2pwEL1U\r\nxBs+NMbZ0PBDYw2T94UiJvV2/w/rs0IwQPU=\r\n=zF3L\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"macder","email":"maciej@derulski.com"},"directories":{},"maintainers":[{"name":"macder","email":"maciej@derulski.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/medusa-fulfillment-shippo_0.22.2_1658548317206_0.3498608287412357"},"_hasShrinkwrap":false},"0.22.3":{"name":"medusa-fulfillment-shippo","version":"0.22.3","description":"Shippo fulfillment provider for medusa","author":{"name":"Maciej Derulski"},"license":"MIT","scripts":{"build":"babel src -d . --ignore **/__tests__,**/__mocks__,**/sandbox,**/sand.js","prepare":"cross-env NODE_ENV=production npm run build","watch":"onchange -v src/** -- copyfiles {{file}} ../my-medusa-store","test":"jest"},"dependencies":{"binpackingjs":"2.3.3","body-parser":"^1.19.0","express":"^4.17.1","express-rate-limit":"^6.4.0","medusa-core-utils":"^1.1.30","shippo":"git+https://github.com/macder/shippo-node-client.git#medusa-fulfillment-shippo"},"peerDependencies":{"medusa-interfaces":"1.x"},"repository":{"type":"git","url":"git+https://github.com/macder/medusa-fulfillment-shippo.git"},"keywords":["medusa","medusa-plugin","medusa-fulfillment","medusa-shippo"],"devDependencies":{"@babel/cli":"^7.7.5","@babel/core":"^7.7.5","@babel/eslint-parser":"^7.15.8","@babel/node":"^7.7.4","@babel/plugin-proposal-class-properties":"^7.7.4","@babel/plugin-transform-classes":"^7.9.5","@babel/plugin-transform-instanceof":"^7.8.3","@babel/plugin-transform-runtime":"^7.7.6","@babel/preset-env":"^7.7.5","@babel/register":"^7.7.4","@babel/runtime":"^7.9.6","@faker-js/faker":"^7.3.0","client-sessions":"^0.8.0","copyfiles":"^2.4.1","cross-env":"^5.2.1","eslint":"^8.20.0","eslint-config-airbnb-base":"^15.0.0","eslint-config-prettier":"^8.3.0","eslint-plugin-import":"^2.26.0","eslint-plugin-prettier":"^4.0.0","jest":"^28.1.2","jest-extended":"2.0.0","onchange":"^7.1.0"},"gitHead":"c29e495fac32efdb5498d341b8d4ca4b44d39aeb","bugs":{"url":"https://github.com/macder/medusa-fulfillment-shippo/issues"},"homepage":"https://github.com/macder/medusa-fulfillment-shippo#readme","_id":"medusa-fulfillment-shippo@0.22.3","_nodeVersion":"16.15.1","_npmVersion":"8.11.0","dist":{"integrity":"sha512-41TJojQFdU45K3uBaT5AVgUaRtziUG8pOSatAVjLf2eXeAweTCWie+iQzLy/JlCyHby/pceQhxOxPrrFFTW1VA==","shasum":"48c68c1ce530f641e311aba18db26b7813230f0c","tarball":"https://registry.npmjs.org/medusa-fulfillment-shippo/-/medusa-fulfillment-shippo-0.22.3.tgz","fileCount":24,"unpackedSize":463431,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDhTWqOEyKkYS6c9A3IzXFQOXmuub1oBMocKYKNxMRmpQIgVLjU+PP+1vr1kC4JertN3NGgSAjmPmYjgzYWhcy6jaY="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJi3IcgACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmrPVA/+JRELLOIfXrXVEymwznA5X21fBR0tavP5LJC0Fa3kinfKUC03\r\nbhyd6m4IPIu+2ItlaJrKRR8xp22Bzl5HcDGsTKNhb/izGOAHSESIAwZbBQxX\r\nd5XCFlv1reO9Isb3rPG+IFuV6Dfc3fmPY5qc8A1yZVobYsTg7oRKgH6U+Qc2\r\nAv15bGbFKmN62VY9vk3r7z2HrUeut90fv0gMIGSxI47GN968AXpyf+ZuTzXr\r\n28V2n8R739qe/5f/Kxr0Yzc3revU5eBtwD79bZjqMInGUUpAeFbPfZovZ/Fw\r\n6fM9pLF36kHLi+iowT7IJAeBb25nfhzd8xESeozkBLRL4+R9Ae9vAYScgG5P\r\n2RY3+YNwqQzuHUEF44YxotChPOU7c6986ZD4QjwxmC8B4+vLRUiRxxKRstE5\r\nJCnJOKSYx0r7A3h2nqaRf6L3sF0f99dA8HeoIB/KcP+Qfo8nH2a8snMpQ/7X\r\nB4po9k1NP+7Un4VTuhCkpGBDASk2EpeeuoElcDIfeoni2UZRm2+EY4/DdcsA\r\npo6OGZbyBYpsuD9kjVulgxvETq713Oo8cf8oyn4VQGOG41v4K5FEaJrIr6Iu\r\n9aUqs8AfRrh/UJPcxlTz2w/mEE3jurZ788geFQ9S8S/p0Vi+INLfZt/K5VTj\r\n7eAZi6iQVKuq4C59z5XfnkeA3pCy2FoZ0mQ=\r\n=+yZr\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"macder","email":"maciej@derulski.com"},"directories":{},"maintainers":[{"name":"macder","email":"maciej@derulski.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/medusa-fulfillment-shippo_0.22.3_1658619679944_0.1351861730391719"},"_hasShrinkwrap":false},"0.23.0":{"name":"medusa-fulfillment-shippo","version":"0.23.0","description":"Shippo fulfillment provider for medusa","author":{"name":"Maciej Derulski"},"license":"MIT","scripts":{"build":"babel src -d . --ignore **/__tests__,**/__mocks__,**/sandbox,**/sand.js","prepare":"cross-env NODE_ENV=production npm run build","watch":"onchange -v src/** -- copyfiles {{file}} ../my-medusa-store","test":"jest"},"dependencies":{"binpackingjs":"2.3.3","body-parser":"^1.19.0","express":"^4.17.1","express-rate-limit":"^6.4.0","medusa-core-utils":"^1.1.30","shippo":"git+https://github.com/macder/shippo-node-client.git#medusa-fulfillment-shippo"},"peerDependencies":{"medusa-interfaces":"1.x"},"repository":{"type":"git","url":"git+https://github.com/macder/medusa-fulfillment-shippo.git"},"keywords":["medusa","medusa-plugin","medusa-fulfillment","medusa-shippo"],"devDependencies":{"@babel/cli":"^7.7.5","@babel/core":"^7.7.5","@babel/eslint-parser":"^7.15.8","@babel/node":"^7.7.4","@babel/plugin-proposal-class-properties":"^7.7.4","@babel/plugin-transform-classes":"^7.9.5","@babel/plugin-transform-instanceof":"^7.8.3","@babel/plugin-transform-runtime":"^7.7.6","@babel/preset-env":"^7.7.5","@babel/register":"^7.7.4","@babel/runtime":"^7.9.6","@faker-js/faker":"^7.3.0","client-sessions":"^0.8.0","copyfiles":"^2.4.1","cross-env":"^5.2.1","eslint":"^8.20.0","eslint-config-airbnb-base":"^15.0.0","eslint-config-prettier":"^8.3.0","eslint-plugin-import":"^2.26.0","eslint-plugin-prettier":"^4.0.0","jest":"^28.1.2","jest-extended":"2.0.0","medusa-test-utils":"^1.1.37","onchange":"^7.1.0"},"gitHead":"d0595111b610b26c612e77a715251b798f759ceb","bugs":{"url":"https://github.com/macder/medusa-fulfillment-shippo/issues"},"homepage":"https://github.com/macder/medusa-fulfillment-shippo#readme","_id":"medusa-fulfillment-shippo@0.23.0","_nodeVersion":"16.15.1","_npmVersion":"8.11.0","dist":{"integrity":"sha512-mbZR1RDa3IaEaN99AcLMmTzUl00j7Uw8ir9E0Lf5tJxUefzZmG81bhQ7Y++gvmauD6sBnH9cqBAH4FmTkUsq4w==","shasum":"5ce499011be063d73e2feceee68fb1142df44745","tarball":"https://registry.npmjs.org/medusa-fulfillment-shippo/-/medusa-fulfillment-shippo-0.23.0.tgz","fileCount":26,"unpackedSize":480939,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCTPZvPA8/J0/G55gEcEZZTaUX+2krzniohsTQzVrYPzwIgG+spIZ1Kl4c50/reQ04SQXVRDbUdvaYkl4gRz47a9LE="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJi3eoDACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmrXFg/7BZMOwekHco4SPAIGlpyPmwRd0blOIy8UBHCMt2hB9nBWmygz\r\neYMwx+UHnnxsSFkCaWxXxkBZx0m/t8BkM4kGnus5KWDBLt/ndWnCAqBSM92W\r\n2PqetxEvOk5X96vl9BI1mJ4ylOJNfnyRKLZhdZqglnBPm9V/ika1a20WsErQ\r\nquG7tLhPPCUZsQt32oLxYCuYERnZmVe3astxWvqF1Z7/mcq/yoSvbOOl6VXQ\r\ntMGKMO2jp9FRpw99GR9WgLEkjO4XhV0ln3fQyDb+3MYlxH7Sxvvg42DMeyZI\r\nD5Ziq/RY/OR2Vj7OF2c2PJ8uBIrm5nYiSDx+zZpFhFSlNQgF44cPZBV1aNIl\r\n02GG5xt3Mhqnsp37X3JNbs+5q4SmRcbq5jxgLOtyGbKAmx0aoACnwLCFOZau\r\n4989IDryylvIy9b7XOfITsSWKYA6qKBgudGDGBTjM+nUkVlTntHqyRedAeNJ\r\nIHEhn+/IzuhdwwoqGdSiVju1aj2A1tzDt9lYbH37epIB96ib4P/PNuMWNd9W\r\nnJ0fsD0HTS3o672iuu6bzrLSpx4BdIC9ySaJk8U0cPh4lLRpAzo9ogUkinvn\r\nN4mUChhykI1K7NO+auWEhbMdFqM1Kv7hhwmSOkvUU8C60/YO3TMO//K+gKlR\r\nH5mziPFdhLagPcNBiDKJfLoxiwiSkWUiENE=\r\n=cMN9\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"macder","email":"maciej@derulski.com"},"directories":{},"maintainers":[{"name":"macder","email":"maciej@derulski.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/medusa-fulfillment-shippo_0.23.0_1658710531680_0.9459736591687209"},"_hasShrinkwrap":false},"0.24.0":{"name":"medusa-fulfillment-shippo","version":"0.24.0","description":"Shippo fulfillment provider for medusa","author":{"name":"Maciej Derulski"},"license":"MIT","scripts":{"build":"babel src -d . --ignore **/__tests__,**/__mocks__,**/sandbox,**/sand.js","prepare":"cross-env NODE_ENV=production npm run build","watch":"onchange -v src/** -- copyfiles {{file}} ../my-medusa-store","test":"jest"},"dependencies":{"binpackingjs":"2.3.3","body-parser":"^1.19.0","express":"^4.17.1","express-rate-limit":"^6.4.0","medusa-core-utils":"^1.1.30","shippo":"git+https://github.com/macder/shippo-node-client.git#medusa-fulfillment-shippo"},"peerDependencies":{"medusa-interfaces":"1.x"},"repository":{"type":"git","url":"git+https://github.com/macder/medusa-fulfillment-shippo.git"},"keywords":["medusa","medusa-plugin","medusa-fulfillment","medusa-shippo"],"devDependencies":{"@babel/cli":"^7.7.5","@babel/core":"^7.7.5","@babel/eslint-parser":"^7.15.8","@babel/node":"^7.7.4","@babel/plugin-proposal-class-properties":"^7.7.4","@babel/plugin-transform-classes":"^7.9.5","@babel/plugin-transform-instanceof":"^7.8.3","@babel/plugin-transform-runtime":"^7.7.6","@babel/preset-env":"^7.7.5","@babel/register":"^7.7.4","@babel/runtime":"^7.9.6","@faker-js/faker":"^7.3.0","client-sessions":"^0.8.0","copyfiles":"^2.4.1","cross-env":"^5.2.1","eslint":"^8.20.0","eslint-config-airbnb-base":"^15.0.0","eslint-config-prettier":"^8.3.0","eslint-plugin-import":"^2.26.0","eslint-plugin-prettier":"^4.0.0","jest":"^28.1.2","jest-extended":"2.0.0","medusa-test-utils":"^1.1.37","onchange":"^7.1.0"},"gitHead":"03274fe037bfc2ef1677ad5a523f0d9cfb6c0c19","bugs":{"url":"https://github.com/macder/medusa-fulfillment-shippo/issues"},"homepage":"https://github.com/macder/medusa-fulfillment-shippo#readme","_id":"medusa-fulfillment-shippo@0.24.0","_nodeVersion":"16.15.1","_npmVersion":"8.11.0","dist":{"integrity":"sha512-G44jri6xgM8AVyZjYxivlvrtHhk/ui9FY8UCH+4N8d6YyFEBbf/klgZv9Z2eBQspEp4uOkgmBOI8CEnosT4M6w==","shasum":"106bc286a42c8144fe100f2b98e09551666287c4","tarball":"https://registry.npmjs.org/medusa-fulfillment-shippo/-/medusa-fulfillment-shippo-0.24.0.tgz","fileCount":25,"unpackedSize":473176,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFuS9qCCv4KpyzGROoSSzYmiG3dYvnFIgq5cd1HYkYm2AiBHsLmEL0nYA+kifBGgBWyUvaJinVCCnwG3AIg/2LyexQ=="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJi31Z3ACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmrnEQ/+LcSq4Q5TnbW2Rgw8l0o/0GaAxPgYD9Jzg36MwzWRipJyatQh\r\nVdJx8Gf0pihyQveC2rcvi+wslLMNPebZyH/I173usBYHDFLxdWvYcxQ4m3au\r\nf1veq6Ty9NJj784Fj/vlRyiXZGk5kRSb65g8Y0OywBlczSbDBVPPYAWl8ptk\r\nlZcXt9GN3QNpQe5h+NC/f7pa+lAwIb9LdFQlsazDB7on3f/ydm1euLNGvXw1\r\n7mjobdK8n/R90wWnhg3EKK4aCZf/HeolnpXZB3LFxYRWgKb0D2Q8s9rHmfMe\r\noJp7PoZns0rzif0fV8b+fZjo16rvMbjXStvNX07taG5mLFSEWDcKVbOpLRp6\r\nXRd9ZiMHD0vdHNSTOUxs8cOuh37ecGVD9VPJvMr4DClQU7h2hz/HWQe+aR/e\r\n+M4gWbuudSM1P4Td5sHqTcYtCFWWoZ/6LlkNBF8GzszM09Eny0mmOKORMwYZ\r\nGGnygFoeZa+qIplJji4VEYVNC348wtQ0Sl4boEjR7U1RundFV1ne5OzYHEjQ\r\n0UP/OGbM/rhHvYm/8I05PM9ZbsGFTFnqZcpVKAD5CbtqXppyVtSwaoURhsW1\r\nAjdyrh4qEhzXsLTuv5U/mZlixOW7a/rF6Op654cCQaKHV+VuEE2LPmP5XRqs\r\nSqb7b3ssZuCvxvCv3gvZA7O2Kn96PAiZQfI=\r\n=sTvV\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"macder","email":"maciej@derulski.com"},"directories":{},"maintainers":[{"name":"macder","email":"maciej@derulski.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/medusa-fulfillment-shippo_0.24.0_1658803831383_0.44889271184407264"},"_hasShrinkwrap":false},"0.24.1":{"name":"medusa-fulfillment-shippo","version":"0.24.1","description":"Shippo fulfillment provider for medusa","author":{"name":"Maciej Derulski"},"license":"MIT","scripts":{"build":"babel src -d . --ignore **/__tests__,**/__mocks__,**/sandbox,**/sand.js","prepare":"cross-env NODE_ENV=production npm run build","watch":"onchange -v src/** -- copyfiles {{file}} ../my-medusa-store","test":"jest"},"dependencies":{"binpackingjs":"2.3.3","body-parser":"^1.19.0","express":"^4.17.1","express-rate-limit":"^6.4.0","medusa-core-utils":"^1.1.30","shippo":"git+https://github.com/macder/shippo-node-client.git#medusa-fulfillment-shippo"},"peerDependencies":{"medusa-interfaces":"1.x"},"repository":{"type":"git","url":"git+https://github.com/macder/medusa-fulfillment-shippo.git"},"keywords":["medusa","medusa-plugin","medusa-fulfillment","medusa-shippo"],"devDependencies":{"@babel/cli":"^7.7.5","@babel/core":"^7.7.5","@babel/eslint-parser":"^7.15.8","@babel/node":"^7.7.4","@babel/plugin-proposal-class-properties":"^7.7.4","@babel/plugin-transform-classes":"^7.9.5","@babel/plugin-transform-instanceof":"^7.8.3","@babel/plugin-transform-runtime":"^7.7.6","@babel/preset-env":"^7.7.5","@babel/register":"^7.7.4","@babel/runtime":"^7.9.6","@faker-js/faker":"^7.3.0","client-sessions":"^0.8.0","copyfiles":"^2.4.1","cross-env":"^5.2.1","eslint":"^8.20.0","eslint-config-airbnb-base":"^15.0.0","eslint-config-prettier":"^8.3.0","eslint-plugin-import":"^2.26.0","eslint-plugin-prettier":"^4.0.0","jest":"^28.1.2","jest-extended":"2.0.0","medusa-test-utils":"^1.1.37","onchange":"^7.1.0"},"gitHead":"6ed9024a014ead42bfab4fe682903ea7e228f382","bugs":{"url":"https://github.com/macder/medusa-fulfillment-shippo/issues"},"homepage":"https://github.com/macder/medusa-fulfillment-shippo#readme","_id":"medusa-fulfillment-shippo@0.24.1","_nodeVersion":"16.15.1","_npmVersion":"8.11.0","dist":{"integrity":"sha512-LhThgMi4/3Bmrz6NrL/Seoq3j2m8ycf/ysDlVaLtvmynZ70X18ZVlw2o1MdxPOU5BVppmJhUzy4iGZOUmW//NA==","shasum":"7ed3060a630fcd2ace1ab94eca6d8ef04019b1e5","tarball":"https://registry.npmjs.org/medusa-fulfillment-shippo/-/medusa-fulfillment-shippo-0.24.1.tgz","fileCount":25,"unpackedSize":454136,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCID8Aj3BLNtOG30gjJmn0XZ1ihAOlPaO85MUiHUuAmEj4AiEAof8S5DF8dKTAeqbGpVrdOBMjkbOkcYltKeoh+nXRPZc="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJi36utACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmp0/xAAgqsYC8Q0n5iwUawaZGOhQHclU91X0zkFJGak4MXaeWhMmMNa\r\ncZ5EHiqH3jTVMT+lHiz4nq0PmclUuk8Irq1GKJsMh3izV/J4PIoerjHph0GE\r\ncZJDhGFyKACYPXCrys1XKzZ3Xt7k+alPcHpjPlFqMAThJD4qvd1v3cfkFOgS\r\nrQheo0pc0kMT/xvRiwQFz/eBzgDHP9rnkkXxMJMdvDnDAT1sb1kb4WueF6Pj\r\nViZvHyWzJ7GunTOQ08PdAJXCLCHzRL7IlM6vh72xjV9lu84VhaI4chymCeIk\r\nFLiyoPFmzOoKjIWpwYOjDtu2Mk02QfFDYCbt/PcVjqOCQzJwtiTn0niWrhba\r\n6Zpa5/LX8M4bz8eT3oTly1AwliYqami1RQ8UcNbNxP+m7/LyTKKMVRP0/cZ5\r\nKkHr1XXBTFWjvv/qL00xBvu168sdm0TolyXE5CU2ZxJhNbbwOhB8FhVj1ysa\r\nc/8H5gYhZl7H0W2pVJMPi5rCIWPivBeLrMBalPVqLr3JArI4Mf+xboBawwoA\r\nat/bCzr54h57GNrHU5CwQRJh4fQxY84mMyVDzfinBoR19pT5S7dij1Q9epwT\r\nqJi3TCD12cbI18xzOk30KIzejle8maVYBlQCswSJyikc4RyOz54yHra2CaZK\r\nm7g1YChKqEPMv1YWAgwF7z7M/IAFc9krr74=\r\n=BHtl\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"macder","email":"maciej@derulski.com"},"directories":{},"maintainers":[{"name":"macder","email":"maciej@derulski.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/medusa-fulfillment-shippo_0.24.1_1658825645229_0.5786575705876005"},"_hasShrinkwrap":false},"0.25.0":{"name":"medusa-fulfillment-shippo","version":"0.25.0","description":"Shippo fulfillment provider for medusa","author":{"name":"Maciej Derulski"},"license":"MIT","scripts":{"build":"babel src -d . --ignore **/__tests__,**/__mocks__,**/sandbox,**/sand.js","prepare":"cross-env NODE_ENV=production npm run build","watch":"onchange -v src/** -- copyfiles {{file}} ../my-medusa-store","test":"jest"},"dependencies":{"binpackingjs":"2.3.3","body-parser":"^1.19.0","express":"^4.17.1","express-rate-limit":"^6.4.0","medusa-core-utils":"^1.1.30","shippo":"git+https://github.com/macder/shippo-node-client.git#medusa-fulfillment-shippo"},"peerDependencies":{"medusa-interfaces":"1.x"},"repository":{"type":"git","url":"git+https://github.com/macder/medusa-fulfillment-shippo.git"},"keywords":["medusa","medusa-plugin","medusa-fulfillment","medusa-shippo"],"devDependencies":{"@babel/cli":"^7.7.5","@babel/core":"^7.7.5","@babel/eslint-parser":"^7.15.8","@babel/node":"^7.7.4","@babel/plugin-proposal-class-properties":"^7.7.4","@babel/plugin-transform-classes":"^7.9.5","@babel/plugin-transform-instanceof":"^7.8.3","@babel/plugin-transform-runtime":"^7.7.6","@babel/preset-env":"^7.7.5","@babel/register":"^7.7.4","@babel/runtime":"^7.9.6","@faker-js/faker":"^7.3.0","client-sessions":"^0.8.0","copyfiles":"^2.4.1","cross-env":"^5.2.1","eslint":"^8.20.0","eslint-config-airbnb-base":"^15.0.0","eslint-config-prettier":"^8.3.0","eslint-plugin-import":"^2.26.0","eslint-plugin-prettier":"^4.0.0","jest":"^28.1.2","jest-extended":"2.0.0","medusa-test-utils":"^1.1.37","onchange":"^7.1.0"},"gitHead":"65c02249f19846f4323b7bd5a6977a859a168cbd","bugs":{"url":"https://github.com/macder/medusa-fulfillment-shippo/issues"},"homepage":"https://github.com/macder/medusa-fulfillment-shippo#readme","_id":"medusa-fulfillment-shippo@0.25.0","_nodeVersion":"16.15.1","_npmVersion":"8.11.0","dist":{"integrity":"sha512-gsfh5mYS4cDJYXyGxR7iq+0TdQSVjg2mwRSw7AycqSAC+nTg15BZpikc2r84SCGOXWbG06FhFZlLNZx40XfGcw==","shasum":"754984991e1dfac996c0d029d4cf362cbf68722f","tarball":"https://registry.npmjs.org/medusa-fulfillment-shippo/-/medusa-fulfillment-shippo-0.25.0.tgz","fileCount":25,"unpackedSize":459765,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQD8Kdf6iL27XDMgwCnsr5wnxtvznBO68fGo89byAe0UAQIgIWcm+rJ6KwvoZQs3LB3Fi5FftGfi+pBzJq/Z7wjKNkM="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJi4JAWACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmoJEA//Qs4p4f36lJybDYt3yIiQSUI+H6hT/v4WwdPE0x9P7twWM9MU\r\nvbhX4bgaDXehQPxyOTv6SEN6VBLJRrBMl4QSKSM7RRxpOyZdX9s0UrH9ebVW\r\nc+hp3qtyc97NpGu0B2AN5zP+vKCwUpeh5FUU8rav/0rMgJvArzBw+LUtHloq\r\nFeXvs6wR2b8zlWZDdPftZ9PTRbQ0GgXITaPp796ltqJh5GcIicsod17twiyu\r\nmTNMhyzIOYlBeaWHhJTV18RYQYrpzfA71rXgK7Pqr1b3N2Nl+AcWsTw8jbrA\r\nocaMPzbBwgR+PMl2jDSB4H90NSvoicEgeA4ctW18qNpI/110VZtx0PNrmrsy\r\nOxj703WkUGXsYtVvDTWnJhJRlmNdr5OD7YhuDYlQ8S5viFZnihatgoQ2s6vo\r\n9QD+u0bSgs3OhB97Y0NFkSfAYWU8cCC6Rimu097+WpbNZIkiRXOoG2f5aF8+\r\nlEdpPikemVvYlcOJYxCrriC5Q20n9y2ZwpI0Dskmsx0s44R1OeaAPF4QFYH0\r\nLszhSFzmqMOJVFg9XeiMNANTRs1CXek8OM30hYT713NchAMPg4O0YGqbZfjV\r\n0yrRL9lsoZIVrA+sR2uzGppeLwqusBlu5nXYj+m1rfTvycJ5yRgZ9DM+spUL\r\nStIMtaTjIXQaFL5eDYwAeeKfC1OAtB0/3fI=\r\n=vZD1\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"macder","email":"maciej@derulski.com"},"directories":{},"maintainers":[{"name":"macder","email":"maciej@derulski.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/medusa-fulfillment-shippo_0.25.0_1658884118400_0.94651603886025"},"_hasShrinkwrap":false},"0.26.0":{"name":"medusa-fulfillment-shippo","version":"0.26.0","description":"Shippo fulfillment provider for medusa","author":{"name":"Maciej Derulski"},"license":"MIT","scripts":{"build":"babel src -d . --ignore **/__tests__,**/__mocks__,**/sandbox,**/sand.js","prepare":"cross-env NODE_ENV=production npm run build","watch":"onchange -v src/** -- copyfiles {{file}} ../my-medusa-store","test":"jest"},"dependencies":{"binpackingjs":"2.3.3","body-parser":"^1.19.0","express":"^4.17.1","express-rate-limit":"^6.4.0","medusa-core-utils":"^1.1.30","shippo":"git+https://github.com/macder/shippo-node-client.git#medusa-fulfillment-shippo"},"peerDependencies":{"medusa-interfaces":"1.x"},"repository":{"type":"git","url":"git+https://github.com/macder/medusa-fulfillment-shippo.git"},"keywords":["medusa","medusa-plugin","medusa-fulfillment","medusa-shippo"],"devDependencies":{"@babel/cli":"^7.7.5","@babel/core":"^7.7.5","@babel/eslint-parser":"^7.15.8","@babel/node":"^7.7.4","@babel/plugin-proposal-class-properties":"^7.7.4","@babel/plugin-transform-classes":"^7.9.5","@babel/plugin-transform-instanceof":"^7.8.3","@babel/plugin-transform-runtime":"^7.7.6","@babel/preset-env":"^7.7.5","@babel/register":"^7.7.4","@babel/runtime":"^7.9.6","@faker-js/faker":"^7.3.0","client-sessions":"^0.8.0","copyfiles":"^2.4.1","cross-env":"^5.2.1","eslint":"^8.20.0","eslint-config-airbnb-base":"^15.0.0","eslint-config-prettier":"^8.3.0","eslint-plugin-import":"^2.26.0","eslint-plugin-prettier":"^4.0.0","jest":"^28.1.2","jest-extended":"2.0.0","medusa-test-utils":"^1.1.37","onchange":"^7.1.0"},"gitHead":"c7b5691074cd608707c0c877a1f11043202311c6","bugs":{"url":"https://github.com/macder/medusa-fulfillment-shippo/issues"},"homepage":"https://github.com/macder/medusa-fulfillment-shippo#readme","_id":"medusa-fulfillment-shippo@0.26.0","_nodeVersion":"16.15.1","_npmVersion":"8.11.0","dist":{"integrity":"sha512-FyOa3Tgbr3iOfspZAMSMcUECYC5kr88q5ebsLKi0Od9aRb5RmBS+TalidwsFANaYSEOrBkY0ugyiLp9ChUzz1w==","shasum":"30e776b271c30c0c60fedfc94f1cc883ff74c8c7","tarball":"https://registry.npmjs.org/medusa-fulfillment-shippo/-/medusa-fulfillment-shippo-0.26.0.tgz","fileCount":26,"unpackedSize":499271,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGA7OL72aFiD/MTwVBC/dusguUtHqcSvFaGlw0r54d4BAiAiTjx5Nwd5ej9UeYNylz4x0XFPa4bOQCqgp81hmg0eOg=="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJi4ittACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmoGlw//es37QHZoYZ9RZvKblfnkDd9xAzF0WqGdjdmbR3oSPgThHizT\r\nzk4SHmDhUIXWHkKS2UVzcb8f3esE9yBmRA0B9m1r/9DEyLx6usK3vi6Aw+u6\r\n5PlKeNaS2EVGt2TKPO8MkYeDXMXLsDZ7Gu6Uirjo15KxMHwDKUyb/r3VHvUe\r\nGVf9++i1zDCUTSVNJWdEHyt86UvWLmq062+BTrANi7YDC0DsVJUHOmRRyA/U\r\nciCruYJv5K93+nCCWlQb/ZLLUJzaNgE2S2p3ReRrqChf1kE+ISgfX43siBsJ\r\nUoClttnAnriOB9XvkU6hUf8jz19PC9AyO1qra7ioJa7ax4xPO9KPOBuOM14u\r\nQpeuCJBv5+GDTVk4+CtgaJDtsgyan1Duv+UCN/6v3yX/+GR3OEzaNpOuc5hz\r\n4xwr67q9AHqB7VCvwGx9PfFxoKZe1X9RZ/2QZYsAErDTXp1qzxehe4tVwOi5\r\n8GbYQN5A04rHYSllLIzexi2BPP6CqHMPZs65EB8tXkDXWnkRfiXAIYt0SpEJ\r\nd780q0iFh77R6fvsGo6vjzycUapW0XTVvWHy4xRniPWwjaOFR3J097rtEZ3s\r\nXaNpnzhRka08uDRbE/8le5AOLRmdqDTC7GsdYaJgDBua+RO3cZAwjqCubrms\r\nsQjsa0rLAy22C6kMPqMY1BnHi1JUDkhSoRk=\r\n=zvev\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"macder","email":"maciej@derulski.com"},"directories":{},"maintainers":[{"name":"macder","email":"maciej@derulski.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/medusa-fulfillment-shippo_0.26.0_1658989421580_0.624026154425938"},"_hasShrinkwrap":false},"0.26.1":{"name":"medusa-fulfillment-shippo","version":"0.26.1","description":"Shippo fulfillment provider for medusa","author":{"name":"Maciej Derulski"},"license":"MIT","scripts":{"build":"babel src -d . --ignore **/__tests__,**/__mocks__,**/sandbox,**/sand.js","prepare":"cross-env NODE_ENV=production npm run build","watch":"onchange -v src/** -- copyfiles {{file}} ../my-medusa-store","test":"jest"},"dependencies":{"binpackingjs":"2.3.3","body-parser":"^1.19.0","express":"^4.17.1","express-rate-limit":"^6.4.0","medusa-core-utils":"^1.1.30","shippo":"git+https://github.com/macder/shippo-node-client.git#medusa-fulfillment-shippo"},"peerDependencies":{"medusa-interfaces":"1.x"},"repository":{"type":"git","url":"git+https://github.com/macder/medusa-fulfillment-shippo.git"},"keywords":["medusa","medusa-plugin","medusa-fulfillment","medusa-shippo"],"devDependencies":{"@babel/cli":"^7.7.5","@babel/core":"^7.7.5","@babel/eslint-parser":"^7.15.8","@babel/node":"^7.7.4","@babel/plugin-proposal-class-properties":"^7.7.4","@babel/plugin-transform-classes":"^7.9.5","@babel/plugin-transform-instanceof":"^7.8.3","@babel/plugin-transform-runtime":"^7.7.6","@babel/preset-env":"^7.7.5","@babel/register":"^7.7.4","@babel/runtime":"^7.9.6","@faker-js/faker":"^7.3.0","client-sessions":"^0.8.0","copyfiles":"^2.4.1","cross-env":"^5.2.1","eslint":"^8.20.0","eslint-config-airbnb-base":"^15.0.0","eslint-config-prettier":"^8.3.0","eslint-plugin-import":"^2.26.0","eslint-plugin-prettier":"^4.0.0","jest":"^28.1.2","jest-extended":"2.0.0","medusa-test-utils":"^1.1.37","onchange":"^7.1.0"},"gitHead":"59ab43782e0e25d224d326db4bca3397210de016","bugs":{"url":"https://github.com/macder/medusa-fulfillment-shippo/issues"},"homepage":"https://github.com/macder/medusa-fulfillment-shippo#readme","_id":"medusa-fulfillment-shippo@0.26.1","_nodeVersion":"16.15.1","_npmVersion":"8.11.0","dist":{"integrity":"sha512-4ThJmsflT+lwjsQ2j6wrkSQXdclxnVg+yzVfk9ZoLYWqCV8Pqlkwob8Y7iIm9tjQojbHQsPq8meiC4GDGh4XuA==","shasum":"7acc7b9d7b2208c0e1751dbcedd2d86df527b42b","tarball":"https://registry.npmjs.org/medusa-fulfillment-shippo/-/medusa-fulfillment-shippo-0.26.1.tgz","fileCount":26,"unpackedSize":499553,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDQJZXX1qvWpjWCQsShfV4+NhDvqwjYQKLT2Bq0MlQThQIgKtJIzhI7Vuw9MHMdTyN0NO+AfhDAq8HoNhpJTef7C+Y="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJi434iACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmopPQ/+K0R7UndcKqK9jV2PLNCFSGxhnsVZMoLSDQx7RH9nGgKxzBX2\r\n+Vzp3rg739dMPYIR3oLX5pOEb+NTlCmT52WbPWCCK9eEfNwBfHDvFpNcCfrU\r\nLMyxxOD6YsBTJp5ZBFfAJPFGs24kXgYGNIhEI1NOD4DzstRxYWh8NU+hfaCE\r\nAHRsAGaMZHofhZ6CYzHxKIFROrBjXhX+ucnHLphXRGkNVTXuTXHS3rZqTV49\r\nmgqOwx1faztAPK0x4X8nOSNAEbfL8wQbXppyynD6snpsqS/OoPpJl698YNZj\r\nDUvucLYRY4P6c5HbwvTN+M/2/sb4iz4z5ngcMukQ8Hn0Gm5tbVTCg2VjjK4W\r\nm4IvCThxisT+uIgJifgm/LvayWjjhKOKM2AJNLEtm7MMHqNYbHvFvclnTjcn\r\nhOjcEJKyhzi7CNPqYw6YEfmyhdYdf7xPUdInMZLursXYccTpUP1kvUZIaDuu\r\nJFjz+OOtMEZazXfolP/2K4gqGAdOWQoBouAPuQTsi1eeOzN4+Ap2A2J407Tk\r\nTkiy0QGhpnZPF6vKb2CUTGDQSlwAlBO+LLRQ0zjfVzDqNxYQDwnTrNCEor03\r\nHLlq8n52GreEhgYUAMhvVnI9SKoyXlfnBUZnzi1Vok4EkwDnnarK5jrN2/tC\r\nNGjm9KLsVZEVkzHixliLRfXRVs96x4GHlwQ=\r\n=eznw\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"macder","email":"maciej@derulski.com"},"directories":{},"maintainers":[{"name":"macder","email":"maciej@derulski.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/medusa-fulfillment-shippo_0.26.1_1659076130416_0.2562442598314405"},"_hasShrinkwrap":false},"0.27.0":{"name":"medusa-fulfillment-shippo","version":"0.27.0","description":"Shippo fulfillment provider for medusa","author":{"name":"Maciej Derulski"},"license":"MIT","scripts":{"build":"babel src -d . --ignore **/__tests__,**/__mocks__,**/sandbox,**/sand.js","prepare":"cross-env NODE_ENV=production npm run build","watch":"onchange -v src/** -- copyfiles {{file}} ../my-medusa-store","test":"jest"},"dependencies":{"binpackingjs":"2.3.3","body-parser":"^1.19.0","express":"^4.17.1","express-rate-limit":"^6.4.0","medusa-core-utils":"^1.1.30","shippo":"git+https://github.com/macder/shippo-node-client.git#medusa-fulfillment-shippo"},"peerDependencies":{"medusa-interfaces":"1.x"},"repository":{"type":"git","url":"git+https://github.com/macder/medusa-fulfillment-shippo.git"},"keywords":["medusa","medusa-plugin","medusa-fulfillment","medusa-shippo"],"devDependencies":{"@babel/cli":"^7.7.5","@babel/core":"^7.7.5","@babel/eslint-parser":"^7.15.8","@babel/node":"^7.7.4","@babel/plugin-proposal-class-properties":"^7.7.4","@babel/plugin-transform-classes":"^7.9.5","@babel/plugin-transform-instanceof":"^7.8.3","@babel/plugin-transform-runtime":"^7.7.6","@babel/preset-env":"^7.7.5","@babel/register":"^7.7.4","@babel/runtime":"^7.9.6","@faker-js/faker":"^7.3.0","client-sessions":"^0.8.0","copyfiles":"^2.4.1","cross-env":"^5.2.1","eslint":"^8.20.0","eslint-config-airbnb-base":"^15.0.0","eslint-config-prettier":"^8.3.0","eslint-plugin-import":"^2.26.0","eslint-plugin-prettier":"^4.0.0","jest":"^28.1.2","jest-extended":"2.0.0","medusa-test-utils":"^1.1.37","onchange":"^7.1.0"},"gitHead":"5a84434d8f1beefe86347a9eeacb8332c2f7b098","bugs":{"url":"https://github.com/macder/medusa-fulfillment-shippo/issues"},"homepage":"https://github.com/macder/medusa-fulfillment-shippo#readme","_id":"medusa-fulfillment-shippo@0.27.0","_nodeVersion":"16.15.1","_npmVersion":"8.11.0","dist":{"integrity":"sha512-sbZUWLMW3FijuJFAnsWLdl2mH8T91Y9Jx3tdcMDeCGE4hu+lU43DwF4ZnIJ9S5/VAAtNTFVKfF5Op1/kBiLnpg==","shasum":"f590df76c8d2afd5fc1d8cfd9d68c9c98199c9f7","tarball":"https://registry.npmjs.org/medusa-fulfillment-shippo/-/medusa-fulfillment-shippo-0.27.0.tgz","fileCount":26,"unpackedSize":502440,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDOcCp5xE2FhUnl/AqGMBnV72NsIxV7PHhtg3G7xOeCUQIgWmEXkdJNUlrldqi+OKq/r6+MtIWLRRcoY7ANIeQMon8="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJi5g7bACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmqg1w/9GzleOzVVyAWMeXVZhyJS4dahkcMufMZu1vnPO1tIQrRablrP\r\n49l/AKUTVwDuEYVOSr57xw/2ZDw0/4NLQd8Uoes3fJU9a0dKNVBUdJY8ue+1\r\n5w/fDWzSCe8nD/SpsJMBHeOvPLPDgACY3ZekxPvDGOB+pgsc/ig0YcslWBzq\r\nTvxt2VFBaeA9bl04Fn6Fpaqk+MjSMEbqIrg9jIXu/2YFWA9FsSGBCvPGRKGv\r\n73D47gXjHE9JjN2Z08Zpi2qvufee6u9LqSrt+qeePToXuMivPy8GsxkRnfQS\r\nfjUkonMeimbzWa6PyJMohCQhEijAHF1r0MpPRtT031S2Vn7/FkPfv0N4EJzX\r\nNCAH93YMXW+Z9I1wGuut4Q7NUyf0IqLoMWQuwoMMaIEHtAaO3nJ3KiHMyYLj\r\nhcfSq0ACs8bpUqnAnMuMWUau5iltomogPH6aJ+t3BUMln4fmgt6goda95Rqm\r\nyhadegT0e3227yDAoaGOhlMjCTXOm5qZJunFK8UioGsvndiNLFoxbc+6GfmA\r\nJGaO9mSm6tpBPW1FiGiYe+GME106xviSs9VEUwOhmnE2GtFpTDXXNjVm83+k\r\n8oaiR09A4kujfAEisgkl+pKs/dpwVtw2aIs4ckK8wlRmTV8ahDT3oGwwc8l+\r\nPFBspS/dEf+po+xSHZAjg+11bvq9e64GC8M=\r\n=P3Nl\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"macder","email":"maciej@derulski.com"},"directories":{},"maintainers":[{"name":"macder","email":"maciej@derulski.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/medusa-fulfillment-shippo_0.27.0_1659244251383_0.38481323300200176"},"_hasShrinkwrap":false},"1.0.0-alpha.0":{"name":"medusa-fulfillment-shippo","version":"1.0.0-alpha.0","description":"Shippo fulfillment provider for medusa","author":{"name":"Maciej Derulski"},"license":"MIT","scripts":{"build":"babel src -d . --ignore **/__tests__,**/__mocks__,**/sandbox,**/sand.js","prepare":"cross-env NODE_ENV=production npm run build","watch":"onchange -v src/** -- copyfiles {{file}} ../my-medusa-store","test":"jest"},"dependencies":{"binpackingjs":"2.3.3","body-parser":"^1.19.0","express":"^4.17.1","express-rate-limit":"^6.4.0","medusa-core-utils":"^1.1.30","shippo":"git+https://github.com/macder/shippo-node-client.git#medusa-fulfillment-shippo"},"peerDependencies":{"medusa-interfaces":"1.x"},"repository":{"type":"git","url":"git+https://github.com/macder/medusa-fulfillment-shippo.git"},"keywords":["medusa","medusa-plugin","medusa-fulfillment","medusa-shippo"],"devDependencies":{"@babel/cli":"^7.7.5","@babel/core":"^7.7.5","@babel/eslint-parser":"^7.15.8","@babel/node":"^7.7.4","@babel/plugin-proposal-class-properties":"^7.7.4","@babel/plugin-transform-classes":"^7.9.5","@babel/plugin-transform-instanceof":"^7.8.3","@babel/plugin-transform-runtime":"^7.7.6","@babel/preset-env":"^7.7.5","@babel/register":"^7.7.4","@babel/runtime":"^7.9.6","@faker-js/faker":"^7.3.0","client-sessions":"^0.8.0","copyfiles":"^2.4.1","cross-env":"^5.2.1","eslint":"^8.20.0","eslint-config-airbnb-base":"^15.0.0","eslint-config-prettier":"^8.3.0","eslint-plugin-import":"^2.26.0","eslint-plugin-prettier":"^4.0.0","jest":"^28.1.2","jest-extended":"2.0.0","medusa-test-utils":"^1.1.37","onchange":"^7.1.0"},"readme":"# medusa-fulfillment-shippo\n\n[![CircleCI](https://dl.circleci.com/status-badge/img/gh/macder/medusa-fulfillment-shippo/tree/main.svg?style=shield)](https://dl.circleci.com/status-badge/redirect/gh/macder/medusa-fulfillment-shippo/tree/main)\n[![Codacy Badge](https://app.codacy.com/project/badge/Grade/5ca5e600f1574354a8056441f589ca80)](https://www.codacy.com/gh/macder/medusa-fulfillment-shippo/dashboard?utm_source=github.com\\&utm_medium=referral\\&utm_content=macder/medusa-fulfillment-shippo\\&utm_campaign=Badge_Grade)\n[![Codacy Badge](https://app.codacy.com/project/badge/Coverage/5ca5e600f1574354a8056441f589ca80)](https://www.codacy.com/gh/macder/medusa-fulfillment-shippo/dashboard?utm_source=github.com\\&utm_medium=referral\\&utm_content=macder/medusa-fulfillment-shippo\\&utm_campaign=Badge_Coverage)\n\n> :information\\_source: Requires Medusa 1.3.3^\n\nShippo fulfillment provider for Medusa Commerce.\n\nProvides fulfillment options using carrier service levels and user created service groups that can be used to create shipping options for profiles and regions.\n\nRates at checkout optimized with a [first-fit-decreasing (FFD)](https://en.wikipedia.org/wiki/First-fit-decreasing_bin_packing) bin packing algorithm.\n\nFulfillments create orders in shippo.\n\nSupports returns, exchanges, and claims.\n\n[Public interface](#public-interface) for rapid custom integration.\n\n[Eventbus payloading](#events) instead of arbitrary data assumption and storage.\n\n## Table of Contents\n\n*   [Getting Started](#getting-started)\n*   [Orders](#orders)\n*   [Packing Slips](#packing-slips)\n*   [Returns](#returns)\n    *   [Request](#request)\n*   [Swaps](#swaps)\n    *   [Create](#create)\n    *   [Fulfillment](#fulfillment)\n*   [Claims](#claims)\n    *   [Refund](#refund)\n    *   [Replace](#replace)\n    *   [Fulfillment](#fulfillment-1)\n*   [Rates at Checkout](#rates-at-checkout)\n    *   [Shipping Options in Shippo App](#setup-shipping-options-in-shippo-app)\n    *   [Assign Shipping Options to Regions in Medusa](#assign-shipping-options-to-regions-in-medusa)\n    *   [During Checkout](#during-checkout)\n    *   [Set rates for cart](#set-rates-for-cart)\n    *   [Add to Cart](#add-to-carlst)\n    *   [Help, adding a shipping method to cart throws an error](#help-adding-a-shipping-method-to-cart-throws-an-error)\n*   [Webhooks](#webhooks)\n*   [Public Interface](#public-interface)\n    *   [Account](#account)\n    *   [Order](#order)\n    *   [Package](#package)\n    *   [Packingslip](#packingslip)\n    *   [Rates](#rates)\n    *   [Track](#track)\n    *   [Transaction](#transaction)\n    *   [Client](#client)\n*   [Events](#events)\n*   [Shippo Node Client](#shippo-node-client)\n*   [Shipping Rates](#shipping-rates)\n*   [Limitations](#limitations)\n*   [Resources](#resources)\n\n## Getting started\n\nInstall:\n\n`> npm i medusa-fulfillment-shippo`\n\nAdd to medusa-config.js\n\n```javascript\n{\n  resolve: `medusa-fulfillment-shippo`,\n    options: {\n      api_key: SHIPPO_API_KEY,\n      weight_unit_type: 'g', // valid values: g, kg, lb, oz\n      dimension_unit_type: 'cm', // valid values: cm, mm, in\n      webhook_secret: '', // README section on webhooks before using!\n      webhook_test_mode: false\n    },\n}\n```\n\n## Orders\n\nCreating an order fulfillment makes a new order in shippo. An event is emitted with the response data and related internal ids.\n\n[Create a Subscriber](https://docs.medusajs.com/advanced/backend/subscribers/create-subscriber) to access the data.\n\n**Event:**\n`shippo.order_created`\n\n```javascript\n{\n  order_id: \"\",\n  fulfillment_id: \"\",\n  customer_id: \"\",\n  shippo_order: {...}\n}\n```\n\n### Retrieve\n\n```javascript\nawait shippoService.order.fetch(object_id)\n\nawait shippoService.order.fetchBy([\"fulfillment\", ful_id]\n\nawait shippoService.order.with([\"fulfillment\"]).fetch(object_id)\n```\n\n[See references](#order) for all methods\n\n## Packing Slips\n\n### Retrieve\n\n```javascript\nconst { object_id } = order\n\nawait shippoService.packingslip.fetch(object_id)\n\nawait shippoService.packingslip.fetchBy([\"fulfillment\"], ful_id)\n\nawait shippoService.packingslip.with([\"fulfillment\"]).fetch(object_id)\n```\n\n[See references](#packingslip) for all methods\n\n## Returns\n\n### Request\n\nInvoked when [Request a Return](https://docs.medusajs.com/api/admin/order/request-a-return) `return_shipping` has `provider: shippo`\n\nAttempts fetching an existing return label from shippo.\n\n**Event:**\n`shippo.return_requested`\n\n```javascript\n{\n  order: {...}, // return order\n  transaction: {...} // shippo transaction for return label OR null\n}\n```\n\n## Swaps\n\n### Create\n\nInvoked when [Create a Swap](https://docs.medusajs.com/api/admin/order/create-a-swap) `return_shipping` has `provider: shippo`\n\nAttempts fetching an existing return label from shippo.\n\n**Event:**\n`shippo.swap_created`\n\n```javascript\n{\n  order: {...}, // return order\n  transaction: {...} // shippo transaction for return label OR null\n}\n```\n\n### Fulfillment\n\nInvoked when [Create a Swap Fulfillment](https://docs.medusajs.com/api/admin/order/create-a-swap-fulfillment) `shipping_option` has `provider: shippo`\n\nCreates an order in shippo.\n\n**Event:**\n`shippo.replace_order_created`\n\n```javascript\n{\n  order_id: \"\",\n  fulfillment_id: \"\",\n  customer_id: \"\",\n  shippo_order: {...}\n}\n```\n\n## Claims\n\n### Refund\n\nInvoked when [Create a Claim](https://docs.medusajs.com/api/admin/order/create-a-claim) has `type: refund` and `return_shipping` has `provider: shippo`\n\nAttempts fetching an existing return label from shippo.\n\n**Event:**\n`shippo.claim_refund_created`\n\n```javascript\n{\n  order: {...}, // return order\n  transaction: {...} // shippo transaction for return label OR null\n}\n```\n\n### Replace\n\nInvoked when [Create a Claim](https://docs.medusajs.com/api/admin/order/create-a-claim) has `type: replace` and `return_shipping` has `provider: shippo`\n\nAttempts fetching an existing return label from shippo.\n\n**Event:**\n`shippo.claim_replace_created`\n\n```javascript\n{\n  order: {...}, // return order\n  transaction: {...} // shippo transaction for return label OR null\n}\n```\n\n### Fulfillment\n\nInvoked when [Create a Claim Fulfillment](https://docs.medusajs.com/api/admin/order/create-a-claim-fulfillment) `shipping_option` has `provider: shippo`\n\nCreates an order in shippo.\n\n**Event:**\n`shippo.replace_order_created`\n\n```javascript\n{\n  order_id: \"\",\n  fulfillment_id: \"\",\n  customer_id: \"\",\n  shippo_order: {...}\n}\n```\n\n## Rates at Checkout\n\nProvide customers with accurate shipping rates at checkout to reduce over and under charges. This plugin implements a first-fit-decreasing bin packing algorithm to choose an appropriate parcel for the items in a cart. Follow this guide to get setup and then optimize.\n\n### Setup Shipping Options in Shippo App\n\nLets assume shipping from Canada to customers in Canada and USA via “Standard” and “Express” options\n\nThis would require setting up 4 shipping options in Shippo (\\<https://apps.goshippo.com/settings/rates-at-checkout>)\n\n1.  Standard Shipping Canada\n2.  Express Shipping Canada\n3.  Standard Shipping USA\n4.  Express Shiping USA\n\nSet each shipping option to “Live rate” and assign *service(s)* to them\n\nFor example:\n\n*   Express Shipping Canada: *Canada Post XpressPost*\n*   Express Shipping USA: *Canada Post XpressPost USA*\n*   *…*\n\nFor more in-depth details see https://support.goshippo.com/hc/en-us/articles/4403207559963\n\n### Assign Shipping Options to Regions in Medusa\n\nCreate shipping options for regions as usual\n\n[See here for common issue](#help-adding-a-shipping-method-to-cart-throws-an-error)\n\n### Setup parcel templates\n\nCreate package templates in the [Shippo app settings](https://apps.goshippo.com/settings/packages)\n\nTo get most optimal results, it is recommended to create package templates for all your shipping boxes.\n\n### Verify product dimensions and weight\n\nIn your medusa store, make sure products have correct values for length, width, height, weight\n\n### During Checkout\n\n[Retrieve shipping options for cart](https://docs.medusajs.com/api/store/shipping-option/retrieve-shipping-options-for-cart) as usual and any `price_type: calculated` options belonging to `provider: shippo` will have `amount: Number`.\n\n**HTTP:**\n\n```plaintext\nGET /store/shipping-options/:cart_id\n```\n\n**Service:**\n\n```javascript\nconst shippingOptions = await shippingProfileService.fetchCartOptions(cart)\n```\n\nImplementation needs to consider rates only calculate if cart has items and complete shipping address. Otherwise `price_type: calculated` will have `amount: null`\n\nRetrieving only decorates the shipping options with rates for display purposes. They are stateless objects. Each retrieval will re-fetch rates from shippo's api and re-decorate the options.\n\n### Add to Cart\n\n[Add a Shipping Method](https://docs.medusajs.com/api/store/cart/add-a-shipping-method) and if  `shipping_option` has `price_type: calculated` the rate will be saved to the `shipping_method`\n\n**HTTP:**\n\n```plaintext\nPOST /store/carts/:id/shipping-methods\n --data '{\"option_id\":\"example_cart_option_id\"}'\n```\n\n### Raw rates\n\n```javascript\nawait shippoService.rates.for([\"cart\", id]).fetch()\n```\n\n### Help, adding a shipping method to cart throws an error\n\nThis is an issue with medusa-admin. Examine line 85 [`admin/src/domain/settings/regions/new-shipping.tsx`](https://github.com/medusajs/admin/blob/a33ed20214297ffdbd2383f809dddd4870f5dad9/src/domain/settings/regions/new-shipping.tsx#L85)\n\nOptions with `price_type: flat_rate` will not pass through [`fulFillmentProviderService.calculatePrice()`](https://docs.medusajs.com/references/services/classes/FulfillmentProviderService#calculateprice)\n\nmedusa-admin is still early phase software.\n\nWorkaround it, use the REST api directly, or patch the issue for now\n\nPossible interim solution:\n\n```javascript\nprice_type: (options[optionIndex].type === \"LIVE_RATE\") \n    ? \"calculated\" \n    : \"flat_rate\",\n```\n\n## Webhooks\n\n### Caution\n\nIncoming HTTP requests from Shippo to webhook endpoints lack authentication. No secret token, no signature in the request header, no bearer, nothing.\n\nBefore enabling webhooks, understand the risks of an open and insecure HTTP endpoint that consumes data, and how to mitigate this. Please DO NOT use this without SSL/TLS. [Whitelisting shippo IP's](https://groups.google.com/g/shippo-api-announce/c/1A6m6Snvypk) is a good idea. There are also intermediary third party services such as pipedream and hookdeck that can be used to relay requests.\n\nYou will also need to self generate a token and add it as a url query param. Ya I know… but it's better than nothing and it is encrypted over HTTPS\n\nThe flow at the code level is:\n\n1.  Webhook receives POST data\n2.  URL query token is verified\n3.  The request json gets verified by fetching the same object directly from shippo API, following these steps:\n    1.  Request body contains json claiming to be a shippo object. \n    2.  Ok, but lets fetch this object directly from Shippo's API\n    3.  If the fetch resolves to the object requested, then use that data instead of the untrusted input \n    4.  Otherwise throw a HTTP 500 and do nothing\n\n### Setup\n\nIn `.env` add `SHIPPO_WEBHOOK_SECRET=some_secret_string` \n\nAdd to `medusa-config.js`\n\n```javascript\nconst SHIPPO_API_KEY = process.env.SHIPPO_API_KEY\nconst SHIPPO_WEBHOOK_SECRET = process.env.SHIPPO_WEBHOOK_SECRET\n\n{\n  resolve: `medusa-fulfillment-shippo`,\n  options: {\n    api_key: SHIPPO_API_KEY,\n    weight_unit_type: 'g',\n    dimension_unit_type: 'cm',\n    webhook_secret: SHIPPO_WEBHOOK_SECRET,\n    webhook_test_mode: false    \n  },\n},\n```\n\n### Endpoints\n\nHooks need to be setup in [Shippo app settings](https://apps.goshippo.com/settings/api)\n\n**transaction\\_created**: `/hooks/shippo/transaction?token=SHIPPO_WEBHOOK_SECRET`\n\n**transaction\\_updated**: `/hooks/shippo/transaction?token=SHIPPO_WEBHOOK_SECRET`\n\n**track\\_updated**: `/hooks/shippo/track?token=SHIPPO_WEBHOOK_SECRET`\n\nThen send a sample. If everything is good you will see this in console:\n\n```shell\nProcessing shippo.received.transaction_created which has 0 subscribers\nProcessing shippo.rejected.transaction_created which has 0 subscribers\n```\n\nThis is the expected behaviour because the data could not be verified. Since it is a sample, when the plugin tried to verify the transaction by requesting the same object back directly from shippo api, it did not exist. It will NOT use input data beyond making the verification, so it gets rejected.\n\n### Test Mode\n\nTest mode bypasses input authenticity verification, i.e. it will use the untrusted input data instead of requesting the same data back from shippo.\n\nThis allows testing using data that does not exist in shippo.\n\nTo enable, set `webhook_test_mode: true` in `medusa-config.js` plugin options.\n\nRunning in test mode is a security risk, enable only for testing purposes.\n\n### transaction\\_created\n\n`/hooks/shippo/transaction?token=SHIPPO_WEBHOOK_SECRET`\n\nReceives shippo transaction object when label purchased\n\n*   Updates fulfillment to “shipped”\n*   Adds tracking number and link to fulfillment\n\n#### Events\n\n`shippo.transaction_created.shipment`\n\n```javascript\n{\n  order_id: \"\",\n  fulfillment_id: \"\",\n  transaction: {...}\n}\n```\n\n`shippo.transaction_created.return_label`\n\n```javascript\n{\n  order_id: \"\",\n  transaction: {...}\n}\n```\n\n### transaction\\_updated\n\n`/hooks/shippo/transaction?token=SHIPPO_WEBHOOK_SECRET`\n\nReceives shippo transaction object when transaction updated\n\n#### Events\n\n`shippo.transaction_updated.payload`\n\n```javascript\n{\n  order_id: \"\",\n  fulfillment_id: \"\",\n  transaction: {...}\n}\n```\n\n### track\\_updated\n\n`/hooks/shippo/track?token=SHIPPO_WEBHOOK_SECRET`\n\n#### Events\n\n`shippo.track_updated.payload`\n\n```javascript\n{\n  ...track\n}\n```\n\n## Public Interface\n\nReferences the declared public interface for client consumption, the [semver](https://semver.org/) \"Declared Public API\"\n\nAlthough there is nothing stopping you from accessing and using public methods behind the interface, be aware that those implementation details can and will change. The purpose of the interface is semver compliant stability.\n\n> Notice: (semver 0.x.x) - methods labeled `@experimental` have high probability of breaking changes\n\n### Getting Started\n\nDependency inject `shippoService` as you would with any other service\n\nFor guide, see [Using Custom Service](https://docs.medusajs.com/advanced/backend/services/create-service#using-your-custom-service)\n\n> Note:\n>\n> ```plaintext\n> order = shippo_order\n>\n> local_order = medusa_order\n> ```\n\n### Account\n\n`address`\n\n```javascript\nawait shippoService.account.address()\n```\n\n### Order\n\n`fetch(id)`\n\n```javascript\nawait shippoService.order.fetch(object_id)\n```\n\n`with([entity]).fetch(id)`\n\n```javascript\nawait shippoService.order.with([\"fulfillment\"]).fetch(object_id)\n```\n\n`fetchBy([entity, id])`\n\n```javascript\n/* @return {Promise.<object>} */\n\nawait shippoService.order.fetchBy([\"fulfillment\", id])\n```\n\n```javascript\n/* @return {Promise.<object[]>} */\n\nawait shippoService.order.fetchBy([\"local_order\", id])\n\nawait shippoService.order.fetchBy([\"claim\", id])\n\nawait shippoService.order.fetchBy([\"swap\", id])\n```\n\n`is([entity, id], attr).fetch()`\n\n```javascript\nawait shippoService.is([\"order\", id], \"replace\").fetch()\n```\n\n### Package\n\n`for([entity, id]).fetch()`\n\n```javascript\n// use parcel templates defined in shippo account\n\nawait shippoService.package.for([\"line_items\", [...lineItems]]).fetch()\n\nawait shippoService.package.for([\"cart\", id]).fetch()\n\nawait shippoService.package.for([\"local_order\", id]).fetch()\n\nawait shippoService.package.for([\"fulfillment\", id]).fetch()\n```\n\n```javascript\n// use any parcel templates \nconst packages = [\n  {\n    id: \"id123\",\n    name: \"My Package\",\n    length: \"40\",\n    width: \"30\",\n    height: \"30\",\n    weight: \"10000\", // max-weight\n  },\n  {...}\n]\n\nshippoService.package.set(\"boxes\", packages)\n\nawait shippoService.package.for([\"cart\", id]).get()\n...\n```\n\n### Packingslip\n\n`fetch(id)`\n\n```javascript\nconst { object_id } = order\n\nawait shippoService.packingslip.fetch(object_id)\n```\n\n`with([entity]).fetch(id)`\n\n```javascript\nawait shippoService.packingslip.with([\"fulfillment\"]).fetch(object_id)\n```\n\n`fetchBy([entity, id])`\n\n```javascript\n/* @return {Promise.<object>} */\n\nawait shippoService.packingslip.fetchBy([\"fulfillment\", id])\n\n```\n\n```javascript\n/* @return {Promise.<object[]>} */\n\nawait shippoService.packingslip.fetchBy([\"local_order\", id]) \n\nawait shippoService.packingslip.fetchBy([\"claim\", id]) \n\nawait shippoService.packingslip.fetchBy([\"swap\", id]) \n```\n\n### Rates\n\n`for([entity, id]).fetch(id)`\n\n```javascript\nawait shippoService.rates.for([\"cart\", id]).fetch()\n```\n\n### Track\n\n`fetch(carrier_enum, track_num)`\n\n```javascript\nawait shippoService.track.fetch(\"usps\", \"trackingnumber\")\n```\n\n`fetchBy([entity, id])`\n\n```javascript\nawait shippoService.track.fetchBy([\"fulfillment\", id])\n```\n\n### Transaction\n\n`fetch(id, {...args} = null)`\n\n```javascript\nawait shippoService.transaction.fetch(object_id)\n\nawait shippoService.transaction.fetch(object_id, { type: \"extended\" })\n```\n\n`fetchBy([entity, id], {...args} = null)`\n\n```javascript\nawait shippoService.transaction.fetchBy([\"local_order\", id])\n\nawait shippoService.transaction.fetchBy([\"local_order\", id], { type: \"extended\" })\n\nawait shippoService.transaction.fetchBy([\"fulfillment\", id])\n\nawait shippoService.transaction.fetchBy([\"fulfillment\", id], { type: \"extended\" })\n```\n\n`is([entity, id], attr).fetch()`\n\n```javascript\nawait shippoService.is([\"transaction\", id], \"return\").fetch()\n```\n\n### Client\n\n`shippo-node-client` ([forked](#shippo-node-client))\n\n```javascript\nconst client = shippoService.client \n```\n\n### Find\n\n`find(entity).for([entity, id])`\n\n```javascript\n/* @experimental */\n\nawait shippoService.find(\"fulfillment\").for([\"transaction\", id])\n\nawait shippoService.find(\"order\").for([\"transaction\", id])\n```\n\n## Events\n\nList of all events, their triggers, and expected payload for handlers\n\n[Subscribe to events](https://docs.medusajs.com/advanced/backend/subscribers/create-subscriber) to perform additional operations\n\nThese events only emit if the action pertains to `provider: shippo`\n\n### `shippo.order_created`\n\nTriggered when a new [fulfillment](https://docs.medusajs.com/api/admin/order/create-a-fulfillment) creates a shippo order.\n\n#### Payload\n\n```javascript\n{\n  order_id: \"\",\n  fulfillment_id: \"\",\n  customer_id: \"\",\n  shippo_order: {...}\n}\n```\n\n### `shippo.return_requested`\n\nTriggered when a [return is requested](https://docs.medusajs.com/api/admin/order/request-a-return)\n\nIf the return `ShippingMethod` has `provider: shippo` it attempts to find an existing return label in shippo.\n\n#### Payload\n\n```javascript\n{\n  order: {...}, // return order\n  transaction: {...} // shippo transaction for return label OR null\n}\n```\n\n### `shippo.swap_created`\n\nTriggered when a [swap is created](https://docs.medusajs.com/api/admin/order/create-a-swap)\n\nIf return `ShippingMethod` has `provider: shippo` it attempts to find an existing return label in shippo.\n\n#### Payload\n\n```javascript\n{\n  order: {...}, // return order\n  transaction: {...} // shippo transaction for return label OR null\n}\n```\n\n### `shippo.replace_order_created`\n\nTriggered when a [swap](https://docs.medusajs.com/api/admin/order/create-a-swap-fulfillment) or [claim](https://docs.medusajs.com/api/admin/order/create-a-claim-fulfillment) fulfillment is created.\n\nIf the `ShippingMethod` has `provider: shippo` a shippo order is created\n\n#### Payload\n\n```javascript\n{\n  order_id: \"\",\n  fulfillment_id: \"\",\n  customer_id: \"\",\n  shippo_order: {...}\n}\n```\n\n### `shippo.claim_refund_created`\n\nTriggered when a `type: refund` [claim is created](https://docs.medusajs.com/api/admin/order/create-a-claim)\n\nIf return `ShippingMethod` has `provider: shippo`, it attempts to find an existing return label in shippo\n\n#### Payload\n\n```javascript\n{\n  order: {...}, // return order\n  transaction: {...} // shippo transaction for return label OR null\n}\n```\n\n### `shippo.claim_replace_created`\n\nTriggered when a `type: replace` [claim is created](https://docs.medusajs.com/api/admin/order/create-a-claim)\n\nIf return `ShippingMethod` has `provider: shippo`, it attempts to find an existing return label in shippo\n\n#### Payload\n\n```javascript\n{\n  order: {...}, // return order\n  transaction: {...} // shippo transaction for return label OR null\n}\n```\n\n### `shippo.transaction_created.shipment`\n\nTriggered when the `transaction_created` webhook updates a `Fulfillment` status to `shipped`\n\n#### Payload\n\n```javascript\n{\n  order_id: \"\",\n  fulfillment_id: \"\",\n  transaction: {...}\n}\n```\n\n### `shippo.transaction_created.return_label`\n\nTriggered when the `transaction_created` webhook receives a return label transaction\n\n#### Payload\n\n```javascript\n{\n  order_id: \"\",\n  transaction: {...}\n}\n```\n\n### `shippo.transaction_updated.payload`\n\nTriggered when the `transaction_updated` webhook receives an updated transaction\n\n#### Payload\n\n```javascript\n{\n  order_id: \"\",\n  fulfillment_id: \"\",\n  transaction: {...}\n}\n```\n\n### `shippo.track_updated.payload`\n\nTriggered when the `track_updated` webhook receives an updated track\n\n#### Payload\n\n```javascript\n{\n  ...track\n}\n```\n\n## Shippo Node Client\n\nThis plugin is using a forked version of the official shippo-node-client. \n\nThe fork adds support for the following endpoints:\n\n*   live-rates\n*   service-groups\n*   user-parcel-templates\n*   orders/:id/packingslip\n*   ...\n*   Doc is WIP\n\nThe client is exposed on the `useClient` property of `shippoClientService`\n\n```javascript\nconst client = shippoService.client\n\n// Forks additional methods\nawait client.liverates.create({...parms})\nawait client.userparceltemplates.list()\nawait client.userparceltemplates.retrieve(id)\nawait client.servicegroups.list()\nawait client.servicegroups.create({...params})\n...\n```\n\nSee [Shippo API Reference](https://goshippo.com/docs/reference) for methods\n\n[Official client](https://github.com/goshippo/shippo-node-client)\n\n[Forked client](https://github.com/macder/shippo-node-client/tree/medusa)\n\n## Shipping Rates\n\nDimensional weight is a major factor in determining costs. Estimates are frivolous when based on inaccurate parcel volume and weight. This raises a challenging problem in computing which parcel box to use. While this is simple for single items, it becomes increasingly difficult when packing multiple items of various dimensions. It is a classic [bin packing problem](https://en.wikipedia.org/wiki/Bin_packing_problem), [NP-Hard](https://en.wikipedia.org/wiki/NP-hardness) stuff.\n\nThis plugin uses [binpackingjs](https://github.com/olragon/binpackingjs) which provides a [first-fit](https://en.wikipedia.org/wiki/First-fit_bin_packing) algorithm. Additional logic is wrapped around it to get a more optimized [first-fit-decreasing](https://en.wikipedia.org/wiki/First-fit-decreasing_bin_packing) algorithm. In order for this to be effective, parcel templates need to be setup in the Shippo account, and all products in medusa must have values for length, width, height, and weight.\n\n### Accuracy of Rates\n\nShipping rate estimates are calculated by third parties using data you supply. The onus is on the store admin to supply accurate data values about their products and packaging. This plugin does its best to use this data to create optimized requests, within reason and scope, to retrieve rates from Shippo. The intent is to provide a cost-cutting solution, but there is no one-size-fits all.\n\nAssuming accurate data for product dimensions, weight, and package templates in shippo reflect a carefully planned boxing strategy, expect reasonably accurate rates for single item and multi-item fulfillment's that fit in a single parcel. Multi parcel for rates at checkout is currently not supported (future consideration). If items cannot fit into a single box, the default package template set in [Shippo app settings](https://apps.goshippo.com/settings/rates-at-checkout) is used.\n\n## Limitations\n\nNo support for customs declarations. Planned for future release.\n\n## Resources\n\nMedusa Docs\\\nhttps://docs.medusajs.com/\n\nMedusa Shipping Architecture:\\\nhttps://docs.medusajs.com/advanced/backend/shipping/overview\n\nShippo API\\\nhttps://goshippo.com/docs/intro\\\nhttps://goshippo.com/docs/reference\n","readmeFilename":"README.md","gitHead":"049981ac316d2b5671e4dea7227f398b43a66168","bugs":{"url":"https://github.com/macder/medusa-fulfillment-shippo/issues"},"homepage":"https://github.com/macder/medusa-fulfillment-shippo#readme","_id":"medusa-fulfillment-shippo@1.0.0-alpha.0","_nodeVersion":"16.15.1","_npmVersion":"8.11.0","dist":{"integrity":"sha512-Jhf3ZrX06Lr4l+4qj8RjrUEXFD5OdMITITCNPaJC66Atw6szFGahtJZ59JDWPvq9W0u/jK4j8T4CRg0vZEpYqw==","shasum":"e53a9b8b155961fe9327717f45c1b67e8edcbfd9","tarball":"https://registry.npmjs.org/medusa-fulfillment-shippo/-/medusa-fulfillment-shippo-1.0.0-alpha.0.tgz","fileCount":26,"unpackedSize":502534,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDu3gjkZHqeEe4+J4NbV7ILh9v+m/Fq0cmBWr/XOR2qMAIhAJEpBDwu+QnPK5OtXDKvD87sFp5Y7HAGeksmiGnaD9CJ"}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJi5h6BACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmoVmhAAktGifcTI865D0jtrniMSyfAVusMhmuJ00JnPNEnBk34ao6xN\r\nJowv/04bqTPPd71Ge5vOeqlI4iB7tHA0wFGBrOK2jcm1lhyv5QPUYo+XC2LW\r\n1ZDBkQnU7+4FjJFklipwLQxP6wrjFh6HFDRCtDr/xdjT8dv5PSWHycAzVbgU\r\n8Pjna/W/yn60Vyakwe+flAPwLcjIjpELnc1sUZOw+0DIKlwzUWb7hc6DynsR\r\nGLFyMcbeGc+4NfL0jXhIXCTRJw/mTl6lxLzUoRuq0LWwxRWVY9vaXR7ooQKE\r\ndB0ZL57gFy/O8EXiplMcKUT8w2ItxxK8NCwO9hghQHkw/CivzUBk5gx/ij/m\r\nGSJI4bD+awCOxVol8W7h0ORGIulWhqNM0oSKTBBzCq12JBLmzwHNwSRx09SM\r\nRU1Y0YCANr0EZAz2CGDkoD7lH+mqqH0KwTvyhoQJQ2R2UKPAsCKH4TIh4Wd1\r\nHMwYwRilUBYiuvWNCe78Exu/qYk44hiFNJhGjdIf8j1f7HA8yiw6UwwD9WLo\r\nEPyf8bhLWCVBfAWTBxJVFBkTeTgK//tdRbPODY5ebqqSApe1Pha+97c4cAB2\r\nUYdNrcYemmq4J6CxZQh2yxUjRupTiiX58XOGZfONhLsBlOLwXuJ53HxaTuex\r\nA+qTbqc8Cmup/ryxpNRYeslPHJG/DxJUAp4=\r\n=VI1+\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"macder","email":"maciej@derulski.com"},"directories":{},"maintainers":[{"name":"macder","email":"maciej@derulski.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/medusa-fulfillment-shippo_1.0.0-alpha.0_1659248256977_0.5119886406225758"},"_hasShrinkwrap":false},"1.0.0-alpha.1":{"name":"medusa-fulfillment-shippo","version":"1.0.0-alpha.1","description":"Shippo fulfillment provider for medusa","author":{"name":"Maciej Derulski"},"license":"MIT","scripts":{"build":"babel src -d . --ignore **/__tests__,**/__mocks__,**/sandbox,**/sand.js","prepare":"cross-env NODE_ENV=production npm run build","watch":"onchange -v src/** -- copyfiles {{file}} ../my-medusa-store","test":"jest"},"dependencies":{"binpackingjs":"2.3.3","body-parser":"^1.19.0","express":"^4.17.1","express-rate-limit":"^6.4.0","medusa-core-utils":"^1.1.30","shippo":"git+https://github.com/macder/shippo-node-client.git#medusa-fulfillment-shippo"},"peerDependencies":{"medusa-interfaces":"1.x"},"repository":{"type":"git","url":"git+https://github.com/macder/medusa-fulfillment-shippo.git"},"keywords":["medusa","medusa-plugin","medusa-fulfillment","medusa-shippo"],"devDependencies":{"@babel/cli":"^7.7.5","@babel/core":"^7.7.5","@babel/eslint-parser":"^7.15.8","@babel/node":"^7.7.4","@babel/plugin-proposal-class-properties":"^7.7.4","@babel/plugin-transform-classes":"^7.9.5","@babel/plugin-transform-instanceof":"^7.8.3","@babel/plugin-transform-runtime":"^7.7.6","@babel/preset-env":"^7.7.5","@babel/register":"^7.7.4","@babel/runtime":"^7.9.6","@faker-js/faker":"^7.3.0","client-sessions":"^0.8.0","copyfiles":"^2.4.1","cross-env":"^5.2.1","eslint":"^8.20.0","eslint-config-airbnb-base":"^15.0.0","eslint-config-prettier":"^8.3.0","eslint-plugin-import":"^2.26.0","eslint-plugin-prettier":"^4.0.0","jest":"^28.1.2","jest-extended":"2.0.0","medusa-test-utils":"^1.1.37","onchange":"^7.1.0"},"readme":"# medusa-fulfillment-shippo\n\n[![CircleCI](https://dl.circleci.com/status-badge/img/gh/macder/medusa-fulfillment-shippo/tree/main.svg?style=shield)](https://dl.circleci.com/status-badge/redirect/gh/macder/medusa-fulfillment-shippo/tree/main)\n[![Codacy Badge](https://app.codacy.com/project/badge/Grade/5ca5e600f1574354a8056441f589ca80)](https://www.codacy.com/gh/macder/medusa-fulfillment-shippo/dashboard?utm_source=github.com\\&utm_medium=referral\\&utm_content=macder/medusa-fulfillment-shippo\\&utm_campaign=Badge_Grade)\n[![Codacy Badge](https://app.codacy.com/project/badge/Coverage/5ca5e600f1574354a8056441f589ca80)](https://www.codacy.com/gh/macder/medusa-fulfillment-shippo/dashboard?utm_source=github.com\\&utm_medium=referral\\&utm_content=macder/medusa-fulfillment-shippo\\&utm_campaign=Badge_Coverage)\n\n> :information\\_source: Requires Medusa 1.3.3^\n\nShippo fulfillment provider for Medusa Commerce.\n\nProvides fulfillment options using carrier service levels and user created service groups that can be used to create shipping options for profiles and regions.\n\nRates at checkout optimized with a [first-fit-decreasing (FFD)](https://en.wikipedia.org/wiki/First-fit-decreasing_bin_packing) bin packing algorithm.\n\nFulfillments create orders in shippo.\n\nSupports returns, exchanges, and claims.\n\n[Public interface](#public-interface) for rapid custom integration.\n\n[Eventbus payloading](#events) instead of arbitrary data assumption and storage.\n\n## Table of Contents\n\n*   [Getting Started](#getting-started)\n*   [Orders](#orders)\n*   [Packing Slips](#packing-slips)\n*   [Returns](#returns)\n    *   [Request](#request)\n*   [Swaps](#swaps)\n    *   [Create](#create)\n    *   [Fulfillment](#fulfillment)\n*   [Claims](#claims)\n    *   [Refund](#refund)\n    *   [Replace](#replace)\n    *   [Fulfillment](#fulfillment-1)\n*   [Rates at Checkout](#rates-at-checkout)\n    *   [Shipping Options in Shippo App](#setup-shipping-options-in-shippo-app)\n    *   [Assign Shipping Options to Regions in Medusa](#assign-shipping-options-to-regions-in-medusa)\n    *   [During Checkout](#during-checkout)\n    *   [Set rates for cart](#set-rates-for-cart)\n    *   [Add to Cart](#add-to-carlst)\n    *   [Help, adding a shipping method to cart throws an error](#help-adding-a-shipping-method-to-cart-throws-an-error)\n*   [Webhooks](#webhooks)\n*   [Public Interface](#public-interface)\n    *   [Account](#account)\n    *   [Order](#order)\n    *   [Package](#package)\n    *   [Packingslip](#packingslip)\n    *   [Rates](#rates)\n    *   [Track](#track)\n    *   [Transaction](#transaction)\n    *   [Client](#client)\n*   [Events](#events)\n*   [Shippo Node Client](#shippo-node-client)\n*   [Shipping Rates](#shipping-rates)\n*   [Limitations](#limitations)\n*   [Resources](#resources)\n\n## Getting started\n\nInstall:\n\n`> npm i medusa-fulfillment-shippo`\n\nAdd to medusa-config.js\n\n```javascript\n{\n  resolve: `medusa-fulfillment-shippo`,\n    options: {\n      api_key: SHIPPO_API_KEY,\n      weight_unit_type: 'g', // valid values: g, kg, lb, oz\n      dimension_unit_type: 'cm', // valid values: cm, mm, in\n      webhook_secret: '', // README section on webhooks before using!\n      webhook_test_mode: false\n    },\n}\n```\n\n## Orders\n\nCreating an order fulfillment makes a new order in shippo. An event is emitted with the response data and related internal ids.\n\n[Create a Subscriber](https://docs.medusajs.com/advanced/backend/subscribers/create-subscriber) to access the data.\n\n**Event:**\n`shippo.order_created`\n\n```javascript\n{\n  order_id: \"\",\n  fulfillment_id: \"\",\n  customer_id: \"\",\n  shippo_order: {...}\n}\n```\n\n### Retrieve\n\n```javascript\nawait shippoService.order.fetch(object_id)\n\nawait shippoService.order.fetchBy([\"fulfillment\", ful_id]\n\nawait shippoService.order.with([\"fulfillment\"]).fetch(object_id)\n```\n\n[See references](#order) for all methods\n\n## Packing Slips\n\n### Retrieve\n\n```javascript\nconst { object_id } = order\n\nawait shippoService.packingslip.fetch(object_id)\n\nawait shippoService.packingslip.fetchBy([\"fulfillment\"], ful_id)\n\nawait shippoService.packingslip.with([\"fulfillment\"]).fetch(object_id)\n```\n\n[See references](#packingslip) for all methods\n\n## Returns\n\n### Request\n\nInvoked when [Request a Return](https://docs.medusajs.com/api/admin/order/request-a-return) `return_shipping` has `provider: shippo`\n\nAttempts fetching an existing return label from shippo.\n\n**Event:**\n`shippo.return_requested`\n\n```javascript\n{\n  order: {...}, // return order\n  transaction: {...} // shippo transaction for return label OR null\n}\n```\n\n## Swaps\n\n### Create\n\nInvoked when [Create a Swap](https://docs.medusajs.com/api/admin/order/create-a-swap) `return_shipping` has `provider: shippo`\n\nAttempts fetching an existing return label from shippo.\n\n**Event:**\n`shippo.swap_created`\n\n```javascript\n{\n  order: {...}, // return order\n  transaction: {...} // shippo transaction for return label OR null\n}\n```\n\n### Fulfillment\n\nInvoked when [Create a Swap Fulfillment](https://docs.medusajs.com/api/admin/order/create-a-swap-fulfillment) `shipping_option` has `provider: shippo`\n\nCreates an order in shippo.\n\n**Event:**\n`shippo.replace_order_created`\n\n```javascript\n{\n  order_id: \"\",\n  fulfillment_id: \"\",\n  customer_id: \"\",\n  shippo_order: {...}\n}\n```\n\n## Claims\n\n### Refund\n\nInvoked when [Create a Claim](https://docs.medusajs.com/api/admin/order/create-a-claim) has `type: refund` and `return_shipping` has `provider: shippo`\n\nAttempts fetching an existing return label from shippo.\n\n**Event:**\n`shippo.claim_refund_created`\n\n```javascript\n{\n  order: {...}, // return order\n  transaction: {...} // shippo transaction for return label OR null\n}\n```\n\n### Replace\n\nInvoked when [Create a Claim](https://docs.medusajs.com/api/admin/order/create-a-claim) has `type: replace` and `return_shipping` has `provider: shippo`\n\nAttempts fetching an existing return label from shippo.\n\n**Event:**\n`shippo.claim_replace_created`\n\n```javascript\n{\n  order: {...}, // return order\n  transaction: {...} // shippo transaction for return label OR null\n}\n```\n\n### Fulfillment\n\nInvoked when [Create a Claim Fulfillment](https://docs.medusajs.com/api/admin/order/create-a-claim-fulfillment) `shipping_option` has `provider: shippo`\n\nCreates an order in shippo.\n\n**Event:**\n`shippo.replace_order_created`\n\n```javascript\n{\n  order_id: \"\",\n  fulfillment_id: \"\",\n  customer_id: \"\",\n  shippo_order: {...}\n}\n```\n\n## Rates at Checkout\n\nProvide customers with accurate shipping rates at checkout to reduce over and under charges. This plugin implements a first-fit-decreasing bin packing algorithm to choose an appropriate parcel for the items in a cart. Follow this guide to get setup and then optimize.\n\n### Setup Shipping Options in Shippo App\n\nLets assume shipping from Canada to customers in Canada and USA via “Standard” and “Express” options\n\nThis would require setting up 4 shipping options in Shippo (\\<https://apps.goshippo.com/settings/rates-at-checkout>)\n\n1.  Standard Shipping Canada\n2.  Express Shipping Canada\n3.  Standard Shipping USA\n4.  Express Shiping USA\n\nSet each shipping option to “Live rate” and assign *service(s)* to them\n\nFor example:\n\n*   Express Shipping Canada: *Canada Post XpressPost*\n*   Express Shipping USA: *Canada Post XpressPost USA*\n*   *…*\n\nFor more in-depth details see https://support.goshippo.com/hc/en-us/articles/4403207559963\n\n### Assign Shipping Options to Regions in Medusa\n\nCreate shipping options for regions as usual\n\n[See here for common issue](#help-adding-a-shipping-method-to-cart-throws-an-error)\n\n### Setup parcel templates\n\nCreate package templates in the [Shippo app settings](https://apps.goshippo.com/settings/packages)\n\nTo get most optimal results, it is recommended to create package templates for all your shipping boxes.\n\n### Verify product dimensions and weight\n\nIn your medusa store, make sure products have correct values for length, width, height, weight\n\n### During Checkout\n\n[Retrieve shipping options for cart](https://docs.medusajs.com/api/store/shipping-option/retrieve-shipping-options-for-cart) as usual and any `price_type: calculated` options belonging to `provider: shippo` will have `amount: Number`.\n\n**HTTP:**\n\n```plaintext\nGET /store/shipping-options/:cart_id\n```\n\n**Service:**\n\n```javascript\nconst shippingOptions = await shippingProfileService.fetchCartOptions(cart)\n```\n\nImplementation needs to consider rates only calculate if cart has items and complete shipping address. Otherwise `price_type: calculated` will have `amount: null`\n\nRetrieving only decorates the shipping options with rates for display purposes. They are stateless objects. Each retrieval will re-fetch rates from shippo's api and re-decorate the options.\n\n### Add to Cart\n\n[Add a Shipping Method](https://docs.medusajs.com/api/store/cart/add-a-shipping-method) and if  `shipping_option` has `price_type: calculated` the rate will be saved to the `shipping_method`\n\n**HTTP:**\n\n```plaintext\nPOST /store/carts/:id/shipping-methods\n --data '{\"option_id\":\"example_cart_option_id\"}'\n```\n\n### Raw rates\n\n```javascript\nawait shippoService.rates.for([\"cart\", id]).fetch()\n```\n\n### Help, adding a shipping method to cart throws an error\n\nThis is an issue with medusa-admin. Examine line 85 [`admin/src/domain/settings/regions/new-shipping.tsx`](https://github.com/medusajs/admin/blob/a33ed20214297ffdbd2383f809dddd4870f5dad9/src/domain/settings/regions/new-shipping.tsx#L85)\n\nOptions with `price_type: flat_rate` will not pass through [`fulFillmentProviderService.calculatePrice()`](https://docs.medusajs.com/references/services/classes/FulfillmentProviderService#calculateprice)\n\nmedusa-admin is still early phase software.\n\nWorkaround it, use the REST api directly, or patch the issue for now\n\nPossible interim solution:\n\n```javascript\nprice_type: (options[optionIndex].type === \"LIVE_RATE\") \n    ? \"calculated\" \n    : \"flat_rate\",\n```\n\n## Webhooks\n\n### Caution\n\nIncoming HTTP requests from Shippo to webhook endpoints lack authentication. No secret token, no signature in the request header, no bearer, nothing.\n\nBefore enabling webhooks, understand the risks of an open and insecure HTTP endpoint that consumes data, and how to mitigate this. Please DO NOT use this without SSL/TLS. [Whitelisting shippo IP's](https://groups.google.com/g/shippo-api-announce/c/1A6m6Snvypk) is a good idea. There are also intermediary third party services such as pipedream and hookdeck that can be used to relay requests.\n\nYou will also need to self generate a token and add it as a url query param. Ya I know… but it's better than nothing and it is encrypted over HTTPS\n\nThe flow at the code level is:\n\n1.  Webhook receives POST data\n2.  URL query token is verified\n3.  The request json gets verified by fetching the same object directly from shippo API, following these steps:\n    1.  Request body contains json claiming to be a shippo object. \n    2.  Ok, but lets fetch this object directly from Shippo's API\n    3.  If the fetch resolves to the object requested, then use that data instead of the untrusted input \n    4.  Otherwise throw a HTTP 500 and do nothing\n\n### Setup\n\nIn `.env` add `SHIPPO_WEBHOOK_SECRET=some_secret_string` \n\nAdd to `medusa-config.js`\n\n```javascript\nconst SHIPPO_API_KEY = process.env.SHIPPO_API_KEY\nconst SHIPPO_WEBHOOK_SECRET = process.env.SHIPPO_WEBHOOK_SECRET\n\n{\n  resolve: `medusa-fulfillment-shippo`,\n  options: {\n    api_key: SHIPPO_API_KEY,\n    weight_unit_type: 'g',\n    dimension_unit_type: 'cm',\n    webhook_secret: SHIPPO_WEBHOOK_SECRET,\n    webhook_test_mode: false    \n  },\n},\n```\n\n### Endpoints\n\nHooks need to be setup in [Shippo app settings](https://apps.goshippo.com/settings/api)\n\n**transaction\\_created**: `/hooks/shippo/transaction?token=SHIPPO_WEBHOOK_SECRET`\n\n**transaction\\_updated**: `/hooks/shippo/transaction?token=SHIPPO_WEBHOOK_SECRET`\n\n**track\\_updated**: `/hooks/shippo/track?token=SHIPPO_WEBHOOK_SECRET`\n\nThen send a sample. If everything is good you will see this in console:\n\n```shell\nProcessing shippo.received.transaction_created which has 0 subscribers\nProcessing shippo.rejected.transaction_created which has 0 subscribers\n```\n\nThis is the expected behaviour because the data could not be verified. Since it is a sample, when the plugin tried to verify the transaction by requesting the same object back directly from shippo api, it did not exist. It will NOT use input data beyond making the verification, so it gets rejected.\n\n### Test Mode\n\nTest mode bypasses input authenticity verification, i.e. it will use the untrusted input data instead of requesting the same data back from shippo.\n\nThis allows testing using data that does not exist in shippo.\n\nTo enable, set `webhook_test_mode: true` in `medusa-config.js` plugin options.\n\nRunning in test mode is a security risk, enable only for testing purposes.\n\n### transaction\\_created\n\n`/hooks/shippo/transaction?token=SHIPPO_WEBHOOK_SECRET`\n\nReceives shippo transaction object when label purchased\n\n*   Updates fulfillment to “shipped”\n*   Adds tracking number and link to fulfillment\n\n#### Events\n\n`shippo.transaction_created.shipment`\n\n```javascript\n{\n  order_id: \"\",\n  fulfillment_id: \"\",\n  transaction: {...}\n}\n```\n\n`shippo.transaction_created.return_label`\n\n```javascript\n{\n  order_id: \"\",\n  transaction: {...}\n}\n```\n\n### transaction\\_updated\n\n`/hooks/shippo/transaction?token=SHIPPO_WEBHOOK_SECRET`\n\nReceives shippo transaction object when transaction updated\n\n#### Events\n\n`shippo.transaction_updated.payload`\n\n```javascript\n{\n  order_id: \"\",\n  fulfillment_id: \"\",\n  transaction: {...}\n}\n```\n\n### track\\_updated\n\n`/hooks/shippo/track?token=SHIPPO_WEBHOOK_SECRET`\n\n#### Events\n\n`shippo.track_updated.payload`\n\n```javascript\n{\n  ...track\n}\n```\n\n## Public Interface\n\nReferences the declared public interface for client consumption, the [semver](https://semver.org/) \"Declared Public API\"\n\nAlthough there is nothing stopping you from accessing and using public methods behind the interface, be aware that those implementation details can and will change. The purpose of the interface is semver compliant stability.\n\n> Notice: (semver 0.x.x) - methods labeled `@experimental` have high probability of breaking changes\n\n### Getting Started\n\nDependency inject `shippoService` as you would with any other service\n\nFor guide, see [Using Custom Service](https://docs.medusajs.com/advanced/backend/services/create-service#using-your-custom-service)\n\n> Note:\n>\n> ```plaintext\n> order = shippo_order\n>\n> local_order = medusa_order\n> ```\n\n### Account\n\n`address`\n\n```javascript\nawait shippoService.account.address()\n```\n\n### Order\n\n`fetch(id)`\n\n```javascript\nawait shippoService.order.fetch(object_id)\n```\n\n`with([entity]).fetch(id)`\n\n```javascript\nawait shippoService.order.with([\"fulfillment\"]).fetch(object_id)\n```\n\n`fetchBy([entity, id])`\n\n```javascript\n/* @return {Promise.<object>} */\n\nawait shippoService.order.fetchBy([\"fulfillment\", id])\n```\n\n```javascript\n/* @return {Promise.<object[]>} */\n\nawait shippoService.order.fetchBy([\"local_order\", id])\n\nawait shippoService.order.fetchBy([\"claim\", id])\n\nawait shippoService.order.fetchBy([\"swap\", id])\n```\n\n`is([entity, id], attr).fetch()`\n\n```javascript\nawait shippoService.is([\"order\", id], \"replace\").fetch()\n```\n\n### Package\n\n`for([entity, id]).fetch()`\n\n```javascript\n// use parcel templates defined in shippo account\n\nawait shippoService.package.for([\"line_items\", [...lineItems]]).fetch()\n\nawait shippoService.package.for([\"cart\", id]).fetch()\n\nawait shippoService.package.for([\"local_order\", id]).fetch()\n\nawait shippoService.package.for([\"fulfillment\", id]).fetch()\n```\n\n```javascript\n// use any parcel templates \nconst packages = [\n  {\n    id: \"id123\",\n    name: \"My Package\",\n    length: \"40\",\n    width: \"30\",\n    height: \"30\",\n    weight: \"10000\", // max-weight\n  },\n  {...}\n]\n\nshippoService.package.set(\"boxes\", packages)\n\nawait shippoService.package.for([\"cart\", id]).get()\n...\n```\n\n### Packingslip\n\n`fetch(id)`\n\n```javascript\nconst { object_id } = order\n\nawait shippoService.packingslip.fetch(object_id)\n```\n\n`with([entity]).fetch(id)`\n\n```javascript\nawait shippoService.packingslip.with([\"fulfillment\"]).fetch(object_id)\n```\n\n`fetchBy([entity, id])`\n\n```javascript\n/* @return {Promise.<object>} */\n\nawait shippoService.packingslip.fetchBy([\"fulfillment\", id])\n\n```\n\n```javascript\n/* @return {Promise.<object[]>} */\n\nawait shippoService.packingslip.fetchBy([\"local_order\", id]) \n\nawait shippoService.packingslip.fetchBy([\"claim\", id]) \n\nawait shippoService.packingslip.fetchBy([\"swap\", id]) \n```\n\n### Rates\n\n`for([entity, id]).fetch(id)`\n\n```javascript\nawait shippoService.rates.for([\"cart\", id]).fetch()\n```\n\n### Track\n\n`fetch(carrier_enum, track_num)`\n\n```javascript\nawait shippoService.track.fetch(\"usps\", \"trackingnumber\")\n```\n\n`fetchBy([entity, id])`\n\n```javascript\nawait shippoService.track.fetchBy([\"fulfillment\", id])\n```\n\n### Transaction\n\n`fetch(id, {...args} = null)`\n\n```javascript\nawait shippoService.transaction.fetch(object_id)\n\nawait shippoService.transaction.fetch(object_id, { type: \"extended\" })\n```\n\n`fetchBy([entity, id], {...args} = null)`\n\n```javascript\nawait shippoService.transaction.fetchBy([\"local_order\", id])\n\nawait shippoService.transaction.fetchBy([\"local_order\", id], { type: \"extended\" })\n\nawait shippoService.transaction.fetchBy([\"fulfillment\", id])\n\nawait shippoService.transaction.fetchBy([\"fulfillment\", id], { type: \"extended\" })\n```\n\n`is([entity, id], attr).fetch()`\n\n```javascript\nawait shippoService.is([\"transaction\", id], \"return\").fetch()\n```\n\n### Client\n\n`shippo-node-client` ([forked](#shippo-node-client))\n\n```javascript\nconst client = shippoService.client \n```\n\n### Find\n\n`find(entity).for([entity, id])`\n\n```javascript\n/* @experimental */\n\nawait shippoService.find(\"fulfillment\").for([\"transaction\", id])\n\nawait shippoService.find(\"order\").for([\"transaction\", id])\n```\n\n## Events\n\nList of all events, their triggers, and expected payload for handlers\n\n[Subscribe to events](https://docs.medusajs.com/advanced/backend/subscribers/create-subscriber) to perform additional operations\n\nThese events only emit if the action pertains to `provider: shippo`\n\n### `shippo.order_created`\n\nTriggered when a new [fulfillment](https://docs.medusajs.com/api/admin/order/create-a-fulfillment) creates a shippo order.\n\n#### Payload\n\n```javascript\n{\n  order_id: \"\",\n  fulfillment_id: \"\",\n  customer_id: \"\",\n  shippo_order: {...}\n}\n```\n\n### `shippo.return_requested`\n\nTriggered when a [return is requested](https://docs.medusajs.com/api/admin/order/request-a-return)\n\nIf the return `ShippingMethod` has `provider: shippo` it attempts to find an existing return label in shippo.\n\n#### Payload\n\n```javascript\n{\n  order: {...}, // return order\n  transaction: {...} // shippo transaction for return label OR null\n}\n```\n\n### `shippo.swap_created`\n\nTriggered when a [swap is created](https://docs.medusajs.com/api/admin/order/create-a-swap)\n\nIf return `ShippingMethod` has `provider: shippo` it attempts to find an existing return label in shippo.\n\n#### Payload\n\n```javascript\n{\n  order: {...}, // return order\n  transaction: {...} // shippo transaction for return label OR null\n}\n```\n\n### `shippo.replace_order_created`\n\nTriggered when a [swap](https://docs.medusajs.com/api/admin/order/create-a-swap-fulfillment) or [claim](https://docs.medusajs.com/api/admin/order/create-a-claim-fulfillment) fulfillment is created.\n\nIf the `ShippingMethod` has `provider: shippo` a shippo order is created\n\n#### Payload\n\n```javascript\n{\n  order_id: \"\",\n  fulfillment_id: \"\",\n  customer_id: \"\",\n  shippo_order: {...}\n}\n```\n\n### `shippo.claim_refund_created`\n\nTriggered when a `type: refund` [claim is created](https://docs.medusajs.com/api/admin/order/create-a-claim)\n\nIf return `ShippingMethod` has `provider: shippo`, it attempts to find an existing return label in shippo\n\n#### Payload\n\n```javascript\n{\n  order: {...}, // return order\n  transaction: {...} // shippo transaction for return label OR null\n}\n```\n\n### `shippo.claim_replace_created`\n\nTriggered when a `type: replace` [claim is created](https://docs.medusajs.com/api/admin/order/create-a-claim)\n\nIf return `ShippingMethod` has `provider: shippo`, it attempts to find an existing return label in shippo\n\n#### Payload\n\n```javascript\n{\n  order: {...}, // return order\n  transaction: {...} // shippo transaction for return label OR null\n}\n```\n\n### `shippo.transaction_created.shipment`\n\nTriggered when the `transaction_created` webhook updates a `Fulfillment` status to `shipped`\n\n#### Payload\n\n```javascript\n{\n  order_id: \"\",\n  fulfillment_id: \"\",\n  transaction: {...}\n}\n```\n\n### `shippo.transaction_created.return_label`\n\nTriggered when the `transaction_created` webhook receives a return label transaction\n\n#### Payload\n\n```javascript\n{\n  order_id: \"\",\n  transaction: {...}\n}\n```\n\n### `shippo.transaction_updated.payload`\n\nTriggered when the `transaction_updated` webhook receives an updated transaction\n\n#### Payload\n\n```javascript\n{\n  order_id: \"\",\n  fulfillment_id: \"\",\n  transaction: {...}\n}\n```\n\n### `shippo.track_updated.payload`\n\nTriggered when the `track_updated` webhook receives an updated track\n\n#### Payload\n\n```javascript\n{\n  ...track\n}\n```\n\n## Shippo Node Client\n\nThis plugin is using a forked version of the official shippo-node-client. \n\nThe fork adds support for the following endpoints:\n\n*   live-rates\n*   service-groups\n*   user-parcel-templates\n*   orders/:id/packingslip\n*   ...\n*   Doc is WIP\n\nThe client is exposed on the `useClient` property of `shippoClientService`\n\n```javascript\nconst client = shippoService.client\n\n// Forks additional methods\nawait client.liverates.create({...parms})\nawait client.userparceltemplates.list()\nawait client.userparceltemplates.retrieve(id)\nawait client.servicegroups.list()\nawait client.servicegroups.create({...params})\n...\n```\n\nSee [Shippo API Reference](https://goshippo.com/docs/reference) for methods\n\n[Official client](https://github.com/goshippo/shippo-node-client)\n\n[Forked client](https://github.com/macder/shippo-node-client/tree/medusa)\n\n## Shipping Rates\n\nDimensional weight is a major factor in determining costs. Estimates are frivolous when based on inaccurate parcel volume and weight. This raises a challenging problem in computing which parcel box to use. While this is simple for single items, it becomes increasingly difficult when packing multiple items of various dimensions. It is a classic [bin packing problem](https://en.wikipedia.org/wiki/Bin_packing_problem), [NP-Hard](https://en.wikipedia.org/wiki/NP-hardness) stuff.\n\nThis plugin uses [binpackingjs](https://github.com/olragon/binpackingjs) which provides a [first-fit](https://en.wikipedia.org/wiki/First-fit_bin_packing) algorithm. Additional logic is wrapped around it to get a more optimized [first-fit-decreasing](https://en.wikipedia.org/wiki/First-fit-decreasing_bin_packing) algorithm. In order for this to be effective, parcel templates need to be setup in the Shippo account, and all products in medusa must have values for length, width, height, and weight.\n\n### Accuracy of Rates\n\nShipping rate estimates are calculated by third parties using data you supply. The onus is on the store admin to supply accurate data values about their products and packaging. This plugin does its best to use this data to create optimized requests, within reason and scope, to retrieve rates from Shippo. The intent is to provide a cost-cutting solution, but there is no one-size-fits all.\n\nAssuming accurate data for product dimensions, weight, and package templates in shippo reflect a carefully planned boxing strategy, expect reasonably accurate rates for single item and multi-item fulfillment's that fit in a single parcel. Multi parcel for rates at checkout is currently not supported (future consideration). If items cannot fit into a single box, the default package template set in [Shippo app settings](https://apps.goshippo.com/settings/rates-at-checkout) is used.\n\n## Limitations\n\nNo support for customs declarations. Planned for future release.\n\n## Resources\n\nMedusa Docs\\\nhttps://docs.medusajs.com/\n\nMedusa Shipping Architecture:\\\nhttps://docs.medusajs.com/advanced/backend/shipping/overview\n\nShippo API\\\nhttps://goshippo.com/docs/intro\\\nhttps://goshippo.com/docs/reference\n","readmeFilename":"README.md","gitHead":"3a9708dcbe89c0ca58beb9be6ad127f88b93253e","bugs":{"url":"https://github.com/macder/medusa-fulfillment-shippo/issues"},"homepage":"https://github.com/macder/medusa-fulfillment-shippo#readme","_id":"medusa-fulfillment-shippo@1.0.0-alpha.1","_nodeVersion":"16.15.1","_npmVersion":"8.11.0","dist":{"integrity":"sha512-kZ0WnwEgOp0GhjEkqqKsRVvkdhnMm37lhWTp9XnX4+tDIQE3NOz+NicV6sOjOqjGruaCbOE0tpTe9qCeL6zvBQ==","shasum":"7f8c898ab2f0434d9ffa506aa5ab9d2cfa4eb7dd","tarball":"https://registry.npmjs.org/medusa-fulfillment-shippo/-/medusa-fulfillment-shippo-1.0.0-alpha.1.tgz","fileCount":26,"unpackedSize":503815,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCPjSPlvdL9shSIq7Z6JiB+Ts61jrs3SooWYEbtj+ftaAIhAKD+seMa1ffzjs5rZ5Qvts0Ez9/MAJhe7iZe9MmpojiB"}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJi55idACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmqW2RAAo80j/djk3HPhrw2IRZemBn3iBA/MXXVNsf2ERPksl45tH1je\r\n+RCexzi5Mt+2R3Mxpbm9RK0fAVYkHagUcuS8Cv6AKUTTbD/QGHOtYI5y45JO\r\nNBw1iOjv4uUES1eHxMmASi4herAX1mXMlwYXN/IrNeaYS1djYNPhWzeW01JW\r\nPvmeVCFV4VUic06wjsspY31u1eHVX4NDB4ofceJafaN7ult03F8NvEn/x0rd\r\nshFdSo08Xoiw10tP51OMrJQDaX08eb2KS2vg/TAMVTjgVZUAcvnLa7h2gwiy\r\n+CAHnZuv2Jaf74TRaqv5yUiElYtDi2CrzZtw721l/X/5DWJYasW7WsZTsxlF\r\ndx+lBjvPaiL8oIXcLTQzbKPK/ugBgeoLsKmUzvRjVtCPau/CD5NJi/m5Buhb\r\noHRLX+znX5dXsitSocNLXsNLEmi82VwKZH4HSsekCATlaEwN2wAJUUYjoWqy\r\nuGslO62h2UPe78k2jodW43zEEbU8ddNKniR+I0kbaEBHntUopxTbFiCEl73G\r\nR8Motyfcwfzn+cVe40U5m4Lm5FeCMEG7dMmCuRTlanDFIsQ7K1NT4XLEbl+B\r\nT2FhejeQLRHSnqvSJy6ipTpjbRQKH1X7AzsgZC/FpcuN/cpYJ+Iz68xn7za9\r\nDZPyWJqWeEBkze3+Asf6ZsIXsn8a3z4zM5Y=\r\n=vi24\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"macder","email":"maciej@derulski.com"},"directories":{},"maintainers":[{"name":"macder","email":"maciej@derulski.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/medusa-fulfillment-shippo_1.0.0-alpha.1_1659345053296_0.6208158397621879"},"_hasShrinkwrap":false},"1.0.0-alpha.2":{"name":"medusa-fulfillment-shippo","version":"1.0.0-alpha.2","description":"Shippo fulfillment provider for medusa","author":{"name":"Maciej Derulski"},"license":"MIT","scripts":{"build":"babel src -d . --ignore **/__tests__,**/__mocks__,**/sandbox,**/sand.js","prepare":"cross-env NODE_ENV=production npm run build","watch":"onchange -v src/** -- copyfiles {{file}} ../my-medusa-store","test":"jest"},"dependencies":{"binpackingjs":"2.3.3","body-parser":"^1.19.0","express":"^4.17.1","express-rate-limit":"^6.4.0","medusa-core-utils":"^1.1.30","shippo":"git+https://github.com/macder/shippo-node-client.git#medusa-fulfillment-shippo"},"peerDependencies":{"medusa-interfaces":"1.x"},"repository":{"type":"git","url":"git+https://github.com/macder/medusa-fulfillment-shippo.git"},"keywords":["medusa","medusa-plugin","medusa-fulfillment","medusa-shippo"],"devDependencies":{"@babel/cli":"^7.7.5","@babel/core":"^7.7.5","@babel/eslint-parser":"^7.15.8","@babel/node":"^7.7.4","@babel/plugin-proposal-class-properties":"^7.7.4","@babel/plugin-transform-classes":"^7.9.5","@babel/plugin-transform-instanceof":"^7.8.3","@babel/plugin-transform-runtime":"^7.7.6","@babel/preset-env":"^7.7.5","@babel/register":"^7.7.4","@babel/runtime":"^7.9.6","@faker-js/faker":"^7.3.0","client-sessions":"^0.8.0","copyfiles":"^2.4.1","cross-env":"^5.2.1","eslint":"^8.20.0","eslint-config-airbnb-base":"^15.0.0","eslint-config-prettier":"^8.3.0","eslint-plugin-import":"^2.26.0","eslint-plugin-prettier":"^4.0.0","jest":"^28.1.2","jest-extended":"2.0.0","medusa-test-utils":"^1.1.37","onchange":"^7.1.0"},"gitHead":"6e5e81da5e5b6a9b1dd894bf9de180e6f70f16c3","bugs":{"url":"https://github.com/macder/medusa-fulfillment-shippo/issues"},"homepage":"https://github.com/macder/medusa-fulfillment-shippo#readme","_id":"medusa-fulfillment-shippo@1.0.0-alpha.2","_nodeVersion":"16.15.1","_npmVersion":"8.11.0","dist":{"integrity":"sha512-r2/pKVfkffM2cSiUmx56X0LBkx8ofzCoG1ocSq3DY+QD+xlWU+mgo6R3WLmEuETqKd4sztH/QOiyeN6ebg6K5Q==","shasum":"b77f381ca35bb90377164a909d10391d37d0367a","tarball":"https://registry.npmjs.org/medusa-fulfillment-shippo/-/medusa-fulfillment-shippo-1.0.0-alpha.2.tgz","fileCount":48,"unpackedSize":737404,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHY8Cd3N9C6lm43qeOeQdP08VtYfsZz6bmbQZs7vIeL0AiBPOpIr3pHYDEuUT1ezrYQLlNAzQd4HQeNcElpEfis0Gg=="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJi64GOACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmrI3g/+ITFmFUeY/je3Kq8zZIYry8rYdiAf5RREdDv5atU85+LlTENP\r\nC86xM1f+pM3AFqZDmqbUa/7BLwIh18jS8r76AH4iBbkT8nPrgJ8QJbUZczIb\r\n/ACc2GT5GlOig597Z3gOtkJTjRKWdHURc3hCCoAylLBWfBdgQUJ9JnjqAaZS\r\n79zBdpPlBxFHGuXi/E0CcgEkdIJti0YWXHrj7uZItQ3gU8I0ShEyYTBhRAIK\r\nYxJUjUwafMTk278ZH6hndHBmhaU7C1e2VrArD9w3K16vGoWZ9H7pXcpA+gcw\r\nhL9ySMnRREZdpduQDJ2fUYg5K0YzZcHvVzq2PD9KIYbMQKA8hAUwvVnuHiCU\r\nMXX6BgvwlJM1/O2yww28OEK8SEYfM0GU5iERBGJA5hkfpImOEzrPUDztDJkT\r\nhlbXkbSwLVLlbC/9fVhH4L28D4OLZA7rrv8/C5aM0H/+aiA12nLJDqxMy4FP\r\nZjEfZthbt/PeCvMGmhpX2bqd4XWmumG/GuK+QhswkS4rZOgZwxvls1soaBjo\r\nuQnObhS5yOQui3ARhQGBfJ14oAYkMsSrmuPQpmC0xpiDy3z7ahWtIHpo0fyp\r\nukaudwLolL6oRTwxvahDOYatda7wHxqHFmHiSN2S/6CkYuTguYxOb7G85or6\r\ni8y6Zpz5JdKl9B3phsLEY5+KpcWb0MaWVWs=\r\n=IidM\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"macder","email":"maciej@derulski.com"},"directories":{},"maintainers":[{"name":"macder","email":"maciej@derulski.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/medusa-fulfillment-shippo_1.0.0-alpha.2_1659601294668_0.39336702364704834"},"_hasShrinkwrap":false},"0.27.1":{"name":"medusa-fulfillment-shippo","version":"0.27.1","description":"Shippo fulfillment provider for medusa","author":{"name":"Maciej Derulski"},"license":"MIT","scripts":{"build":"babel src -d . --ignore **/__tests__,**/__mocks__,**/sandbox,**/sand.js","prepare":"cross-env NODE_ENV=production npm run build","watch":"onchange -v src/** -- copyfiles {{file}} ../my-medusa-store","test":"jest"},"dependencies":{"binpackingjs":"2.3.3","body-parser":"^1.19.0","express":"^4.17.1","express-rate-limit":"^6.4.0","medusa-core-utils":"^1.1.30","shippo":"git+https://github.com/macder/shippo-node-client.git#medusa-fulfillment-shippo"},"peerDependencies":{"medusa-interfaces":"1.x"},"repository":{"type":"git","url":"git+https://github.com/macder/medusa-fulfillment-shippo.git"},"keywords":["medusa","medusa-plugin","medusa-fulfillment","medusa-shippo"],"devDependencies":{"@babel/cli":"^7.7.5","@babel/core":"^7.7.5","@babel/eslint-parser":"^7.15.8","@babel/node":"^7.7.4","@babel/plugin-proposal-class-properties":"^7.7.4","@babel/plugin-transform-classes":"^7.9.5","@babel/plugin-transform-instanceof":"^7.8.3","@babel/plugin-transform-runtime":"^7.7.6","@babel/preset-env":"^7.7.5","@babel/register":"^7.7.4","@babel/runtime":"^7.9.6","@faker-js/faker":"^7.3.0","client-sessions":"^0.8.0","copyfiles":"^2.4.1","cross-env":"^5.2.1","eslint":"^8.20.0","eslint-config-airbnb-base":"^15.0.0","eslint-config-prettier":"^8.3.0","eslint-plugin-import":"^2.26.0","eslint-plugin-prettier":"^4.0.0","jest":"^28.1.2","jest-extended":"2.0.0","medusa-test-utils":"^1.1.37","onchange":"^7.1.0"},"gitHead":"14b7d6aa3d446de3639f7b90f12fd7b10261b052","bugs":{"url":"https://github.com/macder/medusa-fulfillment-shippo/issues"},"homepage":"https://github.com/macder/medusa-fulfillment-shippo#readme","_id":"medusa-fulfillment-shippo@0.27.1","_nodeVersion":"16.15.1","_npmVersion":"8.11.0","dist":{"integrity":"sha512-pcB65863UZ10Hyv7lZ8D08oa9sRqSVf+1y9XfHDsIHRkU5n881oxml92cSLTLwASVCb3xiD2KV6bSfgg03mjqw==","shasum":"bb369d611d141847097b2ac0af06a256b06c263d","tarball":"https://registry.npmjs.org/medusa-fulfillment-shippo/-/medusa-fulfillment-shippo-0.27.1.tgz","fileCount":48,"unpackedSize":739385,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICluh8E6LSTA49sI5/m9FFE5CW86kdz5PufHuFeOyogVAiEA7gUajhP0gVXckqTkyHboxUMIdyA/dWD7B3INXreyzow="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJi64SHACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmr36A//T55ahpmj/rFkpztOPklL/4MqJrC+6rudD2FIC5uH3gksNgwN\r\nNM9eKXq3FL173/u8WtHWapfEIC3d9THoh1qdgUky9sbD7XzNKBUu6mpWTdfV\r\n91ncKABhC/91wumvtGTHCFy94IUbBj347LFhhlnzxjUpXuHdv1Y16FYWefRq\r\n6qaHQctrvbi7iFaPxqjOI56w6N1D5uZnX5ZODRKgb36CnFXqzKAA0wrCgvcU\r\n8h3wfaSeNRuJR4oy/WLzhyd6ejALDS842HFwC9OAi6Iaz3fjRh+6cIySChRG\r\ntdWaa3ZNAvZDRu+B2qIvWa8jytUSMwY04T9uii7yIFvrH1OqX8nm4vcry5JL\r\n6NkJMdI7trbUPaIrsUXq0tu90W00ycRNbKzx3CN2ZR82C71h0vCM1Unpnto9\r\nHP3xxD5Ke2zRiD2Yj8rEQ88Qpk2LSDDmpjfrGw+vnWjEkDfN4cr31hJhfhFv\r\njcGnxgB81ZgMAdkUKIb2GZsLJnCc7wMsXN6aYdlo+LMsG6PwtZQCpC0+MFLk\r\ni55bM0BajdaZoXx+3+VfZ+Zuq5XJJdjpG0QrJtFXZfxoCYQ8QV6oYTm/tHVt\r\nYN9Lr1g0hTgCrxhX1KzUjSKSnFTbmkTqJbti5iRjxg67Ch9ibMYeRme6WNQ1\r\nqG2saeVqnkAFlGx6mLssMcxjr0lulNYQeEQ=\r\n=xXFF\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"macder","email":"maciej@derulski.com"},"directories":{},"maintainers":[{"name":"macder","email":"maciej@derulski.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/medusa-fulfillment-shippo_0.27.1_1659602055723_0.6288252426764462"},"_hasShrinkwrap":false},"1.0.0-alpha.3":{"name":"medusa-fulfillment-shippo","version":"1.0.0-alpha.3","description":"Shippo fulfillment provider for medusa","author":{"name":"Maciej Derulski"},"license":"MIT","scripts":{"build":"babel src -d . --ignore **/__tests__,**/__mocks__,**/sandbox,**/sand.js,**/old-tests","prepare":"cross-env NODE_ENV=production npm run build","watch":"onchange -v src/** -- copyfiles {{file}} ../my-medusa-store","test":"jest"},"dependencies":{"binpackingjs":"2.3.3","body-parser":"^1.19.0","express":"^4.17.1","express-rate-limit":"^6.4.0","medusa-core-utils":"^1.1.30","shippo":"git+https://github.com/macder/shippo-node-client.git#medusa-fulfillment-shippo"},"peerDependencies":{"medusa-interfaces":"1.x"},"repository":{"type":"git","url":"git+https://github.com/macder/medusa-fulfillment-shippo.git"},"keywords":["medusa","medusa-plugin","medusa-fulfillment","medusa-shippo"],"devDependencies":{"@babel/cli":"^7.7.5","@babel/core":"^7.7.5","@babel/eslint-parser":"^7.15.8","@babel/node":"^7.7.4","@babel/plugin-proposal-class-properties":"^7.7.4","@babel/plugin-transform-classes":"^7.9.5","@babel/plugin-transform-instanceof":"^7.8.3","@babel/plugin-transform-runtime":"^7.7.6","@babel/preset-env":"^7.7.5","@babel/register":"^7.7.4","@babel/runtime":"^7.9.6","@faker-js/faker":"^7.3.0","client-sessions":"^0.8.0","copyfiles":"^2.4.1","cross-env":"^5.2.1","eslint":"^8.20.0","eslint-config-airbnb-base":"^15.0.0","eslint-config-prettier":"^8.3.0","eslint-plugin-import":"^2.26.0","eslint-plugin-prettier":"^4.0.0","jest":"^28.1.2","jest-extended":"2.0.0","medusa-test-utils":"^1.1.37","onchange":"^7.1.0"},"readme":"# medusa-fulfillment-shippo\n\n[![CircleCI](https://dl.circleci.com/status-badge/img/gh/macder/medusa-fulfillment-shippo/tree/main.svg?style=shield)](https://dl.circleci.com/status-badge/redirect/gh/macder/medusa-fulfillment-shippo/tree/main)\n[![Codacy Badge](https://app.codacy.com/project/badge/Grade/5ca5e600f1574354a8056441f589ca80)](https://www.codacy.com/gh/macder/medusa-fulfillment-shippo/dashboard?utm_source=github.com\\&utm_medium=referral\\&utm_content=macder/medusa-fulfillment-shippo\\&utm_campaign=Badge_Grade)\n[![Codacy Badge](https://app.codacy.com/project/badge/Coverage/5ca5e600f1574354a8056441f589ca80)](https://www.codacy.com/gh/macder/medusa-fulfillment-shippo/dashboard?utm_source=github.com\\&utm_medium=referral\\&utm_content=macder/medusa-fulfillment-shippo\\&utm_campaign=Badge_Coverage)\n\n> :information\\_source: Requires Medusa 1.3.3^\n\nShippo fulfillment provider for Medusa Commerce.\n\nProvides fulfillment options using carrier service levels and user created service groups that can be used to create shipping options for profiles and regions.\n\nRates at checkout optimized with a [first-fit-decreasing (FFD)](https://en.wikipedia.org/wiki/First-fit-decreasing_bin_packing) bin packing algorithm.\n\nFulfillments create orders in shippo.\n\nSupports returns, exchanges, and claims.\n\n[Public interface](#public-interface) for rapid custom integration.\n\n[Eventbus payloading](#events) instead of arbitrary data assumption and storage.\n\n## Table of Contents\n\n*   [Getting Started](#getting-started)\n*   [Orders](#orders)\n*   [Packing Slips](#packing-slips)\n*   [Returns](#returns)\n    *   [Request](#request)\n*   [Swaps](#swaps)\n    *   [Create](#create)\n    *   [Fulfillment](#fulfillment)\n*   [Claims](#claims)\n    *   [Refund](#refund)\n    *   [Replace](#replace)\n    *   [Fulfillment](#fulfillment-1)\n*   [Rates at Checkout](#rates-at-checkout)\n    *   [Shipping Options in Shippo App](#setup-shipping-options-in-shippo-app)\n    *   [Assign Shipping Options to Regions in Medusa](#assign-shipping-options-to-regions-in-medusa)\n    *   [During Checkout](#during-checkout)\n    *   [Set rates for cart](#set-rates-for-cart)\n    *   [Add to Cart](#add-to-carlst)\n    *   [Help, adding a shipping method to cart throws an error](#help-adding-a-shipping-method-to-cart-throws-an-error)\n*   [Webhooks](#webhooks)\n*   [Public Interface](#public-interface)\n    *   [Account](#account)\n    *   [Order](#order)\n    *   [Package](#package)\n    *   [Packingslip](#packingslip)\n    *   [Rates](#rates)\n    *   [Track](#track)\n    *   [Transaction](#transaction)\n    *   [Client](#client)\n*   [Events](#events)\n*   [Shippo Node Client](#shippo-node-client)\n*   [Shipping Rates](#shipping-rates)\n*   [Limitations](#limitations)\n*   [Resources](#resources)\n\n## Getting started\n\nInstall:\n\n`> npm i medusa-fulfillment-shippo`\n\nAdd to medusa-config.js\n\n```javascript\n{\n  resolve: `medusa-fulfillment-shippo`,\n    options: {\n      api_key: SHIPPO_API_KEY,\n      weight_unit_type: 'g', // valid values: g, kg, lb, oz\n      dimension_unit_type: 'cm', // valid values: cm, mm, in\n      webhook_secret: '', // README section on webhooks before using!\n      webhook_test_mode: false\n    },\n}\n```\n\n## Orders\n\nCreating an order fulfillment makes a new order in shippo. An event is emitted with the response data and related internal ids.\n\n[Create a Subscriber](https://docs.medusajs.com/advanced/backend/subscribers/create-subscriber) to access the data.\n\n**Event:**\n`shippo.order_created`\n\n```javascript\n{\n  order_id: \"\",\n  fulfillment_id: \"\",\n  customer_id: \"\",\n  shippo_order: {...}\n}\n```\n\n### Retrieve\n\n```javascript\nawait shippoService.order.fetch(object_id)\n\nawait shippoService.order.fetchBy([\"fulfillment\", ful_id]\n\nawait shippoService.order.with([\"fulfillment\"]).fetch(object_id)\n```\n\n[See references](#order) for all methods\n\n## Packing Slips\n\n### Retrieve\n\n```javascript\nconst { object_id } = order\n\nawait shippoService.packingslip.fetch(object_id)\n\nawait shippoService.packingslip.fetchBy([\"fulfillment\"], ful_id)\n\nawait shippoService.packingslip.with([\"fulfillment\"]).fetch(object_id)\n```\n\n[See references](#packingslip) for all methods\n\n## Returns\n\n### Request\n\nInvoked when [Request a Return](https://docs.medusajs.com/api/admin/order/request-a-return) `return_shipping` has `provider: shippo`\n\nAttempts fetching an existing return label from shippo.\n\n**Event:**\n`shippo.return_requested`\n\n```javascript\n{\n  order: {...}, // return order\n  transaction: {...} // shippo transaction for return label OR null\n}\n```\n\n## Swaps\n\n### Create\n\nInvoked when [Create a Swap](https://docs.medusajs.com/api/admin/order/create-a-swap) `return_shipping` has `provider: shippo`\n\nAttempts fetching an existing return label from shippo.\n\n**Event:**\n`shippo.swap_created`\n\n```javascript\n{\n  order: {...}, // return order\n  transaction: {...} // shippo transaction for return label OR null\n}\n```\n\n### Fulfillment\n\nInvoked when [Create a Swap Fulfillment](https://docs.medusajs.com/api/admin/order/create-a-swap-fulfillment) `shipping_option` has `provider: shippo`\n\nCreates an order in shippo.\n\n**Event:**\n`shippo.replace_order_created`\n\n```javascript\n{\n  order_id: \"\",\n  fulfillment_id: \"\",\n  customer_id: \"\",\n  shippo_order: {...}\n}\n```\n\n## Claims\n\n### Refund\n\nInvoked when [Create a Claim](https://docs.medusajs.com/api/admin/order/create-a-claim) has `type: refund` and `return_shipping` has `provider: shippo`\n\nAttempts fetching an existing return label from shippo.\n\n**Event:**\n`shippo.claim_refund_created`\n\n```javascript\n{\n  order: {...}, // return order\n  transaction: {...} // shippo transaction for return label OR null\n}\n```\n\n### Replace\n\nInvoked when [Create a Claim](https://docs.medusajs.com/api/admin/order/create-a-claim) has `type: replace` and `return_shipping` has `provider: shippo`\n\nAttempts fetching an existing return label from shippo.\n\n**Event:**\n`shippo.claim_replace_created`\n\n```javascript\n{\n  order: {...}, // return order\n  transaction: {...} // shippo transaction for return label OR null\n}\n```\n\n### Fulfillment\n\nInvoked when [Create a Claim Fulfillment](https://docs.medusajs.com/api/admin/order/create-a-claim-fulfillment) `shipping_option` has `provider: shippo`\n\nCreates an order in shippo.\n\n**Event:**\n`shippo.replace_order_created`\n\n```javascript\n{\n  order_id: \"\",\n  fulfillment_id: \"\",\n  customer_id: \"\",\n  shippo_order: {...}\n}\n```\n\n## Rates at Checkout\n\nProvide customers with accurate shipping rates at checkout to reduce over and under charges. This plugin implements a first-fit-decreasing bin packing algorithm to choose an appropriate parcel for the items in a cart. Follow this guide to get setup and then optimize.\n\n### Setup Shipping Options in Shippo App\n\nLets assume shipping from Canada to customers in Canada and USA via “Standard” and “Express” options\n\nThis would require setting up 4 shipping options in Shippo (\\<https://apps.goshippo.com/settings/rates-at-checkout>)\n\n1.  Standard Shipping Canada\n2.  Express Shipping Canada\n3.  Standard Shipping USA\n4.  Express Shiping USA\n\nSet each shipping option to “Live rate” and assign *service(s)* to them\n\nFor example:\n\n*   Express Shipping Canada: *Canada Post XpressPost*\n*   Express Shipping USA: *Canada Post XpressPost USA*\n*   *…*\n\nFor more in-depth details see https://support.goshippo.com/hc/en-us/articles/4403207559963\n\n### Assign Shipping Options to Regions in Medusa\n\nCreate shipping options for regions as usual\n\n[See here for common issue](#help-adding-a-shipping-method-to-cart-throws-an-error)\n\n### Setup parcel templates\n\nCreate package templates in the [Shippo app settings](https://apps.goshippo.com/settings/packages)\n\nTo get most optimal results, it is recommended to create package templates for all your shipping boxes.\n\n### Verify product dimensions and weight\n\nIn your medusa store, make sure products have correct values for length, width, height, weight\n\n### During Checkout\n\n[Retrieve shipping options for cart](https://docs.medusajs.com/api/store/shipping-option/retrieve-shipping-options-for-cart) as usual and any `price_type: calculated` options belonging to `provider: shippo` will have `amount: Number`.\n\n**HTTP:**\n\n```plaintext\nGET /store/shipping-options/:cart_id\n```\n\n**Service:**\n\n```javascript\nconst shippingOptions = await shippingProfileService.fetchCartOptions(cart)\n```\n\nImplementation needs to consider rates only calculate if cart has items and complete shipping address. Otherwise `price_type: calculated` will have `amount: null`\n\nRetrieving only decorates the shipping options with rates for display purposes. They are stateless objects. Each retrieval will re-fetch rates from shippo's api and re-decorate the options.\n\n### Add to Cart\n\n[Add a Shipping Method](https://docs.medusajs.com/api/store/cart/add-a-shipping-method) and if  `shipping_option` has `price_type: calculated` the rate will be saved to the `shipping_method`\n\n**HTTP:**\n\n```plaintext\nPOST /store/carts/:id/shipping-methods\n --data '{\"option_id\":\"example_cart_option_id\"}'\n```\n\n### Raw rates\n\n```javascript\nawait shippoService.rates.for([\"cart\", id]).fetch()\n```\n\n### Help, adding a shipping method to cart throws an error\n\nThis is an issue with medusa-admin. Examine line 85 [`admin/src/domain/settings/regions/new-shipping.tsx`](https://github.com/medusajs/admin/blob/a33ed20214297ffdbd2383f809dddd4870f5dad9/src/domain/settings/regions/new-shipping.tsx#L85)\n\nOptions with `price_type: flat_rate` will not pass through [`fulFillmentProviderService.calculatePrice()`](https://docs.medusajs.com/references/services/classes/FulfillmentProviderService#calculateprice)\n\nmedusa-admin is still early phase software.\n\nWorkaround it, use the REST api directly, or patch the issue for now\n\nPossible interim solution:\n\n```javascript\nprice_type: (options[optionIndex].type === \"LIVE_RATE\") \n    ? \"calculated\" \n    : \"flat_rate\",\n```\n\n## Webhooks\n\n### Caution\n\nIncoming HTTP requests from Shippo to webhook endpoints lack authentication. No secret token, no signature in the request header, no bearer, nothing.\n\nBefore enabling webhooks, understand the risks of an open and insecure HTTP endpoint that consumes data, and how to mitigate this. Please DO NOT use this without SSL/TLS. [Whitelisting shippo IP's](https://groups.google.com/g/shippo-api-announce/c/1A6m6Snvypk) is a good idea. There are also intermediary third party services such as pipedream and hookdeck that can be used to relay requests.\n\nYou will also need to self generate a token and add it as a url query param. Ya I know… but it's better than nothing and it is encrypted over HTTPS\n\nThe flow at the code level is:\n\n1.  Webhook receives POST data\n2.  URL query token is verified\n3.  The request json gets verified by fetching the same object directly from shippo API, following these steps:\n    1.  Request body contains json claiming to be a shippo object. \n    2.  Ok, but lets fetch this object directly from Shippo's API\n    3.  If the fetch resolves to the object requested, then use that data instead of the untrusted input \n    4.  Otherwise throw a HTTP 500 and do nothing\n\n### Setup\n\nIn `.env` add `SHIPPO_WEBHOOK_SECRET=some_secret_string` \n\nAdd to `medusa-config.js`\n\n```javascript\nconst SHIPPO_API_KEY = process.env.SHIPPO_API_KEY\nconst SHIPPO_WEBHOOK_SECRET = process.env.SHIPPO_WEBHOOK_SECRET\n\n{\n  resolve: `medusa-fulfillment-shippo`,\n  options: {\n    api_key: SHIPPO_API_KEY,\n    weight_unit_type: 'g',\n    dimension_unit_type: 'cm',\n    webhook_secret: SHIPPO_WEBHOOK_SECRET,\n    webhook_test_mode: false    \n  },\n},\n```\n\n### Endpoints\n\nHooks need to be setup in [Shippo app settings](https://apps.goshippo.com/settings/api)\n\n**transaction\\_created**: `/hooks/shippo/transaction?token=SHIPPO_WEBHOOK_SECRET`\n\n**transaction\\_updated**: `/hooks/shippo/transaction?token=SHIPPO_WEBHOOK_SECRET`\n\n**track\\_updated**: `/hooks/shippo/track?token=SHIPPO_WEBHOOK_SECRET`\n\nThen send a sample. If everything is good you will see this in console:\n\n```shell\nProcessing shippo.received.transaction_created which has 0 subscribers\nProcessing shippo.rejected.transaction_created which has 0 subscribers\n```\n\nThis is the expected behaviour because the data could not be verified. Since it is a sample, when the plugin tried to verify the transaction by requesting the same object back directly from shippo api, it did not exist. It will NOT use input data beyond making the verification, so it gets rejected.\n\n### Test Mode\n\nTest mode bypasses input authenticity verification, i.e. it will use the untrusted input data instead of requesting the same data back from shippo.\n\nThis allows testing using data that does not exist in shippo.\n\nTo enable, set `webhook_test_mode: true` in `medusa-config.js` plugin options.\n\nRunning in test mode is a security risk, enable only for testing purposes.\n\n### transaction\\_created\n\n`/hooks/shippo/transaction?token=SHIPPO_WEBHOOK_SECRET`\n\nReceives shippo transaction object when label purchased\n\n*   Updates fulfillment to “shipped”\n*   Adds tracking number and link to fulfillment\n\n#### Events\n\n`shippo.transaction_created.shipment`\n\n```javascript\n{\n  order_id: \"\",\n  fulfillment_id: \"\",\n  transaction: {...}\n}\n```\n\n`shippo.transaction_created.return_label`\n\n```javascript\n{\n  order_id: \"\",\n  transaction: {...}\n}\n```\n\n### transaction\\_updated\n\n`/hooks/shippo/transaction?token=SHIPPO_WEBHOOK_SECRET`\n\nReceives shippo transaction object when transaction updated\n\n#### Events\n\n`shippo.transaction_updated.payload`\n\n```javascript\n{\n  order_id: \"\",\n  fulfillment_id: \"\",\n  transaction: {...}\n}\n```\n\n### track\\_updated\n\n`/hooks/shippo/track?token=SHIPPO_WEBHOOK_SECRET`\n\n#### Events\n\n`shippo.track_updated.payload`\n\n```javascript\n{\n  ...track\n}\n```\n\n## Public Interface\n\nReferences the declared public interface for client consumption, the [semver](https://semver.org/) \"Declared Public API\"\n\nAlthough there is nothing stopping you from accessing and using public methods behind the interface, be aware that those implementation details can and will change. The purpose of the interface is semver compliant stability.\n\n> Notice: (semver 0.x.x) - methods labeled `@experimental` have high probability of breaking changes\n\n### Getting Started\n\nDependency inject `shippoService` as you would with any other service\n\nFor guide, see [Using Custom Service](https://docs.medusajs.com/advanced/backend/services/create-service#using-your-custom-service)\n\n> Note:\n>\n> ```plaintext\n> order = shippo_order\n>\n> local_order = medusa_order\n> ```\n\n### Account\n\n`address`\n\n```javascript\nawait shippoService.account.address()\n```\n\n### Order\n\n`fetch(id)`\n\n```javascript\nawait shippoService.order.fetch(object_id)\n```\n\n`with([entity]).fetch(id)`\n\n```javascript\nawait shippoService.order.with([\"fulfillment\"]).fetch(object_id)\n```\n\n`fetchBy([entity, id])`\n\n```javascript\n/* @return {Promise.<object>} */\n\nawait shippoService.order.fetchBy([\"fulfillment\", id])\n```\n\n```javascript\n/* @return {Promise.<object[]>} */\n\nawait shippoService.order.fetchBy([\"local_order\", id])\n\nawait shippoService.order.fetchBy([\"claim\", id])\n\nawait shippoService.order.fetchBy([\"swap\", id])\n```\n\n`is([entity, id], attr).fetch()`\n\n```javascript\nawait shippoService.is([\"order\", id], \"replace\").fetch()\n```\n\n### Package\n\n`for([entity, id]).fetch()`\n\n```javascript\n// use parcel templates defined in shippo account\n\nawait shippoService.package.for([\"line_items\", [...lineItems]]).fetch()\n\nawait shippoService.package.for([\"cart\", id]).fetch()\n\nawait shippoService.package.for([\"local_order\", id]).fetch()\n\nawait shippoService.package.for([\"fulfillment\", id]).fetch()\n```\n\n```javascript\n// use any parcel templates \nconst packages = [\n  {\n    id: \"id123\",\n    name: \"My Package\",\n    length: \"40\",\n    width: \"30\",\n    height: \"30\",\n    weight: \"10000\", // max-weight\n  },\n  {...}\n]\n\nshippoService.package.set(\"boxes\", packages)\n\nawait shippoService.package.for([\"cart\", id]).get()\n...\n```\n\n### Packingslip\n\n`fetch(id)`\n\n```javascript\nconst { object_id } = order\n\nawait shippoService.packingslip.fetch(object_id)\n```\n\n`with([entity]).fetch(id)`\n\n```javascript\nawait shippoService.packingslip.with([\"fulfillment\"]).fetch(object_id)\n```\n\n`fetchBy([entity, id])`\n\n```javascript\n/* @return {Promise.<object>} */\n\nawait shippoService.packingslip.fetchBy([\"fulfillment\", id])\n\n```\n\n```javascript\n/* @return {Promise.<object[]>} */\n\nawait shippoService.packingslip.fetchBy([\"local_order\", id]) \n\nawait shippoService.packingslip.fetchBy([\"claim\", id]) \n\nawait shippoService.packingslip.fetchBy([\"swap\", id]) \n```\n\n### Rates\n\n`for([entity, id]).fetch(id)`\n\n```javascript\nawait shippoService.rates.for([\"cart\", id]).fetch()\n```\n\n### Track\n\n`fetch(carrier_enum, track_num)`\n\n```javascript\nawait shippoService.track.fetch(\"usps\", \"trackingnumber\")\n```\n\n`fetchBy([entity, id])`\n\n```javascript\nawait shippoService.track.fetchBy([\"fulfillment\", id])\n```\n\n### Transaction\n\n`fetch(id, {...args} = null)`\n\n```javascript\nawait shippoService.transaction.fetch(object_id)\n\nawait shippoService.transaction.fetch(object_id, { type: \"extended\" })\n```\n\n`fetchBy([entity, id], {...args} = null)`\n\n```javascript\nawait shippoService.transaction.fetchBy([\"local_order\", id])\n\nawait shippoService.transaction.fetchBy([\"local_order\", id], { type: \"extended\" })\n\nawait shippoService.transaction.fetchBy([\"fulfillment\", id])\n\nawait shippoService.transaction.fetchBy([\"fulfillment\", id], { type: \"extended\" })\n```\n\n`is([entity, id], attr).fetch()`\n\n```javascript\nawait shippoService.is([\"transaction\", id], \"return\").fetch()\n```\n\n### Client\n\n`shippo-node-client` ([forked](#shippo-node-client))\n\n```javascript\nconst client = shippoService.client \n```\n\n### Find\n\n`find(entity).for([entity, id])`\n\n```javascript\n/* @experimental */\n\nawait shippoService.find(\"fulfillment\").for([\"transaction\", id])\n\nawait shippoService.find(\"order\").for([\"transaction\", id])\n```\n\n## Events\n\nList of all events, their triggers, and expected payload for handlers\n\n[Subscribe to events](https://docs.medusajs.com/advanced/backend/subscribers/create-subscriber) to perform additional operations\n\nThese events only emit if the action pertains to `provider: shippo`\n\n### `shippo.order_created`\n\nTriggered when a new [fulfillment](https://docs.medusajs.com/api/admin/order/create-a-fulfillment) creates a shippo order.\n\n#### Payload\n\n```javascript\n{\n  order_id: \"\",\n  fulfillment_id: \"\",\n  customer_id: \"\",\n  shippo_order: {...}\n}\n```\n\n### `shippo.return_requested`\n\nTriggered when a [return is requested](https://docs.medusajs.com/api/admin/order/request-a-return)\n\nIf the return `ShippingMethod` has `provider: shippo` it attempts to find an existing return label in shippo.\n\n#### Payload\n\n```javascript\n{\n  order: {...}, // return order\n  transaction: {...} // shippo transaction for return label OR null\n}\n```\n\n### `shippo.swap_created`\n\nTriggered when a [swap is created](https://docs.medusajs.com/api/admin/order/create-a-swap)\n\nIf return `ShippingMethod` has `provider: shippo` it attempts to find an existing return label in shippo.\n\n#### Payload\n\n```javascript\n{\n  order: {...}, // return order\n  transaction: {...} // shippo transaction for return label OR null\n}\n```\n\n### `shippo.replace_order_created`\n\nTriggered when a [swap](https://docs.medusajs.com/api/admin/order/create-a-swap-fulfillment) or [claim](https://docs.medusajs.com/api/admin/order/create-a-claim-fulfillment) fulfillment is created.\n\nIf the `ShippingMethod` has `provider: shippo` a shippo order is created\n\n#### Payload\n\n```javascript\n{\n  order_id: \"\",\n  fulfillment_id: \"\",\n  customer_id: \"\",\n  shippo_order: {...}\n}\n```\n\n### `shippo.claim_refund_created`\n\nTriggered when a `type: refund` [claim is created](https://docs.medusajs.com/api/admin/order/create-a-claim)\n\nIf return `ShippingMethod` has `provider: shippo`, it attempts to find an existing return label in shippo\n\n#### Payload\n\n```javascript\n{\n  order: {...}, // return order\n  transaction: {...} // shippo transaction for return label OR null\n}\n```\n\n### `shippo.claim_replace_created`\n\nTriggered when a `type: replace` [claim is created](https://docs.medusajs.com/api/admin/order/create-a-claim)\n\nIf return `ShippingMethod` has `provider: shippo`, it attempts to find an existing return label in shippo\n\n#### Payload\n\n```javascript\n{\n  order: {...}, // return order\n  transaction: {...} // shippo transaction for return label OR null\n}\n```\n\n### `shippo.transaction_created.shipment`\n\nTriggered when the `transaction_created` webhook updates a `Fulfillment` status to `shipped`\n\n#### Payload\n\n```javascript\n{\n  order_id: \"\",\n  fulfillment_id: \"\",\n  transaction: {...}\n}\n```\n\n### `shippo.transaction_created.return_label`\n\nTriggered when the `transaction_created` webhook receives a return label transaction\n\n#### Payload\n\n```javascript\n{\n  order_id: \"\",\n  transaction: {...}\n}\n```\n\n### `shippo.transaction_updated.payload`\n\nTriggered when the `transaction_updated` webhook receives an updated transaction\n\n#### Payload\n\n```javascript\n{\n  order_id: \"\",\n  fulfillment_id: \"\",\n  transaction: {...}\n}\n```\n\n### `shippo.track_updated.payload`\n\nTriggered when the `track_updated` webhook receives an updated track\n\n#### Payload\n\n```javascript\n{\n  ...track\n}\n```\n\n## Shippo Node Client\n\nThis plugin is using a forked version of the official shippo-node-client. \n\nThe fork adds support for the following endpoints:\n\n*   live-rates\n*   service-groups\n*   user-parcel-templates\n*   orders/:id/packingslip\n*   ...\n*   Doc is WIP\n\nThe client is exposed on the `useClient` property of `shippoClientService`\n\n```javascript\nconst client = shippoService.client\n\n// Forks additional methods\nawait client.liverates.create({...parms})\nawait client.userparceltemplates.list()\nawait client.userparceltemplates.retrieve(id)\nawait client.servicegroups.list()\nawait client.servicegroups.create({...params})\n...\n```\n\nSee [Shippo API Reference](https://goshippo.com/docs/reference) for methods\n\n[Official client](https://github.com/goshippo/shippo-node-client)\n\n[Forked client](https://github.com/macder/shippo-node-client/tree/medusa)\n\n## Shipping Rates\n\nDimensional weight is a major factor in determining costs. Estimates are frivolous when based on inaccurate parcel volume and weight. This raises a challenging problem in computing which parcel box to use. While this is simple for single items, it becomes increasingly difficult when packing multiple items of various dimensions. It is a classic [bin packing problem](https://en.wikipedia.org/wiki/Bin_packing_problem), [NP-Hard](https://en.wikipedia.org/wiki/NP-hardness) stuff.\n\nThis plugin uses [binpackingjs](https://github.com/olragon/binpackingjs) which provides a [first-fit](https://en.wikipedia.org/wiki/First-fit_bin_packing) algorithm. Additional logic is wrapped around it to get a more optimized [first-fit-decreasing](https://en.wikipedia.org/wiki/First-fit-decreasing_bin_packing) algorithm. In order for this to be effective, parcel templates need to be setup in the Shippo account, and all products in medusa must have values for length, width, height, and weight.\n\n### Accuracy of Rates\n\nShipping rate estimates are calculated by third parties using data you supply. The onus is on the store admin to supply accurate data values about their products and packaging. This plugin does its best to use this data to create optimized requests, within reason and scope, to retrieve rates from Shippo. The intent is to provide a cost-cutting solution, but there is no one-size-fits all.\n\nAssuming accurate data for product dimensions, weight, and package templates in shippo reflect a carefully planned boxing strategy, expect reasonably accurate rates for single item and multi-item fulfillment's that fit in a single parcel. Multi parcel for rates at checkout is currently not supported (future consideration). If items cannot fit into a single box, the default package template set in [Shippo app settings](https://apps.goshippo.com/settings/rates-at-checkout) is used.\n\n## Limitations\n\nNo support for customs declarations. Planned for future release.\n\n## Resources\n\nMedusa Docs\\\nhttps://docs.medusajs.com/\n\nMedusa Shipping Architecture:\\\nhttps://docs.medusajs.com/advanced/backend/shipping/overview\n\nShippo API\\\nhttps://goshippo.com/docs/intro\\\nhttps://goshippo.com/docs/reference\n","readmeFilename":"README.md","gitHead":"6c5a3bb3b6e0ae480d2197292e4dd51398bafbae","bugs":{"url":"https://github.com/macder/medusa-fulfillment-shippo/issues"},"homepage":"https://github.com/macder/medusa-fulfillment-shippo#readme","_id":"medusa-fulfillment-shippo@1.0.0-alpha.3","_nodeVersion":"16.15.1","_npmVersion":"8.11.0","dist":{"integrity":"sha512-334cKfVf3/B9o/o3AsYJ0Rssx/wml/B+8hMq2fg72wzoY6NiRsR+T9ne5oS0Z5m/3pwuhhZgYchjP3vcbBequQ==","shasum":"28b71736d5f50ef1b0ce6cf8577802043e338296","tarball":"https://registry.npmjs.org/medusa-fulfillment-shippo/-/medusa-fulfillment-shippo-1.0.0-alpha.3.tgz","fileCount":26,"unpackedSize":500917,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICwk3WPz8QFDiD5kyjOFvSxonNQOHg4IwWvcyxo3r0zJAiEAgqkOL0yIOgIA3v55nHeQPtbia3qe1/bqdL9gt0I0SCg="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJi65a7ACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmqi6Q/9F4U66B5/Y2V52YbShgbz4FIJf/5VOWCE7M2aAQV7/2JPHKWJ\r\n2T5EpkQkoqrReArmfTPMnw7OlTcZU6GDSmJU4dUARFgolEYHNh5imODWjt1+\r\n6f/bbEs9MmQEgtHAnRpXeqbPXTVZ/WbLW1tlThLrR3kNznepwQu5TcncmVqf\r\n+eZan2mzVdGMy2KvJoEnS3hPjIczfbaVJ8H0qEHgfMdgJqXAY2R61Rw9MHTw\r\nc+Sqv1LbQd5sAkLWgKYWMaX3eWHISuwb4cOVMGve8zjGvlpcFBFVDwBzphqT\r\nQsER4iy9IpYr/hcii4QBwyMl86tTHf+w2dQlD2FYUHHRtnEzLv9EydS1JrKE\r\nx3gBJBkVwQXbZhltkzLrjUMVurrsfdslExUPdxpgZa+Gov1+huSrrDQWJQ3R\r\nZZ+wMQc76mrdiWYyOJ+1Edo9fh5wifjG0lSKCWOVtTPkqV2ghqePo+s1TNs/\r\n3GcopfN4ring2a4SZCpqbTcM1IgLwepeGeqLGolvDbFibcqnmEHw3mI/9nnv\r\njG6v/iBRaGbcUfm7Q540bicWc6guNTN+lxVZ/UgjhSWlaCCCUSaDonqx+468\r\nwuyoILk0ateNoCh/xqxqltdDJEYMTE1oj2Rf2T05OO71sBomu+HogaLppbxZ\r\nvK6OoJwIb5E1fDemJtvlPuXUKmFxxYzkkeA=\r\n=dVKo\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"macder","email":"maciej@derulski.com"},"directories":{},"maintainers":[{"name":"macder","email":"maciej@derulski.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/medusa-fulfillment-shippo_1.0.0-alpha.3_1659606714863_0.9296646214968973"},"_hasShrinkwrap":false},"1.0.0-alpha.4":{"name":"medusa-fulfillment-shippo","version":"1.0.0-alpha.4","description":"Shippo fulfillment provider for medusa","author":{"name":"Maciej Derulski"},"license":"MIT","scripts":{"build":"babel src -d . --ignore **/__tests__,**/__mocks__,**/sandbox,**/sand.js,**/old-tests","prepare":"cross-env NODE_ENV=production npm run build","watch":"onchange -v src/** -- copyfiles {{file}} ../my-medusa-store","test":"jest"},"dependencies":{"binpackingjs":"2.3.3","body-parser":"^1.19.0","express":"^4.17.1","express-rate-limit":"^6.4.0","medusa-core-utils":"^1.1.30","shippo":"git+https://github.com/macder/shippo-node-client.git#medusa-fulfillment-shippo"},"peerDependencies":{"medusa-interfaces":"1.x"},"repository":{"type":"git","url":"git+https://github.com/macder/medusa-fulfillment-shippo.git"},"keywords":["medusa","medusa-plugin","medusa-fulfillment","medusa-shippo"],"devDependencies":{"@babel/cli":"^7.7.5","@babel/core":"^7.7.5","@babel/eslint-parser":"^7.15.8","@babel/node":"^7.7.4","@babel/plugin-proposal-class-properties":"^7.7.4","@babel/plugin-transform-classes":"^7.9.5","@babel/plugin-transform-instanceof":"^7.8.3","@babel/plugin-transform-runtime":"^7.7.6","@babel/preset-env":"^7.7.5","@babel/register":"^7.7.4","@babel/runtime":"^7.9.6","@faker-js/faker":"^7.3.0","client-sessions":"^0.8.0","copyfiles":"^2.4.1","cross-env":"^5.2.1","eslint":"^8.20.0","eslint-config-airbnb-base":"^15.0.0","eslint-config-prettier":"^8.3.0","eslint-plugin-import":"^2.26.0","eslint-plugin-prettier":"^4.0.0","jest":"^28.1.2","jest-extended":"2.0.0","medusa-test-utils":"^1.1.37","onchange":"^7.1.0"},"readme":"# medusa-fulfillment-shippo\n\n[![CircleCI](https://dl.circleci.com/status-badge/img/gh/macder/medusa-fulfillment-shippo/tree/main.svg?style=shield)](https://dl.circleci.com/status-badge/redirect/gh/macder/medusa-fulfillment-shippo/tree/main)\n[![Codacy Badge](https://app.codacy.com/project/badge/Grade/5ca5e600f1574354a8056441f589ca80)](https://www.codacy.com/gh/macder/medusa-fulfillment-shippo/dashboard?utm_source=github.com\\&utm_medium=referral\\&utm_content=macder/medusa-fulfillment-shippo\\&utm_campaign=Badge_Grade)\n[![Codacy Badge](https://app.codacy.com/project/badge/Coverage/5ca5e600f1574354a8056441f589ca80)](https://www.codacy.com/gh/macder/medusa-fulfillment-shippo/dashboard?utm_source=github.com\\&utm_medium=referral\\&utm_content=macder/medusa-fulfillment-shippo\\&utm_campaign=Badge_Coverage)\n\n> :information\\_source: Requires Medusa 1.3.3^\n\nShippo fulfillment provider for Medusa Commerce.\n\nProvides fulfillment options using carrier service levels and user created service groups that can be used to create shipping options for profiles and regions.\n\nRates at checkout optimized with a [first-fit-decreasing (FFD)](https://en.wikipedia.org/wiki/First-fit-decreasing_bin_packing) bin packing algorithm.\n\nFulfillments create orders in shippo.\n\nSupports returns, exchanges, and claims.\n\n[Public interface](#public-interface) for rapid custom integration.\n\n[Eventbus payloading](#events) instead of arbitrary data assumption and storage.\n\n## Table of Contents\n\n*   [Getting Started](#getting-started)\n*   [Orders](#orders)\n*   [Packing Slips](#packing-slips)\n*   [Returns](#returns)\n    *   [Request](#request)\n*   [Swaps](#swaps)\n    *   [Create](#create)\n    *   [Fulfillment](#fulfillment)\n*   [Claims](#claims)\n    *   [Refund](#refund)\n    *   [Replace](#replace)\n    *   [Fulfillment](#fulfillment-1)\n*   [Rates at Checkout](#rates-at-checkout)\n    *   [Shipping Options in Shippo App](#setup-shipping-options-in-shippo-app)\n    *   [Assign Shipping Options to Regions in Medusa](#assign-shipping-options-to-regions-in-medusa)\n    *   [During Checkout](#during-checkout)\n    *   [Set rates for cart](#set-rates-for-cart)\n    *   [Add to Cart](#add-to-carlst)\n    *   [Help, adding a shipping method to cart throws an error](#help-adding-a-shipping-method-to-cart-throws-an-error)\n*   [Webhooks](#webhooks)\n*   [Public Interface](#public-interface)\n    *   [Account](#account)\n    *   [Order](#order)\n    *   [Package](#package)\n    *   [Packingslip](#packingslip)\n    *   [Rates](#rates)\n    *   [Track](#track)\n    *   [Transaction](#transaction)\n    *   [Client](#client)\n*   [Events](#events)\n*   [Shippo Node Client](#shippo-node-client)\n*   [Shipping Rates](#shipping-rates)\n*   [Limitations](#limitations)\n*   [Resources](#resources)\n\n## Getting started\n\nInstall:\n\n`> npm i medusa-fulfillment-shippo`\n\nAdd to medusa-config.js\n\n```javascript\n{\n  resolve: `medusa-fulfillment-shippo`,\n    options: {\n      api_key: SHIPPO_API_KEY,\n      weight_unit_type: 'g', // valid values: g, kg, lb, oz\n      dimension_unit_type: 'cm', // valid values: cm, mm, in\n      webhook_secret: '', // README section on webhooks before using!\n      webhook_test_mode: false\n    },\n}\n```\n\n## Orders\n\nCreating an order fulfillment makes a new order in shippo. An event is emitted with the response data and related internal ids.\n\n[Create a Subscriber](https://docs.medusajs.com/advanced/backend/subscribers/create-subscriber) to access the data.\n\n**Event:**\n`shippo.order_created`\n\n```javascript\n{\n  order_id: \"\",\n  fulfillment_id: \"\",\n  customer_id: \"\",\n  shippo_order: {...}\n}\n```\n\n### Retrieve\n\n```javascript\nawait shippoService.order.fetch(object_id)\n\nawait shippoService.order.fetchBy([\"fulfillment\", ful_id]\n\nawait shippoService.order.with([\"fulfillment\"]).fetch(object_id)\n```\n\n[See references](#order) for all methods\n\n## Packing Slips\n\n### Retrieve\n\n```javascript\nconst { object_id } = order\n\nawait shippoService.packingslip.fetch(object_id)\n\nawait shippoService.packingslip.fetchBy([\"fulfillment\"], ful_id)\n\nawait shippoService.packingslip.with([\"fulfillment\"]).fetch(object_id)\n```\n\n[See references](#packingslip) for all methods\n\n## Returns\n\n### Request\n\nInvoked when [Request a Return](https://docs.medusajs.com/api/admin/order/request-a-return) `return_shipping` has `provider: shippo`\n\nAttempts fetching an existing return label from shippo.\n\n**Event:**\n`shippo.return_requested`\n\n```javascript\n{\n  order: {...}, // return order\n  transaction: {...} // shippo transaction for return label OR null\n}\n```\n\n## Swaps\n\n### Create\n\nInvoked when [Create a Swap](https://docs.medusajs.com/api/admin/order/create-a-swap) `return_shipping` has `provider: shippo`\n\nAttempts fetching an existing return label from shippo.\n\n**Event:**\n`shippo.swap_created`\n\n```javascript\n{\n  order: {...}, // return order\n  transaction: {...} // shippo transaction for return label OR null\n}\n```\n\n### Fulfillment\n\nInvoked when [Create a Swap Fulfillment](https://docs.medusajs.com/api/admin/order/create-a-swap-fulfillment) `shipping_option` has `provider: shippo`\n\nCreates an order in shippo.\n\n**Event:**\n`shippo.replace_order_created`\n\n```javascript\n{\n  order_id: \"\",\n  fulfillment_id: \"\",\n  customer_id: \"\",\n  shippo_order: {...}\n}\n```\n\n## Claims\n\n### Refund\n\nInvoked when [Create a Claim](https://docs.medusajs.com/api/admin/order/create-a-claim) has `type: refund` and `return_shipping` has `provider: shippo`\n\nAttempts fetching an existing return label from shippo.\n\n**Event:**\n`shippo.claim_refund_created`\n\n```javascript\n{\n  order: {...}, // return order\n  transaction: {...} // shippo transaction for return label OR null\n}\n```\n\n### Replace\n\nInvoked when [Create a Claim](https://docs.medusajs.com/api/admin/order/create-a-claim) has `type: replace` and `return_shipping` has `provider: shippo`\n\nAttempts fetching an existing return label from shippo.\n\n**Event:**\n`shippo.claim_replace_created`\n\n```javascript\n{\n  order: {...}, // return order\n  transaction: {...} // shippo transaction for return label OR null\n}\n```\n\n### Fulfillment\n\nInvoked when [Create a Claim Fulfillment](https://docs.medusajs.com/api/admin/order/create-a-claim-fulfillment) `shipping_option` has `provider: shippo`\n\nCreates an order in shippo.\n\n**Event:**\n`shippo.replace_order_created`\n\n```javascript\n{\n  order_id: \"\",\n  fulfillment_id: \"\",\n  customer_id: \"\",\n  shippo_order: {...}\n}\n```\n\n## Rates at Checkout\n\nProvide customers with accurate shipping rates at checkout to reduce over and under charges. This plugin implements a first-fit-decreasing bin packing algorithm to choose an appropriate parcel for the items in a cart. Follow this guide to get setup and then optimize.\n\n### Setup Shipping Options in Shippo App\n\nLets assume shipping from Canada to customers in Canada and USA via “Standard” and “Express” options\n\nThis would require setting up 4 shipping options in Shippo (\\<https://apps.goshippo.com/settings/rates-at-checkout>)\n\n1.  Standard Shipping Canada\n2.  Express Shipping Canada\n3.  Standard Shipping USA\n4.  Express Shiping USA\n\nSet each shipping option to “Live rate” and assign *service(s)* to them\n\nFor example:\n\n*   Express Shipping Canada: *Canada Post XpressPost*\n*   Express Shipping USA: *Canada Post XpressPost USA*\n*   *…*\n\nFor more in-depth details see https://support.goshippo.com/hc/en-us/articles/4403207559963\n\n### Assign Shipping Options to Regions in Medusa\n\nCreate shipping options for regions as usual\n\n[See here for common issue](#help-adding-a-shipping-method-to-cart-throws-an-error)\n\n### Setup parcel templates\n\nCreate package templates in the [Shippo app settings](https://apps.goshippo.com/settings/packages)\n\nTo get most optimal results, it is recommended to create package templates for all your shipping boxes.\n\n### Verify product dimensions and weight\n\nIn your medusa store, make sure products have correct values for length, width, height, weight\n\n### During Checkout\n\n[Retrieve shipping options for cart](https://docs.medusajs.com/api/store/shipping-option/retrieve-shipping-options-for-cart) as usual and any `price_type: calculated` options belonging to `provider: shippo` will have `amount: Number`.\n\n**HTTP:**\n\n```plaintext\nGET /store/shipping-options/:cart_id\n```\n\n**Service:**\n\n```javascript\nconst shippingOptions = await shippingProfileService.fetchCartOptions(cart)\n```\n\nImplementation needs to consider rates only calculate if cart has items and complete shipping address. Otherwise `price_type: calculated` will have `amount: null`\n\nRetrieving only decorates the shipping options with rates for display purposes. They are stateless objects. Each retrieval will re-fetch rates from shippo's api and re-decorate the options.\n\n### Add to Cart\n\n[Add a Shipping Method](https://docs.medusajs.com/api/store/cart/add-a-shipping-method) and if  `shipping_option` has `price_type: calculated` the rate will be saved to the `shipping_method`\n\n**HTTP:**\n\n```plaintext\nPOST /store/carts/:id/shipping-methods\n --data '{\"option_id\":\"example_cart_option_id\"}'\n```\n\n### Raw rates\n\n```javascript\nawait shippoService.rates.for([\"cart\", id]).fetch()\n```\n\n### Help, adding a shipping method to cart throws an error\n\nThis is an issue with medusa-admin. Examine line 85 [`admin/src/domain/settings/regions/new-shipping.tsx`](https://github.com/medusajs/admin/blob/a33ed20214297ffdbd2383f809dddd4870f5dad9/src/domain/settings/regions/new-shipping.tsx#L85)\n\nOptions with `price_type: flat_rate` will not pass through [`fulFillmentProviderService.calculatePrice()`](https://docs.medusajs.com/references/services/classes/FulfillmentProviderService#calculateprice)\n\nmedusa-admin is still early phase software.\n\nWorkaround it, use the REST api directly, or patch the issue for now\n\nPossible interim solution:\n\n```javascript\nprice_type: (options[optionIndex].type === \"LIVE_RATE\") \n    ? \"calculated\" \n    : \"flat_rate\",\n```\n\n## Webhooks\n\n### Caution\n\nIncoming HTTP requests from Shippo to webhook endpoints lack authentication. No secret token, no signature in the request header, no bearer, nothing.\n\nBefore enabling webhooks, understand the risks of an open and insecure HTTP endpoint that consumes data, and how to mitigate this. Please DO NOT use this without SSL/TLS. [Whitelisting shippo IP's](https://groups.google.com/g/shippo-api-announce/c/1A6m6Snvypk) is a good idea. There are also intermediary third party services such as pipedream and hookdeck that can be used to relay requests.\n\nYou will also need to self generate a token and add it as a url query param. Ya I know… but it's better than nothing and it is encrypted over HTTPS\n\nThe flow at the code level is:\n\n1.  Webhook receives POST data\n2.  URL query token is verified\n3.  The request json gets verified by fetching the same object directly from shippo API, following these steps:\n    1.  Request body contains json claiming to be a shippo object. \n    2.  Ok, but lets fetch this object directly from Shippo's API\n    3.  If the fetch resolves to the object requested, then use that data instead of the untrusted input \n    4.  Otherwise throw a HTTP 500 and do nothing\n\n### Setup\n\nIn `.env` add `SHIPPO_WEBHOOK_SECRET=some_secret_string` \n\nAdd to `medusa-config.js`\n\n```javascript\nconst SHIPPO_API_KEY = process.env.SHIPPO_API_KEY\nconst SHIPPO_WEBHOOK_SECRET = process.env.SHIPPO_WEBHOOK_SECRET\n\n{\n  resolve: `medusa-fulfillment-shippo`,\n  options: {\n    api_key: SHIPPO_API_KEY,\n    weight_unit_type: 'g',\n    dimension_unit_type: 'cm',\n    webhook_secret: SHIPPO_WEBHOOK_SECRET,\n    webhook_test_mode: false    \n  },\n},\n```\n\n### Endpoints\n\nHooks need to be setup in [Shippo app settings](https://apps.goshippo.com/settings/api)\n\n**transaction\\_created**: `/hooks/shippo/transaction?token=SHIPPO_WEBHOOK_SECRET`\n\n**transaction\\_updated**: `/hooks/shippo/transaction?token=SHIPPO_WEBHOOK_SECRET`\n\n**track\\_updated**: `/hooks/shippo/track?token=SHIPPO_WEBHOOK_SECRET`\n\nThen send a sample. If everything is good you will see this in console:\n\n```shell\nProcessing shippo.received.transaction_created which has 0 subscribers\nProcessing shippo.rejected.transaction_created which has 0 subscribers\n```\n\nThis is the expected behaviour because the data could not be verified. Since it is a sample, when the plugin tried to verify the transaction by requesting the same object back directly from shippo api, it did not exist. It will NOT use input data beyond making the verification, so it gets rejected.\n\n### Test Mode\n\nTest mode bypasses input authenticity verification, i.e. it will use the untrusted input data instead of requesting the same data back from shippo.\n\nThis allows testing using data that does not exist in shippo.\n\nTo enable, set `webhook_test_mode: true` in `medusa-config.js` plugin options.\n\nRunning in test mode is a security risk, enable only for testing purposes.\n\n### transaction\\_created\n\n`/hooks/shippo/transaction?token=SHIPPO_WEBHOOK_SECRET`\n\nReceives shippo transaction object when label purchased\n\n*   Updates fulfillment to “shipped”\n*   Adds tracking number and link to fulfillment\n\n#### Events\n\n`shippo.transaction_created.shipment`\n\n```javascript\n{\n  order_id: \"\",\n  fulfillment_id: \"\",\n  transaction: {...}\n}\n```\n\n`shippo.transaction_created.return_label`\n\n```javascript\n{\n  order_id: \"\",\n  transaction: {...}\n}\n```\n\n### transaction\\_updated\n\n`/hooks/shippo/transaction?token=SHIPPO_WEBHOOK_SECRET`\n\nReceives shippo transaction object when transaction updated\n\n#### Events\n\n`shippo.transaction_updated.payload`\n\n```javascript\n{\n  order_id: \"\",\n  fulfillment_id: \"\",\n  transaction: {...}\n}\n```\n\n### track\\_updated\n\n`/hooks/shippo/track?token=SHIPPO_WEBHOOK_SECRET`\n\n#### Events\n\n`shippo.track_updated.payload`\n\n```javascript\n{\n  ...track\n}\n```\n\n## Public Interface\n\nReferences the declared public interface for client consumption, the [semver](https://semver.org/) \"Declared Public API\"\n\nAlthough there is nothing stopping you from accessing and using public methods behind the interface, be aware that those implementation details can and will change. The purpose of the interface is semver compliant stability.\n\n> Notice: (semver 0.x.x) - methods labeled `@experimental` have high probability of breaking changes\n\n### Getting Started\n\nDependency inject `shippoService` as you would with any other service\n\nFor guide, see [Using Custom Service](https://docs.medusajs.com/advanced/backend/services/create-service#using-your-custom-service)\n\n> Note:\n>\n> ```plaintext\n> order = shippo_order\n>\n> local_order = medusa_order\n> ```\n\n### Account\n\n`address`\n\n```javascript\nawait shippoService.account.address()\n```\n\n### Order\n\n`fetch(id)`\n\n```javascript\nawait shippoService.order.fetch(object_id)\n```\n\n`with([entity]).fetch(id)`\n\n```javascript\nawait shippoService.order.with([\"fulfillment\"]).fetch(object_id)\n```\n\n`fetchBy([entity, id])`\n\n```javascript\n/* @return {Promise.<object>} */\n\nawait shippoService.order.fetchBy([\"fulfillment\", id])\n```\n\n```javascript\n/* @return {Promise.<object[]>} */\n\nawait shippoService.order.fetchBy([\"local_order\", id])\n\nawait shippoService.order.fetchBy([\"claim\", id])\n\nawait shippoService.order.fetchBy([\"swap\", id])\n```\n\n`is([entity, id], attr).fetch()`\n\n```javascript\nawait shippoService.is([\"order\", id], \"replace\").fetch()\n```\n\n### Package\n\n`for([entity, id]).fetch()`\n\n```javascript\n// use parcel templates defined in shippo account\n\nawait shippoService.package.for([\"line_items\", [...lineItems]]).fetch()\n\nawait shippoService.package.for([\"cart\", id]).fetch()\n\nawait shippoService.package.for([\"local_order\", id]).fetch()\n\nawait shippoService.package.for([\"fulfillment\", id]).fetch()\n```\n\n```javascript\n// use any parcel templates \nconst packages = [\n  {\n    id: \"id123\",\n    name: \"My Package\",\n    length: \"40\",\n    width: \"30\",\n    height: \"30\",\n    weight: \"10000\", // max-weight\n  },\n  {...}\n]\n\nshippoService.package.set(\"boxes\", packages)\n\nawait shippoService.package.for([\"cart\", id]).get()\n...\n```\n\n### Packingslip\n\n`fetch(id)`\n\n```javascript\nconst { object_id } = order\n\nawait shippoService.packingslip.fetch(object_id)\n```\n\n`with([entity]).fetch(id)`\n\n```javascript\nawait shippoService.packingslip.with([\"fulfillment\"]).fetch(object_id)\n```\n\n`fetchBy([entity, id])`\n\n```javascript\n/* @return {Promise.<object>} */\n\nawait shippoService.packingslip.fetchBy([\"fulfillment\", id])\n\n```\n\n```javascript\n/* @return {Promise.<object[]>} */\n\nawait shippoService.packingslip.fetchBy([\"local_order\", id]) \n\nawait shippoService.packingslip.fetchBy([\"claim\", id]) \n\nawait shippoService.packingslip.fetchBy([\"swap\", id]) \n```\n\n### Rates\n\n`for([entity, id]).fetch(id)`\n\n```javascript\nawait shippoService.rates.for([\"cart\", id]).fetch()\n```\n\n### Track\n\n`fetch(carrier_enum, track_num)`\n\n```javascript\nawait shippoService.track.fetch(\"usps\", \"trackingnumber\")\n```\n\n`fetchBy([entity, id])`\n\n```javascript\nawait shippoService.track.fetchBy([\"fulfillment\", id])\n```\n\n### Transaction\n\n`fetch(id, {...args} = null)`\n\n```javascript\nawait shippoService.transaction.fetch(object_id)\n\nawait shippoService.transaction.fetch(object_id, { type: \"extended\" })\n```\n\n`fetchBy([entity, id], {...args} = null)`\n\n```javascript\nawait shippoService.transaction.fetchBy([\"local_order\", id])\n\nawait shippoService.transaction.fetchBy([\"local_order\", id], { type: \"extended\" })\n\nawait shippoService.transaction.fetchBy([\"fulfillment\", id])\n\nawait shippoService.transaction.fetchBy([\"fulfillment\", id], { type: \"extended\" })\n```\n\n`is([entity, id], attr).fetch()`\n\n```javascript\nawait shippoService.is([\"transaction\", id], \"return\").fetch()\n```\n\n### Client\n\n`shippo-node-client` ([forked](#shippo-node-client))\n\n```javascript\nconst client = shippoService.client \n```\n\n### Find\n\n`find(entity).for([entity, id])`\n\n```javascript\n/* @experimental */\n\nawait shippoService.find(\"fulfillment\").for([\"transaction\", id])\n\nawait shippoService.find(\"order\").for([\"transaction\", id])\n```\n\n## Events\n\nList of all events, their triggers, and expected payload for handlers\n\n[Subscribe to events](https://docs.medusajs.com/advanced/backend/subscribers/create-subscriber) to perform additional operations\n\nThese events only emit if the action pertains to `provider: shippo`\n\n### `shippo.order_created`\n\nTriggered when a new [fulfillment](https://docs.medusajs.com/api/admin/order/create-a-fulfillment) creates a shippo order.\n\n#### Payload\n\n```javascript\n{\n  order_id: \"\",\n  fulfillment_id: \"\",\n  customer_id: \"\",\n  shippo_order: {...}\n}\n```\n\n### `shippo.return_requested`\n\nTriggered when a [return is requested](https://docs.medusajs.com/api/admin/order/request-a-return)\n\nIf the return `ShippingMethod` has `provider: shippo` it attempts to find an existing return label in shippo.\n\n#### Payload\n\n```javascript\n{\n  order: {...}, // return order\n  transaction: {...} // shippo transaction for return label OR null\n}\n```\n\n### `shippo.swap_created`\n\nTriggered when a [swap is created](https://docs.medusajs.com/api/admin/order/create-a-swap)\n\nIf return `ShippingMethod` has `provider: shippo` it attempts to find an existing return label in shippo.\n\n#### Payload\n\n```javascript\n{\n  order: {...}, // return order\n  transaction: {...} // shippo transaction for return label OR null\n}\n```\n\n### `shippo.replace_order_created`\n\nTriggered when a [swap](https://docs.medusajs.com/api/admin/order/create-a-swap-fulfillment) or [claim](https://docs.medusajs.com/api/admin/order/create-a-claim-fulfillment) fulfillment is created.\n\nIf the `ShippingMethod` has `provider: shippo` a shippo order is created\n\n#### Payload\n\n```javascript\n{\n  order_id: \"\",\n  fulfillment_id: \"\",\n  customer_id: \"\",\n  shippo_order: {...}\n}\n```\n\n### `shippo.claim_refund_created`\n\nTriggered when a `type: refund` [claim is created](https://docs.medusajs.com/api/admin/order/create-a-claim)\n\nIf return `ShippingMethod` has `provider: shippo`, it attempts to find an existing return label in shippo\n\n#### Payload\n\n```javascript\n{\n  order: {...}, // return order\n  transaction: {...} // shippo transaction for return label OR null\n}\n```\n\n### `shippo.claim_replace_created`\n\nTriggered when a `type: replace` [claim is created](https://docs.medusajs.com/api/admin/order/create-a-claim)\n\nIf return `ShippingMethod` has `provider: shippo`, it attempts to find an existing return label in shippo\n\n#### Payload\n\n```javascript\n{\n  order: {...}, // return order\n  transaction: {...} // shippo transaction for return label OR null\n}\n```\n\n### `shippo.transaction_created.shipment`\n\nTriggered when the `transaction_created` webhook updates a `Fulfillment` status to `shipped`\n\n#### Payload\n\n```javascript\n{\n  order_id: \"\",\n  fulfillment_id: \"\",\n  transaction: {...}\n}\n```\n\n### `shippo.transaction_created.return_label`\n\nTriggered when the `transaction_created` webhook receives a return label transaction\n\n#### Payload\n\n```javascript\n{\n  order_id: \"\",\n  transaction: {...}\n}\n```\n\n### `shippo.transaction_updated.payload`\n\nTriggered when the `transaction_updated` webhook receives an updated transaction\n\n#### Payload\n\n```javascript\n{\n  order_id: \"\",\n  fulfillment_id: \"\",\n  transaction: {...}\n}\n```\n\n### `shippo.track_updated.payload`\n\nTriggered when the `track_updated` webhook receives an updated track\n\n#### Payload\n\n```javascript\n{\n  ...track\n}\n```\n\n## Shippo Node Client\n\nThis plugin is using a forked version of the official shippo-node-client. \n\nThe fork adds support for the following endpoints:\n\n*   live-rates\n*   service-groups\n*   user-parcel-templates\n*   orders/:id/packingslip\n*   ...\n*   Doc is WIP\n\nThe client is exposed on the `useClient` property of `shippoClientService`\n\n```javascript\nconst client = shippoService.client\n\n// Forks additional methods\nawait client.liverates.create({...parms})\nawait client.userparceltemplates.list()\nawait client.userparceltemplates.retrieve(id)\nawait client.servicegroups.list()\nawait client.servicegroups.create({...params})\n...\n```\n\nSee [Shippo API Reference](https://goshippo.com/docs/reference) for methods\n\n[Official client](https://github.com/goshippo/shippo-node-client)\n\n[Forked client](https://github.com/macder/shippo-node-client/tree/medusa)\n\n## Shipping Rates\n\nDimensional weight is a major factor in determining costs. Estimates are frivolous when based on inaccurate parcel volume and weight. This raises a challenging problem in computing which parcel box to use. While this is simple for single items, it becomes increasingly difficult when packing multiple items of various dimensions. It is a classic [bin packing problem](https://en.wikipedia.org/wiki/Bin_packing_problem), [NP-Hard](https://en.wikipedia.org/wiki/NP-hardness) stuff.\n\nThis plugin uses [binpackingjs](https://github.com/olragon/binpackingjs) which provides a [first-fit](https://en.wikipedia.org/wiki/First-fit_bin_packing) algorithm. Additional logic is wrapped around it to get a more optimized [first-fit-decreasing](https://en.wikipedia.org/wiki/First-fit-decreasing_bin_packing) algorithm. In order for this to be effective, parcel templates need to be setup in the Shippo account, and all products in medusa must have values for length, width, height, and weight.\n\n### Accuracy of Rates\n\nShipping rate estimates are calculated by third parties using data you supply. The onus is on the store admin to supply accurate data values about their products and packaging. This plugin does its best to use this data to create optimized requests, within reason and scope, to retrieve rates from Shippo. The intent is to provide a cost-cutting solution, but there is no one-size-fits all.\n\nAssuming accurate data for product dimensions, weight, and package templates in shippo reflect a carefully planned boxing strategy, expect reasonably accurate rates for single item and multi-item fulfillment's that fit in a single parcel. Multi parcel for rates at checkout is currently not supported (future consideration). If items cannot fit into a single box, the default package template set in [Shippo app settings](https://apps.goshippo.com/settings/rates-at-checkout) is used.\n\n## Limitations\n\nNo support for customs declarations. Planned for future release.\n\n## Resources\n\nMedusa Docs\\\nhttps://docs.medusajs.com/\n\nMedusa Shipping Architecture:\\\nhttps://docs.medusajs.com/advanced/backend/shipping/overview\n\nShippo API\\\nhttps://goshippo.com/docs/intro\\\nhttps://goshippo.com/docs/reference\n","readmeFilename":"README.md","gitHead":"68f29ccc12b81730fb269e58dfa5820ff8aed872","bugs":{"url":"https://github.com/macder/medusa-fulfillment-shippo/issues"},"homepage":"https://github.com/macder/medusa-fulfillment-shippo#readme","_id":"medusa-fulfillment-shippo@1.0.0-alpha.4","_nodeVersion":"16.15.1","_npmVersion":"8.11.0","dist":{"integrity":"sha512-IB2AJqQBEZcuObkJ8qcQA3VzBdqikA9Gp8G8+shj4UY3Jweev5bSm+BpZMOMfVDEtj5/Z2HKjxS1bLte2MpKzw==","shasum":"7f021e5b3b395da54b9a954eaa00ff99b63dedc5","tarball":"https://registry.npmjs.org/medusa-fulfillment-shippo/-/medusa-fulfillment-shippo-1.0.0-alpha.4.tgz","fileCount":26,"unpackedSize":504672,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIEY+W9y5qID3W0SpNdcFDAh21bBReHbFkRW4WLUk+ixQAiB7qH02QO+tEfOE1z2eOD0DpM3kkPqTHjGq9aVkn70H5Q=="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJi651rACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmrwdQ//TBs8XJIN8i2HJHlqxUKFkG637d6o3Q9lZm7sMSOdQqWqi9x2\r\nMqnD8R24slXG//idiGui/0rAEIrMn0kf0juU+UGulLHWavgeyK1A8v92CikP\r\nLnmgcOY669FL/Z/6A2I9VKGtCQOxI879UDpKgVTzKSjmBTNetDlNY5KRz1IQ\r\n+Ed962GrmR0ssXvTNtvC6Ro1LCo1GLRAVD/AVPCMyFdoAaZ2QE/WenfNOzfx\r\nPLYhhSNTyMT/FGDnE2yoZNrai9eBNxKRlt4kxGr14bx2ZSueL26kDKL7E3ux\r\nNH+asS1wvzy+voDPH0dD2InNkPTPJ2Bz5EewT80MiwykGkQoKH8iWQAdRO1f\r\nbkqzuvNVEfICgFvW2436tOLvY8JVIUj2sSSiLzhXZMzZ+oqE1ci/Ypx9MkGK\r\npqi+0P1F37MsNEtqu3Of21H2bKmVxlHP6iA+KXDcp3/pdGLKiumatEgWIxoa\r\nbWkt8YlZP9PQtpLdZNcnWTcQaoSri22N7j0vO4BLVD5DhRsrntTtpNGSarJ1\r\nwVieQ1llrH0mbxphrJn4pbJS2t2dC1hS0ZLtneiAiVBiU5FVGBNatwJVP2uo\r\n3/VjQPFvyPNt2ulRpUnEGAtiFxl370GX15NgY/UCRx5f6Zgamu9z3GaCZFBc\r\nS6kisWP1GUPOG4Z+HMU0A8pdcFAq2o7IPwE=\r\n=8k+v\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"macder","email":"maciej@derulski.com"},"directories":{},"maintainers":[{"name":"macder","email":"maciej@derulski.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/medusa-fulfillment-shippo_1.0.0-alpha.4_1659608427252_0.43726292068729977"},"_hasShrinkwrap":false},"0.27.2":{"name":"medusa-fulfillment-shippo","version":"0.27.2","description":"Shippo fulfillment provider for medusa","author":{"name":"Maciej Derulski"},"license":"MIT","scripts":{"build":"babel src -d . --ignore **/__tests__,**/__mocks__,**/sandbox,**/sand.js,**/old-tests","prepare":"cross-env NODE_ENV=production npm run build","watch":"onchange -v src/** -- copyfiles {{file}} ../my-medusa-store","test":"jest"},"dependencies":{"binpackingjs":"2.3.3","body-parser":"^1.19.0","express":"^4.17.1","express-rate-limit":"^6.4.0","medusa-core-utils":"^1.1.30","shippo":"git+https://github.com/macder/shippo-node-client.git#medusa-fulfillment-shippo"},"peerDependencies":{"medusa-interfaces":"1.x"},"repository":{"type":"git","url":"git+https://github.com/macder/medusa-fulfillment-shippo.git"},"keywords":["medusa","medusa-plugin","medusa-fulfillment","medusa-shippo"],"devDependencies":{"@babel/cli":"^7.7.5","@babel/core":"^7.7.5","@babel/eslint-parser":"^7.15.8","@babel/node":"^7.7.4","@babel/plugin-proposal-class-properties":"^7.7.4","@babel/plugin-transform-classes":"^7.9.5","@babel/plugin-transform-instanceof":"^7.8.3","@babel/plugin-transform-runtime":"^7.7.6","@babel/preset-env":"^7.7.5","@babel/register":"^7.7.4","@babel/runtime":"^7.9.6","@faker-js/faker":"^7.3.0","client-sessions":"^0.8.0","copyfiles":"^2.4.1","cross-env":"^5.2.1","eslint":"^8.20.0","eslint-config-airbnb-base":"^15.0.0","eslint-config-prettier":"^8.3.0","eslint-plugin-import":"^2.26.0","eslint-plugin-prettier":"^4.0.0","jest":"^28.1.2","jest-extended":"2.0.0","medusa-test-utils":"^1.1.37","onchange":"^7.1.0"},"gitHead":"2955a52270daab0372d2f920c7cceb275133ab43","bugs":{"url":"https://github.com/macder/medusa-fulfillment-shippo/issues"},"homepage":"https://github.com/macder/medusa-fulfillment-shippo#readme","_id":"medusa-fulfillment-shippo@0.27.2","_nodeVersion":"16.15.1","_npmVersion":"8.11.0","dist":{"integrity":"sha512-hKSYmz8vdVJWyIAwCoeHYgYifmPTQj2HzJD1JFBB/VWNiy4hf/6AVFtwKVnXYOuEtSJakbFYEbnpXF9mHQyrIA==","shasum":"cf81aee1d5f446694734d6643e6a7e68dc9c5fbf","tarball":"https://registry.npmjs.org/medusa-fulfillment-shippo/-/medusa-fulfillment-shippo-0.27.2.tgz","fileCount":26,"unpackedSize":502867,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCa5N8P2fesYMzk7C3zzjdDiLlBp0epxUJCuiU8zym9ywIhAMHhhEGyQb9PBS+ODxcfneO/xCKksz2XDm0TsvcBQVZJ"}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJi7IaqACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmrhKg//ZynXGbtlfaygueoZnmExVlqJgFIBXvdrJArwDxzhli9duiD2\r\n0u9noFd/DdolET4mNMHhXLM7/JzBocC1LmgR1HS64C+1XPuU7yScnWsarM/n\r\nTnAGaUFdvjP9CWGnb3bElyvNErBQ6WItqgwTtLz6GZecHgM8Jx6RzZlqto6Q\r\n7Q4QKYU2VgVAyXZswFOLZxpEGg1JwqWFAmcZ4W7ARIQczauYbK2O65NEVsIQ\r\nkEYKGNf5RcGCgkWPUlNxt9liajZFt05txICOnFwWUK6/2e/tkontYTKUXT25\r\nYT3J5W0QW8SoLh8hEH5r0WmgI3u2vkNJkcaKWsDSWSPDonlIQV4PxfKVXJht\r\nOGE3uRwWpUcwx6kbWoQHk9UFkBC1pilaFsSFiN9okCGncF5raNw+e9J26cSH\r\nOl3uuaFRptrbiK+llTWe/DLNJgYtuuJ6lskmeolpwhkU0Q8Yi39s/EMDjwuV\r\nR21NW0sCXiG2jcJjW7i/uNNTSNgYqXSB95krQCfAfHZPjOAgvFCrYowpA+u7\r\nLpKEoBZwvl1aNzQvVNmaUS7k4MWV0vG8QAxtWUJoZ3HBlKZpdV6EFYRzOZuc\r\nx3+LykOsY3YlzOUVqttE40COHDSdi1AnGy9XREZv7/PxKEWbyUDfNqm9WpS8\r\nJIPBdqkoOJ1WQbmrSAiO2cTWRXcnsOpIp3s=\r\n=htax\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"macder","email":"maciej@derulski.com"},"directories":{},"maintainers":[{"name":"macder","email":"maciej@derulski.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/medusa-fulfillment-shippo_0.27.2_1659668138355_0.969629944230638"},"_hasShrinkwrap":false},"1.0.0-beta.0":{"name":"medusa-fulfillment-shippo","version":"1.0.0-beta.0","description":"Shippo fulfillment provider for medusa","author":{"name":"Maciej Derulski"},"license":"MIT","scripts":{"build":"babel src -d . --ignore **/__tests__,**/__mocks__,**/sandbox,**/sand.js,**/old-tests","prepare":"cross-env NODE_ENV=production npm run build","watch":"onchange -v src/** -- copyfiles {{file}} ../my-medusa-store","test":"jest --runInBand"},"dependencies":{"binpackingjs":"2.3.3","body-parser":"^1.19.0","express":"^4.17.1","express-rate-limit":"^6.4.0","medusa-core-utils":"^1.1.30","shippo":"git+https://github.com/macder/shippo-node-client.git#medusa-fulfillment-shippo"},"peerDependencies":{"medusa-interfaces":"1.x"},"repository":{"type":"git","url":"git+https://github.com/macder/medusa-fulfillment-shippo.git"},"keywords":["medusa","medusa-plugin","medusa-fulfillment","medusa-shippo"],"devDependencies":{"@babel/cli":"^7.7.5","@babel/core":"^7.7.5","@babel/eslint-parser":"^7.15.8","@babel/node":"^7.7.4","@babel/plugin-proposal-class-properties":"^7.7.4","@babel/plugin-transform-classes":"^7.9.5","@babel/plugin-transform-instanceof":"^7.8.3","@babel/plugin-transform-runtime":"^7.7.6","@babel/preset-env":"^7.7.5","@babel/register":"^7.7.4","@babel/runtime":"^7.9.6","@faker-js/faker":"^7.3.0","client-sessions":"^0.8.0","copyfiles":"^2.4.1","cross-env":"^5.2.1","eslint":"^8.20.0","eslint-config-airbnb-base":"^15.0.0","eslint-config-prettier":"^8.3.0","eslint-plugin-import":"^2.26.0","eslint-plugin-prettier":"^4.0.0","jest":"^28.1.2","jest-extended":"2.0.0","medusa-test-utils":"^1.1.37","onchange":"^7.1.0"},"readme":"# medusa-fulfillment-shippo\n\n[![CircleCI](https://dl.circleci.com/status-badge/img/gh/macder/medusa-fulfillment-shippo/tree/main.svg?style=shield)](https://dl.circleci.com/status-badge/redirect/gh/macder/medusa-fulfillment-shippo/tree/main)\n[![Codacy Badge](https://app.codacy.com/project/badge/Grade/5ca5e600f1574354a8056441f589ca80)](https://www.codacy.com/gh/macder/medusa-fulfillment-shippo/dashboard?utm_source=github.com\\&utm_medium=referral\\&utm_content=macder/medusa-fulfillment-shippo\\&utm_campaign=Badge_Grade)\n[![Codacy Badge](https://app.codacy.com/project/badge/Coverage/5ca5e600f1574354a8056441f589ca80)](https://www.codacy.com/gh/macder/medusa-fulfillment-shippo/dashboard?utm_source=github.com\\&utm_medium=referral\\&utm_content=macder/medusa-fulfillment-shippo\\&utm_campaign=Badge_Coverage)\n\n> :information\\_source: Requires Medusa 1.3.3^\n\nShippo fulfillment provider for Medusa Commerce.\n\nProvides fulfillment options using carrier service levels and user created service groups that can be used to create shipping options for profiles and regions.\n\nRates at checkout optimized with a [first-fit-decreasing (FFD)](https://en.wikipedia.org/wiki/First-fit-decreasing_bin_packing) bin packing algorithm.\n\nFulfillments create orders in shippo.\n\nSupports returns, exchanges, and claims.\n\n[Public interface](#public-interface) for rapid custom integration.\n\n[Eventbus payloading](#events) instead of arbitrary data assumption and storage.\n\n## Table of Contents\n\n*   [Getting Started](#getting-started)\n*   [Orders](#orders)\n*   [Packing Slips](#packing-slips)\n*   [Returns](#returns)\n    *   [Request](#request)\n*   [Swaps](#swaps)\n    *   [Create](#create)\n    *   [Fulfillment](#fulfillment)\n*   [Claims](#claims)\n    *   [Refund](#refund)\n    *   [Replace](#replace)\n    *   [Fulfillment](#fulfillment-1)\n*   [Rates at Checkout](#rates-at-checkout)\n    *   [Shipping Options in Shippo App](#setup-shipping-options-in-shippo-app)\n    *   [Assign Shipping Options to Regions in Medusa](#assign-shipping-options-to-regions-in-medusa)\n    *   [During Checkout](#during-checkout)\n    *   [Set rates for cart](#set-rates-for-cart)\n    *   [Add to Cart](#add-to-carlst)\n    *   [Help, adding a shipping method to cart throws an error](#help-adding-a-shipping-method-to-cart-throws-an-error)\n*   [Webhooks](#webhooks)\n*   [Public Interface](#public-interface)\n    *   [Account](#account)\n    *   [Order](#order)\n    *   [Package](#package)\n    *   [Packingslip](#packingslip)\n    *   [Rates](#rates)\n    *   [Track](#track)\n    *   [Transaction](#transaction)\n    *   [Client](#client)\n*   [Events](#events)\n*   [Shippo Node Client](#shippo-node-client)\n*   [Shipping Rates](#shipping-rates)\n*   [Limitations](#limitations)\n*   [Resources](#resources)\n\n## Getting started\n\nInstall:\n\n`> npm i medusa-fulfillment-shippo`\n\nAdd to medusa-config.js\n\n```javascript\n{\n  resolve: `medusa-fulfillment-shippo`,\n    options: {\n      api_key: SHIPPO_API_KEY,\n      weight_unit_type: 'g', // valid values: g, kg, lb, oz\n      dimension_unit_type: 'cm', // valid values: cm, mm, in\n      webhook_secret: '', // README section on webhooks before using!\n      webhook_test_mode: false\n    },\n}\n```\n\n## Orders\n\nCreating an order fulfillment makes a new order in shippo. An event is emitted with the response data and related internal ids.\n\n[Create a Subscriber](https://docs.medusajs.com/advanced/backend/subscribers/create-subscriber) to access the data.\n\n**Event:**\n`shippo.order_created`\n\n```javascript\n{\n  order_id: \"\",\n  fulfillment_id: \"\",\n  customer_id: \"\",\n  shippo_order: {...}\n}\n```\n\n### Retrieve\n\n```javascript\nawait shippoService.order.fetch(object_id)\n\nawait shippoService.order.fetchBy([\"fulfillment\", ful_id]\n\nawait shippoService.order.with([\"fulfillment\"]).fetch(object_id)\n```\n\n[See references](#order) for all methods\n\n## Packing Slips\n\n### Retrieve\n\n```javascript\nconst { object_id } = order\n\nawait shippoService.packingslip.fetch(object_id)\n\nawait shippoService.packingslip.fetchBy([\"fulfillment\"], ful_id)\n\nawait shippoService.packingslip.with([\"fulfillment\"]).fetch(object_id)\n```\n\n[See references](#packingslip) for all methods\n\n## Returns\n\n### Request\n\nInvoked when [Request a Return](https://docs.medusajs.com/api/admin/order/request-a-return) `return_shipping` has `provider: shippo`\n\nAttempts fetching an existing return label from shippo.\n\n**Event:**\n`shippo.return_requested`\n\n```javascript\n{\n  order: {...}, // return order\n  transaction: {...} // shippo transaction for return label OR null\n}\n```\n\n## Swaps\n\n### Create\n\nInvoked when [Create a Swap](https://docs.medusajs.com/api/admin/order/create-a-swap) `return_shipping` has `provider: shippo`\n\nAttempts fetching an existing return label from shippo.\n\n**Event:**\n`shippo.swap_created`\n\n```javascript\n{\n  order: {...}, // return order\n  transaction: {...} // shippo transaction for return label OR null\n}\n```\n\n### Fulfillment\n\nInvoked when [Create a Swap Fulfillment](https://docs.medusajs.com/api/admin/order/create-a-swap-fulfillment) `shipping_option` has `provider: shippo`\n\nCreates an order in shippo.\n\n**Event:**\n`shippo.replace_order_created`\n\n```javascript\n{\n  order_id: \"\",\n  fulfillment_id: \"\",\n  customer_id: \"\",\n  shippo_order: {...}\n}\n```\n\n## Claims\n\n### Refund\n\nInvoked when [Create a Claim](https://docs.medusajs.com/api/admin/order/create-a-claim) has `type: refund` and `return_shipping` has `provider: shippo`\n\nAttempts fetching an existing return label from shippo.\n\n**Event:**\n`shippo.claim_refund_created`\n\n```javascript\n{\n  order: {...}, // return order\n  transaction: {...} // shippo transaction for return label OR null\n}\n```\n\n### Replace\n\nInvoked when [Create a Claim](https://docs.medusajs.com/api/admin/order/create-a-claim) has `type: replace` and `return_shipping` has `provider: shippo`\n\nAttempts fetching an existing return label from shippo.\n\n**Event:**\n`shippo.claim_replace_created`\n\n```javascript\n{\n  order: {...}, // return order\n  transaction: {...} // shippo transaction for return label OR null\n}\n```\n\n### Fulfillment\n\nInvoked when [Create a Claim Fulfillment](https://docs.medusajs.com/api/admin/order/create-a-claim-fulfillment) `shipping_option` has `provider: shippo`\n\nCreates an order in shippo.\n\n**Event:**\n`shippo.replace_order_created`\n\n```javascript\n{\n  order_id: \"\",\n  fulfillment_id: \"\",\n  customer_id: \"\",\n  shippo_order: {...}\n}\n```\n\n## Rates at Checkout\n\nProvide customers with accurate shipping rates at checkout to reduce over and under charges. This plugin implements a first-fit-decreasing bin packing algorithm to choose an appropriate parcel for the items in a cart. Follow this guide to get setup and then optimize.\n\n### Setup Shipping Options in Shippo App\n\nLets assume shipping from Canada to customers in Canada and USA via “Standard” and “Express” options\n\nThis would require setting up 4 shipping options in Shippo (\\<https://apps.goshippo.com/settings/rates-at-checkout>)\n\n1.  Standard Shipping Canada\n2.  Express Shipping Canada\n3.  Standard Shipping USA\n4.  Express Shiping USA\n\nSet each shipping option to “Live rate” and assign *service(s)* to them\n\nFor example:\n\n*   Express Shipping Canada: *Canada Post XpressPost*\n*   Express Shipping USA: *Canada Post XpressPost USA*\n*   *…*\n\nFor more in-depth details see https://support.goshippo.com/hc/en-us/articles/4403207559963\n\n### Assign Shipping Options to Regions in Medusa\n\nCreate shipping options for regions as usual\n\n[See here for common issue](#help-adding-a-shipping-method-to-cart-throws-an-error)\n\n### Setup parcel templates\n\nCreate package templates in the [Shippo app settings](https://apps.goshippo.com/settings/packages)\n\nTo get most optimal results, it is recommended to create package templates for all your shipping boxes.\n\n### Verify product dimensions and weight\n\nIn your medusa store, make sure products have correct values for length, width, height, weight\n\n### During Checkout\n\n[Retrieve shipping options for cart](https://docs.medusajs.com/api/store/shipping-option/retrieve-shipping-options-for-cart) as usual and any `price_type: calculated` options belonging to `provider: shippo` will have `amount: Number`.\n\n**HTTP:**\n\n```plaintext\nGET /store/shipping-options/:cart_id\n```\n\n**Service:**\n\n```javascript\nconst shippingOptions = await shippingProfileService.fetchCartOptions(cart)\n```\n\nImplementation needs to consider rates only calculate if cart has items and complete shipping address. Otherwise `price_type: calculated` will have `amount: null`\n\nRetrieving only decorates the shipping options with rates for display purposes. They are stateless objects. Each retrieval will re-fetch rates from shippo's api and re-decorate the options.\n\n### Add to Cart\n\n[Add a Shipping Method](https://docs.medusajs.com/api/store/cart/add-a-shipping-method) and if  `shipping_option` has `price_type: calculated` the rate will be saved to the `shipping_method`\n\n**HTTP:**\n\n```plaintext\nPOST /store/carts/:id/shipping-methods\n --data '{\"option_id\":\"example_cart_option_id\"}'\n```\n\n### Raw rates\n\n```javascript\nawait shippoService.rates.for([\"cart\", id]).fetch()\n```\n\n### Help, adding a shipping method to cart throws an error\n\nThis is an issue with medusa-admin. Examine line 85 [`admin/src/domain/settings/regions/new-shipping.tsx`](https://github.com/medusajs/admin/blob/a33ed20214297ffdbd2383f809dddd4870f5dad9/src/domain/settings/regions/new-shipping.tsx#L85)\n\nOptions with `price_type: flat_rate` will not pass through [`fulFillmentProviderService.calculatePrice()`](https://docs.medusajs.com/references/services/classes/FulfillmentProviderService#calculateprice)\n\nmedusa-admin is still early phase software.\n\nWorkaround it, use the REST api directly, or patch the issue for now\n\nPossible interim solution:\n\n```javascript\nprice_type: (options[optionIndex].type === \"LIVE_RATE\") \n    ? \"calculated\" \n    : \"flat_rate\",\n```\n\n## Webhooks\n\n### Caution\n\nIncoming HTTP requests from Shippo to webhook endpoints lack authentication. No secret token, no signature in the request header, no bearer, nothing.\n\nBefore enabling webhooks, understand the risks of an open and insecure HTTP endpoint that consumes data, and how to mitigate this. Please DO NOT use this without SSL/TLS. [Whitelisting shippo IP's](https://groups.google.com/g/shippo-api-announce/c/1A6m6Snvypk) is a good idea. There are also intermediary third party services such as pipedream and hookdeck that can be used to relay requests.\n\nYou will also need to self generate a token and add it as a url query param. Ya I know… but it's better than nothing and it is encrypted over HTTPS\n\nThe flow at the code level is:\n\n1.  Webhook receives POST data\n2.  URL query token is verified\n3.  The request json gets verified by fetching the same object directly from shippo API, following these steps:\n    1.  Request body contains json claiming to be a shippo object. \n    2.  Ok, but lets fetch this object directly from Shippo's API\n    3.  If the fetch resolves to the object requested, then use that data instead of the untrusted input \n    4.  Otherwise throw a HTTP 500 and do nothing\n\n### Setup\n\nIn `.env` add `SHIPPO_WEBHOOK_SECRET=some_secret_string` \n\nAdd to `medusa-config.js`\n\n```javascript\nconst SHIPPO_API_KEY = process.env.SHIPPO_API_KEY\nconst SHIPPO_WEBHOOK_SECRET = process.env.SHIPPO_WEBHOOK_SECRET\n\n{\n  resolve: `medusa-fulfillment-shippo`,\n  options: {\n    api_key: SHIPPO_API_KEY,\n    weight_unit_type: 'g',\n    dimension_unit_type: 'cm',\n    webhook_secret: SHIPPO_WEBHOOK_SECRET,\n    webhook_test_mode: false    \n  },\n},\n```\n\n### Endpoints\n\nHooks need to be setup in [Shippo app settings](https://apps.goshippo.com/settings/api)\n\n**transaction\\_created**: `/hooks/shippo/transaction?token=SHIPPO_WEBHOOK_SECRET`\n\n**transaction\\_updated**: `/hooks/shippo/transaction?token=SHIPPO_WEBHOOK_SECRET`\n\n**track\\_updated**: `/hooks/shippo/track?token=SHIPPO_WEBHOOK_SECRET`\n\nThen send a sample. If everything is good you will see this in console:\n\n```shell\nProcessing shippo.received.transaction_created which has 0 subscribers\nProcessing shippo.rejected.transaction_created which has 0 subscribers\n```\n\nThis is the expected behaviour because the data could not be verified. Since it is a sample, when the plugin tried to verify the transaction by requesting the same object back directly from shippo api, it did not exist. It will NOT use input data beyond making the verification, so it gets rejected.\n\n### Test Mode\n\nTest mode bypasses input authenticity verification, i.e. it will use the untrusted input data instead of requesting the same data back from shippo.\n\nThis allows testing using data that does not exist in shippo.\n\nTo enable, set `webhook_test_mode: true` in `medusa-config.js` plugin options.\n\nRunning in test mode is a security risk, enable only for testing purposes.\n\n### transaction\\_created\n\n`/hooks/shippo/transaction?token=SHIPPO_WEBHOOK_SECRET`\n\nReceives shippo transaction object when label purchased\n\n*   Updates fulfillment to “shipped”\n*   Adds tracking number and link to fulfillment\n\n#### Events\n\n`shippo.transaction_created.shipment`\n\n```javascript\n{\n  order_id: \"\",\n  fulfillment_id: \"\",\n  transaction: {...}\n}\n```\n\n`shippo.transaction_created.return_label`\n\n```javascript\n{\n  order_id: \"\",\n  transaction: {...}\n}\n```\n\n### transaction\\_updated\n\n`/hooks/shippo/transaction?token=SHIPPO_WEBHOOK_SECRET`\n\nReceives shippo transaction object when transaction updated\n\n#### Events\n\n`shippo.transaction_updated.payload`\n\n```javascript\n{\n  order_id: \"\",\n  fulfillment_id: \"\",\n  transaction: {...}\n}\n```\n\n### track\\_updated\n\n`/hooks/shippo/track?token=SHIPPO_WEBHOOK_SECRET`\n\n#### Events\n\n`shippo.track_updated.payload`\n\n```javascript\n{\n  ...track\n}\n```\n\n## Public Interface\n\nReferences the declared public interface for client consumption, the [semver](https://semver.org/) \"Declared Public API\"\n\nAlthough there is nothing stopping you from accessing and using public methods behind the interface, be aware that those implementation details can and will change. The purpose of the interface is semver compliant stability.\n\n> Notice: (semver 0.x.x) - methods labeled `@experimental` have high probability of breaking changes\n\n### Getting Started\n\nDependency inject `shippoService` as you would with any other service\n\nFor guide, see [Using Custom Service](https://docs.medusajs.com/advanced/backend/services/create-service#using-your-custom-service)\n\n> Note:\n>\n> ```plaintext\n> order = shippo_order\n>\n> local_order = medusa_order\n> ```\n\n### Account\n\n`address`\n\n```javascript\nawait shippoService.account.address()\n```\n\n### Order\n\n`fetch(id)`\n\n```javascript\nawait shippoService.order.fetch(object_id)\n```\n\n`with([entity]).fetch(id)`\n\n```javascript\nawait shippoService.order.with([\"fulfillment\"]).fetch(object_id)\n```\n\n`fetchBy([entity, id])`\n\n```javascript\n/* @return {Promise.<object>} */\n\nawait shippoService.order.fetchBy([\"fulfillment\", id])\n```\n\n```javascript\n/* @return {Promise.<object[]>} */\n\nawait shippoService.order.fetchBy([\"local_order\", id])\n\nawait shippoService.order.fetchBy([\"claim\", id])\n\nawait shippoService.order.fetchBy([\"swap\", id])\n```\n\n`is([entity, id], attr).fetch()`\n\n```javascript\nawait shippoService.is([\"order\", id], \"replace\").fetch()\n```\n\n### Package\n\n`for([entity, id]).fetch()`\n\n```javascript\n// use parcel templates defined in shippo account\n\nawait shippoService.package.for([\"line_items\", [...lineItems]]).fetch()\n\nawait shippoService.package.for([\"cart\", id]).fetch()\n\nawait shippoService.package.for([\"local_order\", id]).fetch()\n\nawait shippoService.package.for([\"fulfillment\", id]).fetch()\n```\n\n```javascript\n// use any parcel templates \nconst packages = [\n  {\n    id: \"id123\",\n    name: \"My Package\",\n    length: \"40\",\n    width: \"30\",\n    height: \"30\",\n    weight: \"10000\", // max-weight\n  },\n  {...}\n]\n\nshippoService.package.set(\"boxes\", packages)\n\nawait shippoService.package.for([\"cart\", id]).get()\n...\n```\n\n### Packingslip\n\n`fetch(id)`\n\n```javascript\nconst { object_id } = order\n\nawait shippoService.packingslip.fetch(object_id)\n```\n\n`with([entity]).fetch(id)`\n\n```javascript\nawait shippoService.packingslip.with([\"fulfillment\"]).fetch(object_id)\n```\n\n`fetchBy([entity, id])`\n\n```javascript\n/* @return {Promise.<object>} */\n\nawait shippoService.packingslip.fetchBy([\"fulfillment\", id])\n\n```\n\n```javascript\n/* @return {Promise.<object[]>} */\n\nawait shippoService.packingslip.fetchBy([\"local_order\", id]) \n\nawait shippoService.packingslip.fetchBy([\"claim\", id]) \n\nawait shippoService.packingslip.fetchBy([\"swap\", id]) \n```\n\n### Rates\n\n`for([entity, id]).fetch(id)`\n\n```javascript\nawait shippoService.rates.for([\"cart\", id]).fetch()\n```\n\n### Track\n\n`fetch(carrier_enum, track_num)`\n\n```javascript\nawait shippoService.track.fetch(\"usps\", \"trackingnumber\")\n```\n\n`fetchBy([entity, id])`\n\n```javascript\nawait shippoService.track.fetchBy([\"fulfillment\", id])\n```\n\n### Transaction\n\n`fetch(id, {...args} = null)`\n\n```javascript\nawait shippoService.transaction.fetch(object_id)\n\nawait shippoService.transaction.fetch(object_id, { type: \"extended\" })\n```\n\n`fetchBy([entity, id], {...args} = null)`\n\n```javascript\nawait shippoService.transaction.fetchBy([\"local_order\", id])\n\nawait shippoService.transaction.fetchBy([\"local_order\", id], { type: \"extended\" })\n\nawait shippoService.transaction.fetchBy([\"fulfillment\", id])\n\nawait shippoService.transaction.fetchBy([\"fulfillment\", id], { type: \"extended\" })\n```\n\n`is([entity, id], attr).fetch()`\n\n```javascript\nawait shippoService.is([\"transaction\", id], \"return\").fetch()\n```\n\n### Client\n\n`shippo-node-client` ([forked](#shippo-node-client))\n\n```javascript\nconst client = shippoService.client \n```\n\n### Find\n\n`find(entity).for([entity, id])`\n\n```javascript\n/* @experimental */\n\nawait shippoService.find(\"fulfillment\").for([\"transaction\", id])\n\nawait shippoService.find(\"order\").for([\"transaction\", id])\n```\n\n## Events\n\nList of all events, their triggers, and expected payload for handlers\n\n[Subscribe to events](https://docs.medusajs.com/advanced/backend/subscribers/create-subscriber) to perform additional operations\n\nThese events only emit if the action pertains to `provider: shippo`\n\n### `shippo.order_created`\n\nTriggered when a new [fulfillment](https://docs.medusajs.com/api/admin/order/create-a-fulfillment) creates a shippo order.\n\n#### Payload\n\n```javascript\n{\n  order_id: \"\",\n  fulfillment_id: \"\",\n  customer_id: \"\",\n  shippo_order: {...}\n}\n```\n\n### `shippo.return_requested`\n\nTriggered when a [return is requested](https://docs.medusajs.com/api/admin/order/request-a-return)\n\nIf the return `ShippingMethod` has `provider: shippo` it attempts to find an existing return label in shippo.\n\n#### Payload\n\n```javascript\n{\n  order: {...}, // return order\n  transaction: {...} // shippo transaction for return label OR null\n}\n```\n\n### `shippo.swap_created`\n\nTriggered when a [swap is created](https://docs.medusajs.com/api/admin/order/create-a-swap)\n\nIf return `ShippingMethod` has `provider: shippo` it attempts to find an existing return label in shippo.\n\n#### Payload\n\n```javascript\n{\n  order: {...}, // return order\n  transaction: {...} // shippo transaction for return label OR null\n}\n```\n\n### `shippo.replace_order_created`\n\nTriggered when a [swap](https://docs.medusajs.com/api/admin/order/create-a-swap-fulfillment) or [claim](https://docs.medusajs.com/api/admin/order/create-a-claim-fulfillment) fulfillment is created.\n\nIf the `ShippingMethod` has `provider: shippo` a shippo order is created\n\n#### Payload\n\n```javascript\n{\n  order_id: \"\",\n  fulfillment_id: \"\",\n  customer_id: \"\",\n  shippo_order: {...}\n}\n```\n\n### `shippo.claim_refund_created`\n\nTriggered when a `type: refund` [claim is created](https://docs.medusajs.com/api/admin/order/create-a-claim)\n\nIf return `ShippingMethod` has `provider: shippo`, it attempts to find an existing return label in shippo\n\n#### Payload\n\n```javascript\n{\n  order: {...}, // return order\n  transaction: {...} // shippo transaction for return label OR null\n}\n```\n\n### `shippo.claim_replace_created`\n\nTriggered when a `type: replace` [claim is created](https://docs.medusajs.com/api/admin/order/create-a-claim)\n\nIf return `ShippingMethod` has `provider: shippo`, it attempts to find an existing return label in shippo\n\n#### Payload\n\n```javascript\n{\n  order: {...}, // return order\n  transaction: {...} // shippo transaction for return label OR null\n}\n```\n\n### `shippo.transaction_created.shipment`\n\nTriggered when the `transaction_created` webhook updates a `Fulfillment` status to `shipped`\n\n#### Payload\n\n```javascript\n{\n  order_id: \"\",\n  fulfillment_id: \"\",\n  transaction: {...}\n}\n```\n\n### `shippo.transaction_created.return_label`\n\nTriggered when the `transaction_created` webhook receives a return label transaction\n\n#### Payload\n\n```javascript\n{\n  order_id: \"\",\n  transaction: {...}\n}\n```\n\n### `shippo.transaction_updated.payload`\n\nTriggered when the `transaction_updated` webhook receives an updated transaction\n\n#### Payload\n\n```javascript\n{\n  order_id: \"\",\n  fulfillment_id: \"\",\n  transaction: {...}\n}\n```\n\n### `shippo.track_updated.payload`\n\nTriggered when the `track_updated` webhook receives an updated track\n\n#### Payload\n\n```javascript\n{\n  ...track\n}\n```\n\n## Shippo Node Client\n\nThis plugin is using a forked version of the official shippo-node-client. \n\nThe fork adds support for the following endpoints:\n\n*   live-rates\n*   service-groups\n*   user-parcel-templates\n*   orders/:id/packingslip\n*   ...\n*   Doc is WIP\n\nThe client is exposed on the `useClient` property of `shippoClientService`\n\n```javascript\nconst client = shippoService.client\n\n// Forks additional methods\nawait client.liverates.create({...parms})\nawait client.userparceltemplates.list()\nawait client.userparceltemplates.retrieve(id)\nawait client.servicegroups.list()\nawait client.servicegroups.create({...params})\n...\n```\n\nSee [Shippo API Reference](https://goshippo.com/docs/reference) for methods\n\n[Official client](https://github.com/goshippo/shippo-node-client)\n\n[Forked client](https://github.com/macder/shippo-node-client/tree/medusa)\n\n## Shipping Rates\n\nDimensional weight is a major factor in determining costs. Estimates are frivolous when based on inaccurate parcel volume and weight. This raises a challenging problem in computing which parcel box to use. While this is simple for single items, it becomes increasingly difficult when packing multiple items of various dimensions. It is a classic [bin packing problem](https://en.wikipedia.org/wiki/Bin_packing_problem), [NP-Hard](https://en.wikipedia.org/wiki/NP-hardness) stuff.\n\nThis plugin uses [binpackingjs](https://github.com/olragon/binpackingjs) which provides a [first-fit](https://en.wikipedia.org/wiki/First-fit_bin_packing) algorithm. Additional logic is wrapped around it to get a more optimized [first-fit-decreasing](https://en.wikipedia.org/wiki/First-fit-decreasing_bin_packing) algorithm. In order for this to be effective, parcel templates need to be setup in the Shippo account, and all products in medusa must have values for length, width, height, and weight.\n\n### Accuracy of Rates\n\nShipping rate estimates are calculated by third parties using data you supply. The onus is on the store admin to supply accurate data values about their products and packaging. This plugin does its best to use this data to create optimized requests, within reason and scope, to retrieve rates from Shippo. The intent is to provide a cost-cutting solution, but there is no one-size-fits all.\n\nAssuming accurate data for product dimensions, weight, and package templates in shippo reflect a carefully planned boxing strategy, expect reasonably accurate rates for single item and multi-item fulfillment's that fit in a single parcel. Multi parcel for rates at checkout is currently not supported (future consideration). If items cannot fit into a single box, the default package template set in [Shippo app settings](https://apps.goshippo.com/settings/rates-at-checkout) is used.\n\n## Limitations\n\nNo support for customs declarations. Planned for future release.\n\n## Resources\n\nMedusa Docs\\\nhttps://docs.medusajs.com/\n\nMedusa Shipping Architecture:\\\nhttps://docs.medusajs.com/advanced/backend/shipping/overview\n\nShippo API\\\nhttps://goshippo.com/docs/intro\\\nhttps://goshippo.com/docs/reference\n","readmeFilename":"README.md","gitHead":"f568ced8653cffb6373b8c655db94b6a82abee07","bugs":{"url":"https://github.com/macder/medusa-fulfillment-shippo/issues"},"homepage":"https://github.com/macder/medusa-fulfillment-shippo#readme","_id":"medusa-fulfillment-shippo@1.0.0-beta.0","_nodeVersion":"16.15.1","_npmVersion":"8.11.0","dist":{"integrity":"sha512-9j60QPUHwUri8swiKkYeHzuxBaL72teXTvVtKotTySQgJzkjaj13kBeaJu0TRCz2B/pc9/32A6eMamo3iRwnoQ==","shasum":"32a0cda33f9f463df3a24bc8a3e6cbebee5aef05","tarball":"https://registry.npmjs.org/medusa-fulfillment-shippo/-/medusa-fulfillment-shippo-1.0.0-beta.0.tgz","fileCount":26,"unpackedSize":503774,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIEO6JrxD9z6m4yXlANfOCoZuQC1LWKLwRam1tlszsTEjAiB6t2yG/o1PCmMGghwf3hiHSed9zebBrk5D54TGDacp7Q=="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJi8epKACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmoljw//VLKRp0goUPeAerFKLGv0ooPqb0xvn4Z0RY+QIq16tmzB0mlJ\r\nNoZhT7uO/Iextq77sfFiUPFcKTyWPAapLDZvhwXo4Opx98qV8U6B9SIFzgnK\r\nbEUCkUA6b1hh5e/U1Z+jJD8J6GUFw6NFdUIUqhlgUaJDgR46GVXqDUQCq5va\r\neeiDTPnNyU+q66ooT4F6AsBxG/0Abgx0EPcTcPdXewnN6XGJMu4w3ssDdMqS\r\n1Jfn5ZqmkBvOYN5/W3wL58f/WD+akDYWOHz3B6C2MFbbDLtdK0ZKK7NNxqvK\r\n6OwXjPdRpuhAAnDLpGFsluskypVrWMpEWNWEb0ON7FnjXDzgvPNQKVvhQ0mb\r\n3CHTYDRyNAjzHL/KC+Ko4eOaq7p4a4ZookVL2ZqKoUreW2JMY/1nhCSn1yjT\r\nZu6XW7poUIdTaIrAtBi6UmEWCy0V0M2e3oh+WCDs3qaMrYFF2jjHf/4aOzIO\r\nz6csGZO6igH3LvYRBkhtZSgnT52H3ZV6IETaQ6x/okLqpo7sy/doFGEri4eU\r\n8RiXKxG0vfGioweNaJqR2+26JD3Woq9Cf1cs0z8SFiP6FJI+LetCcQfn+WnP\r\nIDi5jQ0CAlab9NpzTyz/SRNo7y/Hv91/KWLL/xBdsylipD7p6tNLldG2e5/T\r\ntTyVlGPKQCthEDoqbiiFXVzPB/hxX9g2Wjg=\r\n=/VR6\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"macder","email":"maciej@derulski.com"},"directories":{},"maintainers":[{"name":"macder","email":"maciej@derulski.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/medusa-fulfillment-shippo_1.0.0-beta.0_1660021322526_0.37120968628116047"},"_hasShrinkwrap":false},"0.27.3":{"name":"medusa-fulfillment-shippo","version":"0.27.3","description":"Shippo fulfillment provider for medusa","author":{"name":"Maciej Derulski"},"license":"MIT","scripts":{"build":"babel src -d . --ignore **/__tests__,**/__mocks__,**/sandbox,**/sand.js,**/old-tests","prepare":"cross-env NODE_ENV=production npm run build","watch":"onchange -v src/** -- copyfiles {{file}} ../my-medusa-store","test":"jest"},"dependencies":{"@macder/shippo":"^1.0.0","@macder/binpackingjs":"^2.3.2","body-parser":"^1.19.0","express":"^4.17.1","express-rate-limit":"^6.4.0","medusa-core-utils":"^1.1.30"},"peerDependencies":{"medusa-interfaces":"1.x"},"repository":{"type":"git","url":"git+https://github.com/macder/medusa-fulfillment-shippo.git"},"keywords":["medusa","medusa-plugin","medusa-fulfillment","medusa-shippo"],"devDependencies":{"@babel/cli":"^7.7.5","@babel/core":"^7.7.5","@babel/eslint-parser":"^7.15.8","@babel/node":"^7.7.4","@babel/plugin-proposal-class-properties":"^7.7.4","@babel/plugin-transform-classes":"^7.9.5","@babel/plugin-transform-instanceof":"^7.8.3","@babel/plugin-transform-runtime":"^7.7.6","@babel/preset-env":"^7.7.5","@babel/register":"^7.7.4","@babel/runtime":"^7.9.6","@faker-js/faker":"^7.3.0","client-sessions":"^0.8.0","copyfiles":"^2.4.1","cross-env":"^5.2.1","eslint":"^8.20.0","eslint-config-airbnb-base":"^15.0.0","eslint-config-prettier":"^8.3.0","eslint-plugin-import":"^2.26.0","eslint-plugin-prettier":"^4.0.0","jest":"^28.1.2","jest-extended":"2.0.0","medusa-test-utils":"^1.1.37","onchange":"^7.1.0"},"gitHead":"80cdfe1660bb12a18c31726079a4ea3c6eea888e","bugs":{"url":"https://github.com/macder/medusa-fulfillment-shippo/issues"},"homepage":"https://github.com/macder/medusa-fulfillment-shippo#readme","_id":"medusa-fulfillment-shippo@0.27.3","_nodeVersion":"16.15.1","_npmVersion":"8.11.0","dist":{"integrity":"sha512-1yp8qmj/f8wO7uEXTaWqci1pxBN8JwraNuau7dreBHimvMNAG69Y8hy3/l59KQFTU6HqukbEFIPXWty41BtaTw==","shasum":"6feb4f2ff9bdae95decef3b7944dbfcf6051b333","tarball":"https://registry.npmjs.org/medusa-fulfillment-shippo/-/medusa-fulfillment-shippo-0.27.3.tgz","fileCount":26,"unpackedSize":502885,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEV3/OPdUSHJmCMvEPjK0g3ECpDTuG8Smqoy9ha+GG8IAiEA1JCwuUAznaKs2ibUoWxTmD8IVMs0wyR06qpbwArxZK4="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJi8f+mACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmrjRg/5AJuxB8ADyfzuXQkq5+ATmaeeN2AXDem7fQQ37LQJsdAiz3UN\r\nMF+94S1LTESdT8IYhmmaqLl7QRuHUr6o6LBt4zhuvULFb3cH4F1hATPPx9To\r\nuQOcmF01sdey/RXnh3TZCpOgvOO4qGSDfEwxzJ2s8PeM2ncm52X5U0buNZwx\r\nAVyTt4uxSyNrU5ofsU1qbyfzTM0jwZq2Xn6Jr3gzf3jCvQ5BfYr+ut/HBrLp\r\nZwBKNppGa9cpBTqtdIToCQm5Xcgu0hZvVpBrVM2KZQz0jB4ZkBDLLJIEJ6+j\r\nTo7ccY420UUlYDySZX0HCxwlJA6kzc+oHl/rAq6xb+4jES1jugq5JQBrnA1F\r\nRtsC5Oc9IKWRH8VVInYzX4PU9Bj0WFO/ik9lOxXtlDJTWLAMaF7Wn1e0qQGq\r\n+d7M788cXc7WsCs02yMTO3J0AAe7bapfWSIorMDlKs9WFMceJ6mOYHKvYQ6a\r\ngdDJ38AQJxstjbYjGN8uJ+axtkh7Wv89FKNZ5bG2lxP+BF2PfJ5B7xRqMmYN\r\nfFYZJkSgwpWpwqr7bDaq0mMDsRD3YoZciy8S1ti3g8CSbLJt7mE1gPlLcE59\r\nb+2CuqzK10USz5FgtqDV22jv1TQoCslFINjhhKgaKBvxyeDaPXH5v0i4ZFsY\r\na81iKJ4zrB4RX3WkergqyABeA/vMxyCd7kE=\r\n=kRYh\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"macder","email":"maciej@derulski.com"},"directories":{},"maintainers":[{"name":"macder","email":"maciej@derulski.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/medusa-fulfillment-shippo_0.27.3_1660026790537_0.8883799826133805"},"_hasShrinkwrap":false},"0.28.0":{"name":"medusa-fulfillment-shippo","version":"0.28.0","description":"Shippo fulfillment provider for medusa","author":{"name":"Maciej Derulski"},"license":"MIT","scripts":{"build":"babel src -d . --ignore **/__tests__,**/__mocks__,**/sandbox,**/sand.js,**/old-tests","prepare":"cross-env NODE_ENV=production npm run build","watch":"onchange -v src/** -- copyfiles {{file}} ../my-medusa-store","test":"jest --runInBand"},"dependencies":{"@macder/shippo":"^1.0.0","@macder/binpackingjs":"^2.3.2","body-parser":"^1.19.0","express":"^4.17.1","express-rate-limit":"^6.4.0","medusa-core-utils":"^1.1.30"},"peerDependencies":{"medusa-interfaces":"1.x"},"repository":{"type":"git","url":"git+https://github.com/macder/medusa-fulfillment-shippo.git"},"keywords":["medusa","medusa-plugin","medusa-fulfillment","medusa-shippo"],"devDependencies":{"@babel/cli":"^7.7.5","@babel/core":"^7.7.5","@babel/eslint-parser":"^7.15.8","@babel/node":"^7.7.4","@babel/plugin-proposal-class-properties":"^7.7.4","@babel/plugin-transform-classes":"^7.9.5","@babel/plugin-transform-instanceof":"^7.8.3","@babel/plugin-transform-runtime":"^7.7.6","@babel/preset-env":"^7.7.5","@babel/register":"^7.7.4","@babel/runtime":"^7.9.6","@faker-js/faker":"^7.3.0","client-sessions":"^0.8.0","copyfiles":"^2.4.1","cross-env":"^5.2.1","eslint":"^8.20.0","eslint-config-airbnb-base":"^15.0.0","eslint-config-prettier":"^8.3.0","eslint-plugin-import":"^2.26.0","eslint-plugin-prettier":"^4.0.0","jest":"^28.1.2","jest-extended":"2.0.0","medusa-test-utils":"^1.1.37","onchange":"^7.1.0"},"gitHead":"c451409c181cc40c108ebb73f5e62c9fb0f47b30","bugs":{"url":"https://github.com/macder/medusa-fulfillment-shippo/issues"},"homepage":"https://github.com/macder/medusa-fulfillment-shippo#readme","_id":"medusa-fulfillment-shippo@0.28.0","_nodeVersion":"16.15.1","_npmVersion":"8.11.0","dist":{"integrity":"sha512-WoFXDCMQokLONtcCBxJgsyvGb2NFC0rvnAYyVOpjenyh9F55sdDU6Ot8VBYj8egJn4/cbs4eQ4RTwg5KiCB/wg==","shasum":"279dc587ad95434afc950596dad91698fb2bdc2d","tarball":"https://registry.npmjs.org/medusa-fulfillment-shippo/-/medusa-fulfillment-shippo-0.28.0.tgz","fileCount":26,"unpackedSize":482753,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEi12cVc3BfEM85xcFoCeArw+XT+FvRVR6K5YpvZ6XbvAiEArVKBwI3SYuBOuKCxQR8nUR2kmZUO8Ub2hvSKao0EHw8="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJi8t/LACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmoFdA//bm88q5iZy+vbSfaTSsP5BGdmI1vJvrEdvcQHIBAvjI6BS8Zu\r\nVNmZ+w7YkHWTGe/3LUWl7Ghl8gE2PSx5x3IytO8IgQTWTCVxw4G64DrvuvYF\r\nn+6GBvFoF0+fCfQmolEKzJijm4mgBXeJ/nPvYmK8Qbq6yBVO4SJfmcUHTAGu\r\nKI7L2Mm0j3W/NRCJD/PYJOaSNB9oCch5xkxzSNjyd2tNcvXx8BDctktxxlVX\r\ncaHcCtu1pR6ZPvarWCPEZU3PXiJSrqBKahuztka5CuqFfbTnrOlTwfnZzAMY\r\nrWKQNriu9/jEw2CEjgq3WXtmABu19Fb8zmhhl3xF5TgFBqZsjq7Su50iAMAY\r\nSKSb815GuAU5OZ/CB6+fpnzVs44kkGAeciSRHvAOrJevDtTLv35z/gZmULEk\r\noez7X6Am4qoGd/sjnmRft27X9iIm8vVOtvpo99qs4zw6H0CsKOkDqLhswUqZ\r\nq0Mk6nHULn4ejd19NUwajuGy7cWmGW5x51v46eExJ25GnteRL93sIRG4g0IX\r\ngHi2t1Wwo3bW85oFdvsLxkHHM90XZmuy5W85+jFAMHkEYSoVIGkvRV5kitjL\r\n9fSaNb/U5ItnUzNeqmgt4GwmiWWiipehEmOsL8CtR4sx2lOojAc4yQG3w584\r\nQVk5VXdZ5CJCaHnZ6jazQWcir4FWwEQhxMk=\r\n=fVnu\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"macder","email":"maciej@derulski.com"},"directories":{},"maintainers":[{"name":"macder","email":"maciej@derulski.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/medusa-fulfillment-shippo_0.28.0_1660084170767_0.09706409855266518"},"_hasShrinkwrap":false},"0.28.1":{"name":"medusa-fulfillment-shippo","version":"0.28.1","description":"Shippo fulfillment provider for medusa","author":{"name":"Maciej Derulski"},"license":"MIT","scripts":{"build":"babel src -d . --ignore **/__tests__,**/__mocks__,**/sandbox,**/sand.js,**/old-tests","prepare":"cross-env NODE_ENV=production npm run build","watch":"onchange -v src/** -- copyfiles {{file}} ../my-medusa-store","test":"jest --runInBand"},"dependencies":{"@macder/shippo":"^1.0.0","@macder/binpackingjs":"^2.3.2","body-parser":"^1.19.0","express":"^4.17.1","express-rate-limit":"^6.4.0","medusa-core-utils":"^1.1.30"},"peerDependencies":{"medusa-interfaces":"1.x"},"repository":{"type":"git","url":"git+https://github.com/macder/medusa-fulfillment-shippo.git"},"keywords":["medusa","medusa-plugin","medusa-fulfillment","medusa-shippo"],"devDependencies":{"@babel/cli":"^7.7.5","@babel/core":"^7.7.5","@babel/eslint-parser":"^7.15.8","@babel/node":"^7.7.4","@babel/plugin-proposal-class-properties":"^7.7.4","@babel/plugin-transform-classes":"^7.9.5","@babel/plugin-transform-instanceof":"^7.8.3","@babel/plugin-transform-runtime":"^7.7.6","@babel/preset-env":"^7.7.5","@babel/register":"^7.7.4","@babel/runtime":"^7.9.6","@faker-js/faker":"^7.3.0","client-sessions":"^0.8.0","copyfiles":"^2.4.1","cross-env":"^5.2.1","eslint":"^8.20.0","eslint-config-airbnb-base":"^15.0.0","eslint-config-prettier":"^8.3.0","eslint-plugin-import":"^2.26.0","eslint-plugin-prettier":"^4.0.0","jest":"^28.1.2","jest-extended":"2.0.0","medusa-test-utils":"^1.1.37","onchange":"^7.1.0"},"gitHead":"151fddbca207741aff0b7851f9392fd9531eba81","bugs":{"url":"https://github.com/macder/medusa-fulfillment-shippo/issues"},"homepage":"https://github.com/macder/medusa-fulfillment-shippo#readme","_id":"medusa-fulfillment-shippo@0.28.1","_nodeVersion":"16.15.1","_npmVersion":"8.11.0","dist":{"integrity":"sha512-kEXsQkRZyvGOuNudFdWmpLXLnBJPK3e0k2rBgLm811GLasQea1j7TZAU8UhFFK7P05AGbLy88hzkSIUv3ZhwLw==","shasum":"5d1baa8ab7a0450e19b35dfbb3a16bfbcbd0b24f","tarball":"https://registry.npmjs.org/medusa-fulfillment-shippo/-/medusa-fulfillment-shippo-0.28.1.tgz","fileCount":26,"unpackedSize":482997,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIENXHPto4L1Auuw0kowpEq/Bg4RwpmAfXWAYMS+JIJ+WAiBxtaEUdFVo2wwQyoOYqAlEvDND0j66FjN5wZoCKUp9xQ=="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJi8unIACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmrIZw/+Ice2eFquvJJy87otoAtLp1eAw2pbYdvbLfmJ1XyIehMdp1+j\r\nVjdi0EgAcG6/E5cQ4PPBeWNY1KhFQHMXxx8AI/vOlthO43is90rGgsLIsnLG\r\nb5cEJGZ7Q26aabe7T9ZOBB0w3B3gKFfDWWLz9Aao4M+GTg8CdClWuLcub8aT\r\nDaJ5UO8W35aGzUhmz5kpclUYG6/A/yKYSjUHudRhXi3vOJgRcbI54Ed81ebJ\r\nf9bsIsFslnmKoyHs2+/g+zqmtgxbRSR8NQAX+M0QknvlxEqhu8/VhP+84w8h\r\nrFSwQHOpnY+LM9fKsCqWJcgnLyvUfZF6HIkTEQe1AtbOaI9fjeQYLQH+dzzN\r\nf7xVfv/XjWz1OFTrq8buf3Oq8cBidLrTVsBNKOgvKrujKYau6HSSJ4LD8rB+\r\nO8gbvsZX/K7amJNOCDHiLRAf9TGeMOx3oOGhO9DYXpk69aO35h9Es3dm6X7I\r\nHk2VqaIOAF/NaXQHGBkaKjIMeypRas+nX8Vdnw9ZIpDCtDgd1bFNWuE6JjMz\r\n7/favhfkrPSUJiy+4e2gXTUO/BVt6Zx9GORazOZAmg6DGJBwtw85SxwPm3z0\r\nHmzqw96cd299zkhIipjXa7RnrIqTtPBk2AZjGOWY6lIIj6zEiuh287ipGe2r\r\nNZeWRoQy/QTTYkeAtbOzmm7b4Ju7af/5zjs=\r\n=SVN1\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"macder","email":"maciej@derulski.com"},"directories":{},"maintainers":[{"name":"macder","email":"maciej@derulski.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/medusa-fulfillment-shippo_0.28.1_1660086727880_0.40694767393492826"},"_hasShrinkwrap":false},"1.0.0-beta.1":{"name":"medusa-fulfillment-shippo","version":"1.0.0-beta.1","description":"Shippo fulfillment provider for medusa","author":{"name":"Maciej Derulski"},"license":"MIT","scripts":{"build":"babel src -d . --ignore **/__tests__,**/__mocks__,**/sandbox,**/sand.js,**/old-tests","prepare":"cross-env NODE_ENV=production npm run build","watch":"onchange -v src/** -- copyfiles {{file}} ../my-medusa-store","test":"jest --runInBand"},"dependencies":{"@macder/shippo":"^1.0.0","@macder/binpackingjs":"^2.3.2","body-parser":"^1.19.0","express":"^4.17.1","express-rate-limit":"^6.4.0","medusa-core-utils":"^1.1.30"},"peerDependencies":{"medusa-interfaces":"1.x"},"repository":{"type":"git","url":"git+https://github.com/macder/medusa-fulfillment-shippo.git"},"keywords":["medusa","medusa-plugin","medusa-fulfillment","medusa-shippo"],"devDependencies":{"@babel/cli":"^7.7.5","@babel/core":"^7.7.5","@babel/eslint-parser":"^7.15.8","@babel/node":"^7.7.4","@babel/plugin-proposal-class-properties":"^7.7.4","@babel/plugin-transform-classes":"^7.9.5","@babel/plugin-transform-instanceof":"^7.8.3","@babel/plugin-transform-runtime":"^7.7.6","@babel/preset-env":"^7.7.5","@babel/register":"^7.7.4","@babel/runtime":"^7.9.6","@faker-js/faker":"^7.3.0","client-sessions":"^0.8.0","copyfiles":"^2.4.1","cross-env":"^5.2.1","eslint":"^8.20.0","eslint-config-airbnb-base":"^15.0.0","eslint-config-prettier":"^8.3.0","eslint-plugin-import":"^2.26.0","eslint-plugin-prettier":"^4.0.0","jest":"^28.1.2","jest-extended":"2.0.0","medusa-test-utils":"^1.1.37","onchange":"^7.1.0"},"readme":"# medusa-fulfillment-shippo\n\n[![CircleCI](https://dl.circleci.com/status-badge/img/gh/macder/medusa-fulfillment-shippo/tree/main.svg?style=shield)](https://dl.circleci.com/status-badge/redirect/gh/macder/medusa-fulfillment-shippo/tree/main)\n[![Codacy Badge](https://app.codacy.com/project/badge/Grade/5ca5e600f1574354a8056441f589ca80)](https://www.codacy.com/gh/macder/medusa-fulfillment-shippo/dashboard?utm_source=github.com\\&utm_medium=referral\\&utm_content=macder/medusa-fulfillment-shippo\\&utm_campaign=Badge_Grade)\n[![Codacy Badge](https://app.codacy.com/project/badge/Coverage/5ca5e600f1574354a8056441f589ca80)](https://www.codacy.com/gh/macder/medusa-fulfillment-shippo/dashboard?utm_source=github.com\\&utm_medium=referral\\&utm_content=macder/medusa-fulfillment-shippo\\&utm_campaign=Badge_Coverage)\n\n> :information\\_source: Requires Medusa 1.3.5^\n\nShippo fulfillment provider for Medusa Commerce.\n\nProvides fulfillment options using carrier service levels and user created service groups that can be used to create shipping options for profiles and regions.\n\nRates at checkout optimized with a [first-fit-decreasing (FFD)](https://en.wikipedia.org/wiki/First-fit-decreasing_bin_packing) bin packing algorithm.\n\nFulfillments create orders in shippo.\n\nSupports returns, exchanges, and claims.\n\n[Public interface](#public-interface) for rapid custom integration.\n\n[Eventbus payloading](#events) instead of arbitrary data assumption and storage.\n\n## Table of Contents\n\n*   [Getting Started](#getting-started)\n*   [Orders](#orders)\n*   [Packing Slips](#packing-slips)\n*   [Returns](#returns)\n    *   [Request](#request)\n*   [Swaps](#swaps)\n    *   [Create](#create)\n    *   [Fulfillment](#fulfillment)\n*   [Claims](#claims)\n    *   [Refund](#refund)\n    *   [Replace](#replace)\n    *   [Fulfillment](#fulfillment-1)\n*   [Rates at Checkout](#rates-at-checkout)\n    *   [Shipping Options in Shippo App](#setup-shipping-options-in-shippo-app)\n    *   [Assign Shipping Options to Regions in Medusa](#assign-shipping-options-to-regions-in-medusa)\n    *   [During Checkout](#during-checkout)\n    *   [Set rates for cart](#set-rates-for-cart)\n    *   [Add to Cart](#add-to-carlst)\n    *   [Help, adding a shipping method to cart throws an error](#help-adding-a-shipping-method-to-cart-throws-an-error)\n*   [Webhooks](#webhooks)\n*   [Public Interface](#public-interface)\n    *   [Account](#account)\n    *   [Order](#order)\n    *   [Package](#package)\n    *   [Packingslip](#packingslip)\n    *   [Track](#track)\n    *   [Transaction](#transaction)\n    *   [Client](#client)\n*   [Events](#events)\n*   [Shippo Node Client](#shippo-node-client)\n*   [Shipping Rates](#shipping-rates)\n*   [Limitations](#limitations)\n*   [Resources](#resources)\n\n## Getting started\n\nInstall:\n\n`> npm i medusa-fulfillment-shippo`\n\nAdd to medusa-config.js\n\n```javascript\n{\n  resolve: `medusa-fulfillment-shippo`,\n    options: {\n      api_key: SHIPPO_API_KEY,\n      weight_unit_type: 'g', // valid values: g, kg, lb, oz\n      dimension_unit_type: 'cm', // valid values: cm, mm, in\n      webhook_secret: '', // README section on webhooks before using!\n      webhook_test_mode: false\n    },\n}\n```\n\n## Orders\n\nCreating an order fulfillment makes a new order in shippo. An event is emitted with the response data and related internal ids.\n\n[Create a Subscriber](https://docs.medusajs.com/advanced/backend/subscribers/create-subscriber) to access the data.\n\n**Event:**\n`shippo.order_created`\n\n```javascript\n{\n  order_id: \"\",\n  fulfillment_id: \"\",\n  customer_id: \"\",\n  shippo_order: {...}\n}\n```\n\n### Retrieve\n\n```javascript\nawait shippoService.order.fetch(object_id)\n\nawait shippoService.order.fetchBy([\"fulfillment\", ful_id]\n\nawait shippoService.order.with([\"fulfillment\"]).fetch(object_id)\n```\n\n[See references](#order) for all methods\n\n## Packing Slips\n\n### Retrieve\n\n```javascript\nconst { object_id } = order\n\nawait shippoService.packingslip.fetch(object_id)\n\nawait shippoService.packingslip.fetchBy([\"fulfillment\"], ful_id)\n\nawait shippoService.packingslip.with([\"fulfillment\"]).fetch(object_id)\n```\n\n[See references](#packingslip) for all methods\n\n## Returns\n\n### Request\n\nInvoked when [Request a Return](https://docs.medusajs.com/api/admin/order/request-a-return) `return_shipping` has `provider: shippo`\n\nAttempts fetching an existing return label from shippo.\n\n**Event:**\n`shippo.return_requested`\n\n```javascript\n{\n  order: {...}, // return order\n  transaction: {...} // shippo transaction for return label OR null\n}\n```\n\n## Swaps\n\n### Create\n\nInvoked when [Create a Swap](https://docs.medusajs.com/api/admin/order/create-a-swap) `return_shipping` has `provider: shippo`\n\nAttempts fetching an existing return label from shippo.\n\n**Event:**\n`shippo.swap_created`\n\n```javascript\n{\n  order: {...}, // return order\n  transaction: {...} // shippo transaction for return label OR null\n}\n```\n\n### Fulfillment\n\nInvoked when [Create a Swap Fulfillment](https://docs.medusajs.com/api/admin/order/create-a-swap-fulfillment) `shipping_option` has `provider: shippo`\n\nCreates an order in shippo.\n\n**Event:**\n`shippo.replace_order_created`\n\n```javascript\n{\n  order_id: \"\",\n  fulfillment_id: \"\",\n  customer_id: \"\",\n  shippo_order: {...}\n}\n```\n\n## Claims\n\n### Refund\n\nInvoked when [Create a Claim](https://docs.medusajs.com/api/admin/order/create-a-claim) has `type: refund` and `return_shipping` has `provider: shippo`\n\nAttempts fetching an existing return label from shippo.\n\n**Event:**\n`shippo.claim_refund_created`\n\n```javascript\n{\n  order: {...}, // return order\n  transaction: {...} // shippo transaction for return label OR null\n}\n```\n\n### Replace\n\nInvoked when [Create a Claim](https://docs.medusajs.com/api/admin/order/create-a-claim) has `type: replace` and `return_shipping` has `provider: shippo`\n\nAttempts fetching an existing return label from shippo.\n\n**Event:**\n`shippo.claim_replace_created`\n\n```javascript\n{\n  order: {...}, // return order\n  transaction: {...} // shippo transaction for return label OR null\n}\n```\n\n### Fulfillment\n\nInvoked when [Create a Claim Fulfillment](https://docs.medusajs.com/api/admin/order/create-a-claim-fulfillment) `shipping_option` has `provider: shippo`\n\nCreates an order in shippo.\n\n**Event:**\n`shippo.replace_order_created`\n\n```javascript\n{\n  order_id: \"\",\n  fulfillment_id: \"\",\n  customer_id: \"\",\n  shippo_order: {...}\n}\n```\n\n## Rates at Checkout\n\nProvide customers with accurate shipping rates at checkout to reduce over and under charges. This plugin implements a first-fit-decreasing bin packing algorithm to choose an appropriate parcel for the items in a cart. Follow this guide to get setup and then optimize.\n\n### Setup Shipping Options in Shippo App\n\nLets assume shipping from Canada to customers in Canada and USA via “Standard” and “Express” options\n\nThis would require setting up 4 shipping options in Shippo (\\<https://apps.goshippo.com/settings/rates-at-checkout>)\n\n1.  Standard Shipping Canada\n2.  Express Shipping Canada\n3.  Standard Shipping USA\n4.  Express Shiping USA\n\nSet each shipping option to “Live rate” and assign *service(s)* to them\n\nFor example:\n\n*   Express Shipping Canada: *Canada Post XpressPost*\n*   Express Shipping USA: *Canada Post XpressPost USA*\n*   *…*\n\nFor more in-depth details see https://support.goshippo.com/hc/en-us/articles/4403207559963\n\n### Assign Shipping Options to Regions in Medusa\n\nCreate shipping options for regions as usual\n\n[See here for common issue](#help-adding-a-shipping-method-to-cart-throws-an-error)\n\n### Setup parcel templates\n\nCreate package templates in the [Shippo app settings](https://apps.goshippo.com/settings/packages)\n\nTo get most optimal results, it is recommended to create package templates for all your shipping boxes.\n\n### Verify product dimensions and weight\n\nIn your medusa store, make sure products have correct values for length, width, height, weight\n\n### During Checkout\n\n[Retrieve shipping options for cart](https://docs.medusajs.com/api/store/shipping-option/retrieve-shipping-options-for-cart) as usual and any `price_type: calculated` options belonging to `provider: shippo` will have `amount: Number`.\n\nRates calculate only if cart has shipping address and items\n\n**HTTP:**\n\n```plaintext\nGET /store/shipping-options/:cart_id\n```\n\n**Service:**\n\n```javascript\nconst shippingOptions = await shippingProfileService.fetchCartOptions(cart)\n```\n\n### Add to Cart\n\n[Add a Shipping Method](https://docs.medusajs.com/api/store/cart/add-a-shipping-method) and if  `shipping_option` has `price_type: calculated` the rate will be saved to the `shipping_method`\n\n**HTTP:**\n\n```plaintext\nPOST /store/carts/:id/shipping-methods\n --data '{\"option_id\":\"example_cart_option_id\"}'\n```\n\n### Help, adding a shipping method to cart throws an error\n\nThis is an issue with medusa-admin. Examine line 85 [`admin/src/domain/settings/regions/new-shipping.tsx`](https://github.com/medusajs/admin/blob/a33ed20214297ffdbd2383f809dddd4870f5dad9/src/domain/settings/regions/new-shipping.tsx#L85)\n\nOptions with `price_type: flat_rate` will not pass through [`fulFillmentProviderService.calculatePrice()`](https://docs.medusajs.com/references/services/classes/FulfillmentProviderService#calculateprice)\n\nmedusa-admin is still early phase software.\n\nWorkaround it, use the REST api directly, or patch the issue for now\n\nPossible interim solution:\n\n```javascript\nprice_type: (options[optionIndex].type === \"LIVE_RATE\") \n    ? \"calculated\" \n    : \"flat_rate\",\n```\n\n## Webhooks\n\n### Caution\n\nIncoming HTTP requests from Shippo to webhook endpoints lack authentication. No secret token, no signature in the request header, no bearer, nothing.\n\nBefore enabling webhooks, understand the risks of an open and insecure HTTP endpoint that consumes data, and how to mitigate this. Please DO NOT use this without SSL/TLS. [Whitelisting shippo IP's](https://groups.google.com/g/shippo-api-announce/c/1A6m6Snvypk) is a good idea. There are also intermediary third party services such as pipedream and hookdeck that can be used to relay requests.\n\nYou will also need to self generate a token and add it as a url query param. Ya I know… but it's better than nothing and it is encrypted over HTTPS\n\nThe flow at the code level is:\n\n1.  Webhook receives POST data\n2.  URL query token is verified\n3.  The request json gets verified by fetching the same object directly from shippo API, following these steps:\n    1.  Request body contains json claiming to be a shippo object. \n    2.  Ok, but lets fetch this object directly from Shippo's API\n    3.  If the fetch resolves to the object requested, then use that data instead of the untrusted input \n    4.  Otherwise throw a HTTP 500 and do nothing\n\n### Setup\n\nIn `.env` add `SHIPPO_WEBHOOK_SECRET=some_secret_string` \n\nAdd to `medusa-config.js`\n\n```javascript\nconst SHIPPO_API_KEY = process.env.SHIPPO_API_KEY\nconst SHIPPO_WEBHOOK_SECRET = process.env.SHIPPO_WEBHOOK_SECRET\n\n{\n  resolve: `medusa-fulfillment-shippo`,\n  options: {\n    api_key: SHIPPO_API_KEY,\n    weight_unit_type: 'g',\n    dimension_unit_type: 'cm',\n    webhook_secret: SHIPPO_WEBHOOK_SECRET,\n    webhook_test_mode: false    \n  },\n},\n```\n\n### Endpoints\n\nHooks need to be setup in [Shippo app settings](https://apps.goshippo.com/settings/api)\n\n**transaction\\_created**: `/hooks/shippo/transaction?token=SHIPPO_WEBHOOK_SECRET`\n\n**transaction\\_updated**: `/hooks/shippo/transaction?token=SHIPPO_WEBHOOK_SECRET`\n\n**track\\_updated**: `/hooks/shippo/track?token=SHIPPO_WEBHOOK_SECRET`\n\nThen send a sample. If everything is good you will see this in console:\n\n```shell\nProcessing shippo.received.transaction_created which has 0 subscribers\nProcessing shippo.rejected.transaction_created which has 0 subscribers\n```\n\nThis is the expected behaviour because the data could not be verified. Since it is a sample, when the plugin tried to verify the transaction by requesting the same object back directly from shippo api, it did not exist. It will NOT use input data beyond making the verification, so it gets rejected.\n\n### Test Mode\n\nTest mode bypasses input authenticity verification, i.e. it will use the untrusted input data instead of requesting the same data back from shippo.\n\nThis allows testing using data that does not exist in shippo.\n\nTo enable, set `webhook_test_mode: true` in `medusa-config.js` plugin options.\n\nRunning in test mode is a security risk, enable only for testing purposes.\n\n### transaction\\_created\n\n`/hooks/shippo/transaction?token=SHIPPO_WEBHOOK_SECRET`\n\nReceives shippo transaction object when label purchased\n\n*   Updates fulfillment to “shipped”\n*   Adds tracking number and link to fulfillment\n\n#### Events\n\n`shippo.transaction_created.shipment`\n\n```javascript\n{\n  order_id: \"\",\n  fulfillment_id: \"\",\n  transaction: {...}\n}\n```\n\n`shippo.transaction_created.return_label`\n\n```javascript\n{\n  order_id: \"\",\n  transaction: {...}\n}\n```\n\n### transaction\\_updated\n\n`/hooks/shippo/transaction?token=SHIPPO_WEBHOOK_SECRET`\n\nReceives shippo transaction object when transaction updated\n\n#### Events\n\n`shippo.transaction_updated.payload`\n\n```javascript\n{\n  order_id: \"\",\n  fulfillment_id: \"\",\n  transaction: {...}\n}\n```\n\n### track\\_updated\n\n`/hooks/shippo/track?token=SHIPPO_WEBHOOK_SECRET`\n\n#### Events\n\n`shippo.track_updated.payload`\n\n```javascript\n{\n  ...track\n}\n```\n\n## Public Interface\n\nReferences the declared public interface for client consumption, the [semver](https://semver.org/) \"Declared Public API\"\n\nAlthough there is nothing stopping you from accessing and using public methods behind the interface, be aware that those implementation details can and will change. The purpose of the interface is semver compliant stability.\n\n> Notice: (semver 0.x.x) - methods labeled `@experimental` have high probability of breaking changes\n\n### Getting Started\n\nDependency inject `shippoService` as you would with any other service\n\nFor guide, see [Using Custom Service](https://docs.medusajs.com/advanced/backend/services/create-service#using-your-custom-service)\n\n> Note:\n>\n> ```plaintext\n> order = shippo_order\n>\n> local_order = medusa_order\n> ```\n\n### Account\n\n`address`\n\n```javascript\nawait shippoService.account.address()\n```\n\n### Order\n\n`fetch(id)`\n\n```javascript\nawait shippoService.order.fetch(object_id)\n```\n\n`with([entity]).fetch(id)`\n\n```javascript\nawait shippoService.order.with([\"fulfillment\"]).fetch(object_id)\n```\n\n`fetchBy([entity, id])`\n\n```javascript\n/* @return {Promise.<object>} */\n\nawait shippoService.order.fetchBy([\"fulfillment\", id])\n```\n\n```javascript\n/* @return {Promise.<object[]>} */\n\nawait shippoService.order.fetchBy([\"local_order\", id])\n\nawait shippoService.order.fetchBy([\"claim\", id])\n\nawait shippoService.order.fetchBy([\"swap\", id])\n```\n\n`is([entity, id], attr).fetch()`\n\n```javascript\nawait shippoService.is([\"order\", id], \"replace\").fetch()\n```\n\n### Package\n\n`for([entity, id]).fetch()`\n\n```javascript\n// use parcel templates defined in shippo account\n\nawait shippoService.package.for([\"line_items\", [...lineItems]]).fetch()\n\nawait shippoService.package.for([\"cart\", id]).fetch()\n\nawait shippoService.package.for([\"local_order\", id]).fetch()\n\nawait shippoService.package.for([\"fulfillment\", id]).fetch()\n```\n\n```javascript\n// use any parcel templates \nconst packages = [\n  {\n    id: \"id123\",\n    name: \"My Package\",\n    length: \"40\",\n    width: \"30\",\n    height: \"30\",\n    weight: \"10000\", // max-weight\n  },\n  {...}\n]\n\nshippoService.package.set(\"boxes\", packages)\n\nawait shippoService.package.for([\"cart\", id]).get()\n...\n```\n\n### Packingslip\n\n`fetch(id)`\n\n```javascript\nconst { object_id } = order\n\nawait shippoService.packingslip.fetch(object_id)\n```\n\n`with([entity]).fetch(id)`\n\n```javascript\nawait shippoService.packingslip.with([\"fulfillment\"]).fetch(object_id)\n```\n\n`fetchBy([entity, id])`\n\n```javascript\n/* @return {Promise.<object>} */\n\nawait shippoService.packingslip.fetchBy([\"fulfillment\", id])\n\n```\n\n```javascript\n/* @return {Promise.<object[]>} */\n\nawait shippoService.packingslip.fetchBy([\"local_order\", id]) \n\nawait shippoService.packingslip.fetchBy([\"claim\", id]) \n\nawait shippoService.packingslip.fetchBy([\"swap\", id]) \n```\n\n### Track\n\n`fetch(carrier_enum, track_num)`\n\n```javascript\nawait shippoService.track.fetch(\"usps\", \"trackingnumber\")\n```\n\n`fetchBy([entity, id])`\n\n```javascript\nawait shippoService.track.fetchBy([\"fulfillment\", id])\n```\n\n### Transaction\n\n`fetch(id, {...args} = null)`\n\n```javascript\nawait shippoService.transaction.fetch(object_id)\n\nawait shippoService.transaction.fetch(object_id, { type: \"extended\" })\n```\n\n`fetchBy([entity, id], {...args} = null)`\n\n```javascript\nawait shippoService.transaction.fetchBy([\"local_order\", id])\n\nawait shippoService.transaction.fetchBy([\"local_order\", id], { type: \"extended\" })\n\nawait shippoService.transaction.fetchBy([\"fulfillment\", id])\n\nawait shippoService.transaction.fetchBy([\"fulfillment\", id], { type: \"extended\" })\n```\n\n`is([entity, id], attr).fetch()`\n\n```javascript\nawait shippoService.is([\"transaction\", id], \"return\").fetch()\n```\n\n### Client\n\n`shippo-node-client` ([forked](#shippo-node-client))\n\n```javascript\nconst client = shippoService.client \n```\n\n### Find\n\n`find(entity).for([entity, id])`\n\n```javascript\n/* @experimental */\n\nawait shippoService.find(\"fulfillment\").for([\"transaction\", id])\n\nawait shippoService.find(\"order\").for([\"transaction\", id])\n```\n\n## Events\n\nList of all events, their triggers, and expected payload for handlers\n\n[Subscribe to events](https://docs.medusajs.com/advanced/backend/subscribers/create-subscriber) to perform additional operations\n\nThese events only emit if the action pertains to `provider: shippo`\n\n### `shippo.order_created`\n\nTriggered when a new [fulfillment](https://docs.medusajs.com/api/admin/order/create-a-fulfillment) creates a shippo order.\n\n#### Payload\n\n```javascript\n{\n  order_id: \"\",\n  fulfillment_id: \"\",\n  customer_id: \"\",\n  shippo_order: {...}\n}\n```\n\n### `shippo.return_requested`\n\nTriggered when a [return is requested](https://docs.medusajs.com/api/admin/order/request-a-return)\n\nIf the return `ShippingMethod` has `provider: shippo` it attempts to find an existing return label in shippo.\n\n#### Payload\n\n```javascript\n{\n  order: {...}, // return order\n  transaction: {...} // shippo transaction for return label OR null\n}\n```\n\n### `shippo.swap_created`\n\nTriggered when a [swap is created](https://docs.medusajs.com/api/admin/order/create-a-swap)\n\nIf return `ShippingMethod` has `provider: shippo` it attempts to find an existing return label in shippo.\n\n#### Payload\n\n```javascript\n{\n  order: {...}, // return order\n  transaction: {...} // shippo transaction for return label OR null\n}\n```\n\n### `shippo.replace_order_created`\n\nTriggered when a [swap](https://docs.medusajs.com/api/admin/order/create-a-swap-fulfillment) or [claim](https://docs.medusajs.com/api/admin/order/create-a-claim-fulfillment) fulfillment is created.\n\nIf the `ShippingMethod` has `provider: shippo` a shippo order is created\n\n#### Payload\n\n```javascript\n{\n  order_id: \"\",\n  fulfillment_id: \"\",\n  customer_id: \"\",\n  shippo_order: {...}\n}\n```\n\n### `shippo.claim_refund_created`\n\nTriggered when a `type: refund` [claim is created](https://docs.medusajs.com/api/admin/order/create-a-claim)\n\nIf return `ShippingMethod` has `provider: shippo`, it attempts to find an existing return label in shippo\n\n#### Payload\n\n```javascript\n{\n  order: {...}, // return order\n  transaction: {...} // shippo transaction for return label OR null\n}\n```\n\n### `shippo.claim_replace_created`\n\nTriggered when a `type: replace` [claim is created](https://docs.medusajs.com/api/admin/order/create-a-claim)\n\nIf return `ShippingMethod` has `provider: shippo`, it attempts to find an existing return label in shippo\n\n#### Payload\n\n```javascript\n{\n  order: {...}, // return order\n  transaction: {...} // shippo transaction for return label OR null\n}\n```\n\n### `shippo.transaction_created.shipment`\n\nTriggered when the `transaction_created` webhook updates a `Fulfillment` status to `shipped`\n\n#### Payload\n\n```javascript\n{\n  order_id: \"\",\n  fulfillment_id: \"\",\n  transaction: {...}\n}\n```\n\n### `shippo.transaction_created.return_label`\n\nTriggered when the `transaction_created` webhook receives a return label transaction\n\n#### Payload\n\n```javascript\n{\n  order_id: \"\",\n  transaction: {...}\n}\n```\n\n### `shippo.transaction_updated.payload`\n\nTriggered when the `transaction_updated` webhook receives an updated transaction\n\n#### Payload\n\n```javascript\n{\n  order_id: \"\",\n  fulfillment_id: \"\",\n  transaction: {...}\n}\n```\n\n### `shippo.track_updated.payload`\n\nTriggered when the `track_updated` webhook receives an updated track\n\n#### Payload\n\n```javascript\n{\n  ...track\n}\n```\n\n## Shippo Node Client\n\nThis plugin is using a forked version of the official shippo-node-client. \n\nThe fork adds support for the following endpoints:\n\n*   live-rates\n*   service-groups\n*   user-parcel-templates\n*   orders/:id/packingslip\n*   ...\n*   Doc is WIP\n\nThe client is exposed on the `useClient` property of `shippoClientService`\n\n```javascript\nconst client = shippoService.client\n\n// Forks additional methods\nawait client.liverates.create({...parms})\nawait client.userparceltemplates.list()\nawait client.userparceltemplates.retrieve(id)\nawait client.servicegroups.list()\nawait client.servicegroups.create({...params})\n...\n```\n\nSee [Shippo API Reference](https://goshippo.com/docs/reference) for methods\n\n[Official client](https://github.com/goshippo/shippo-node-client)\n\n[Forked client](https://github.com/macder/shippo-node-client/tree/medusa)\n\n## Shipping Rates\n\nDimensional weight is a major factor in determining costs. Estimates are frivolous when based on inaccurate parcel volume and weight. This raises a challenging problem in computing which parcel box to use. While this is simple for single items, it becomes increasingly difficult when packing multiple items of various dimensions. It is a classic [bin packing problem](https://en.wikipedia.org/wiki/Bin_packing_problem), [NP-Hard](https://en.wikipedia.org/wiki/NP-hardness) stuff.\n\nThis plugin uses [binpackingjs](https://github.com/olragon/binpackingjs) which provides a [first-fit](https://en.wikipedia.org/wiki/First-fit_bin_packing) algorithm. Additional logic is wrapped around it to get a more optimized [first-fit-decreasing](https://en.wikipedia.org/wiki/First-fit-decreasing_bin_packing) algorithm. In order for this to be effective, parcel templates need to be setup in the Shippo account, and all products in medusa must have values for length, width, height, and weight.\n\n### Accuracy of Rates\n\nShipping rate estimates are calculated by third parties using data you supply. The onus is on the store admin to supply accurate data values about their products and packaging. This plugin does its best to use this data to create optimized requests, within reason and scope, to retrieve rates from Shippo. The intent is to provide a cost-cutting solution, but there is no one-size-fits all.\n\nAssuming accurate data for product dimensions, weight, and package templates in shippo reflect a carefully planned boxing strategy, expect reasonably accurate rates for single item and multi-item fulfillment's that fit in a single parcel. Multi parcel for rates at checkout is currently not supported (future consideration). If items cannot fit into a single box, the default package template set in [Shippo app settings](https://apps.goshippo.com/settings/rates-at-checkout) is used.\n\n## Limitations\n\nNo support for customs declarations. Planned for future release.\n\n## Resources\n\nMedusa Docs\\\nhttps://docs.medusajs.com/\n\nMedusa Shipping Architecture:\\\nhttps://docs.medusajs.com/advanced/backend/shipping/overview\n\nShippo API\\\nhttps://goshippo.com/docs/intro\\\nhttps://goshippo.com/docs/reference\n","readmeFilename":"README.md","gitHead":"5c24c631404d875543014498a989dd2f004f5633","bugs":{"url":"https://github.com/macder/medusa-fulfillment-shippo/issues"},"homepage":"https://github.com/macder/medusa-fulfillment-shippo#readme","_id":"medusa-fulfillment-shippo@1.0.0-beta.1","_nodeVersion":"16.15.1","_npmVersion":"8.11.0","dist":{"integrity":"sha512-6nX3dHPwVk76ri/Ka6tNb5Q+2MEn0erm1JRSNYFRKkOKx3uNjy9hfzWBaPgLn44wumw4JaWaKlKkevxms22YGA==","shasum":"958ac941925f9eccf521420f3f5805e40ac99890","tarball":"https://registry.npmjs.org/medusa-fulfillment-shippo/-/medusa-fulfillment-shippo-1.0.0-beta.1.tgz","fileCount":26,"unpackedSize":483066,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDRSjNCI2ALVT3q/NC/1u4lYiAT1/OxnnPeE8BeOHUqDAiBWV7s3hUD7QCi1qI2i4WRvdaesdSCOAEz4GE8abSIF2g=="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJi8uvjACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmpopRAApM/OJxvJVxlTypYoJNodMHhoGW2k7CoKKKQwUeUz/lkeGTY6\r\nNlNvrIuRWqIzv5EgLK0jNcTCVBl/6UdhHJ2WGJdfedbetZr4c2t6li//4ZFx\r\n2r0+QtF5oILmevJPtCA84rxDCfYE4l2N4/9csd/T/chG3Gpu5aq9Wg7pE3K7\r\n9nf7+WgJeYYLTwueaPpv3aDjJgfqvJVwYyl2azWyrwDharrTkiIvYs1zzVY1\r\nnM8HZX8N7XZDUPEww6tZ+1jLTm/xOJL/wEPkXqA4P0lW6Wiw4InMAQ9C+HRM\r\nVRyqVlWR0OLnB9aQwfejDpbCiyHxtT0Tx7YQTArZ0x7vArSKI+OJ0x7hO1nI\r\nJLE2o7OyAKkag34PyMy68ZRIIFaIApWvDBgul20ngIM4jm0hGjOMVXo+hVUy\r\nQlGajrKD4sEbnJ6QS+2hnTN9kswEpGzenh7nKfA9bneo4LO1yBA1wG/y0uVo\r\n6aDstjL3CV2rTSnkRUjdimP2t+UEG4q41pHEELtqSfpwWLQFtv6HjZKQ06rH\r\nXoUtwSAoJsHIH9Z1OcyZ391oOOSY7oyPgdELfHOSYOD9Lk6UFD9BcewScXCB\r\nba5eJZifUdfVkiE/7hV5tmFRPExRiUs89zyPSVNyrEbcKyOC+rxopZBS5EKo\r\n16RmTL1SNmPDLE4i54BlhZut3dhA1dcwmtI=\r\n=z5AI\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"macder","email":"maciej@derulski.com"},"directories":{},"maintainers":[{"name":"macder","email":"maciej@derulski.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/medusa-fulfillment-shippo_1.0.0-beta.1_1660087267107_0.020231237867832208"},"_hasShrinkwrap":false},"1.0.0-beta.2":{"name":"medusa-fulfillment-shippo","version":"1.0.0-beta.2","description":"Shippo fulfillment provider for medusa","author":{"name":"Maciej Derulski"},"license":"MIT","scripts":{"build":"babel src -d . --ignore **/__tests__,**/__mocks__,**/sandbox,**/sand.js,**/old-tests","prepare":"cross-env NODE_ENV=production npm run build","watch":"onchange -v src/** -- copyfiles {{file}} ../my-medusa-store","test":"jest --runInBand"},"dependencies":{"@macder/shippo":"^1.0.0","@macder/binpackingjs":"^2.3.2","body-parser":"^1.19.0","express":"^4.17.1","express-rate-limit":"^6.4.0","medusa-core-utils":"^1.1.30"},"peerDependencies":{"medusa-interfaces":"1.x"},"repository":{"type":"git","url":"git+https://github.com/macder/medusa-fulfillment-shippo.git"},"keywords":["medusa","medusa-plugin","medusa-fulfillment","medusa-shippo"],"devDependencies":{"@babel/cli":"^7.7.5","@babel/core":"^7.7.5","@babel/eslint-parser":"^7.15.8","@babel/node":"^7.7.4","@babel/plugin-proposal-class-properties":"^7.7.4","@babel/plugin-transform-classes":"^7.9.5","@babel/plugin-transform-instanceof":"^7.8.3","@babel/plugin-transform-runtime":"^7.7.6","@babel/preset-env":"^7.7.5","@babel/register":"^7.7.4","@babel/runtime":"^7.9.6","@faker-js/faker":"^7.3.0","client-sessions":"^0.8.0","copyfiles":"^2.4.1","cross-env":"^5.2.1","eslint":"^8.20.0","eslint-config-airbnb-base":"^15.0.0","eslint-config-prettier":"^8.3.0","eslint-plugin-import":"^2.26.0","eslint-plugin-prettier":"^4.0.0","jest":"^28.1.2","jest-extended":"2.0.0","medusa-test-utils":"^1.1.37","onchange":"^7.1.0"},"readme":"# medusa-fulfillment-shippo\n\n[![CircleCI](https://dl.circleci.com/status-badge/img/gh/macder/medusa-fulfillment-shippo/tree/main.svg?style=shield)](https://dl.circleci.com/status-badge/redirect/gh/macder/medusa-fulfillment-shippo/tree/main)\n[![Codacy Badge](https://app.codacy.com/project/badge/Grade/5ca5e600f1574354a8056441f589ca80)](https://www.codacy.com/gh/macder/medusa-fulfillment-shippo/dashboard?utm_source=github.com\\&utm_medium=referral\\&utm_content=macder/medusa-fulfillment-shippo\\&utm_campaign=Badge_Grade)\n[![Codacy Badge](https://app.codacy.com/project/badge/Coverage/5ca5e600f1574354a8056441f589ca80)](https://www.codacy.com/gh/macder/medusa-fulfillment-shippo/dashboard?utm_source=github.com\\&utm_medium=referral\\&utm_content=macder/medusa-fulfillment-shippo\\&utm_campaign=Badge_Coverage)\n\n> :information\\_source: Requires Medusa 1.3.5^\n\nShippo fulfillment provider for Medusa Commerce.\n\nProvides fulfillment options using carrier service levels and user created service groups that can be used to create shipping options for profiles and regions.\n\nRates at checkout optimized with a [first-fit-decreasing (FFD)](https://en.wikipedia.org/wiki/First-fit-decreasing_bin_packing) bin packing algorithm.\n\nFulfillments create orders in shippo.\n\nSupports returns, exchanges, and claims.\n\n[Public interface](#public-interface) for rapid custom integration.\n\n[Eventbus payloading](#events) instead of arbitrary data assumption and storage.\n\n## Table of Contents\n\n*   [Getting Started](#getting-started)\n*   [Orders](#orders)\n*   [Packing Slips](#packing-slips)\n*   [Returns](#returns)\n    *   [Request](#request)\n*   [Swaps](#swaps)\n    *   [Create](#create)\n    *   [Fulfillment](#fulfillment)\n*   [Claims](#claims)\n    *   [Refund](#refund)\n    *   [Replace](#replace)\n    *   [Fulfillment](#fulfillment-1)\n*   [Rates at Checkout](#rates-at-checkout)\n    *   [Shipping Options in Shippo App](#setup-shipping-options-in-shippo-app)\n    *   [Assign Shipping Options to Regions in Medusa](#assign-shipping-options-to-regions-in-medusa)\n    *   [During Checkout](#during-checkout)\n    *   [Set rates for cart](#set-rates-for-cart)\n    *   [Add to Cart](#add-to-carlst)\n    *   [Help, adding a shipping method to cart throws an error](#help-adding-a-shipping-method-to-cart-throws-an-error)\n*   [Webhooks](#webhooks)\n*   [Public Interface](#public-interface)\n    *   [Account](#account)\n    *   [Order](#order)\n    *   [Package](#package)\n    *   [Packingslip](#packingslip)\n    *   [Track](#track)\n    *   [Transaction](#transaction)\n    *   [Client](#client)\n*   [Events](#events)\n*   [Shippo Node Client](#shippo-node-client)\n*   [Shipping Rates](#shipping-rates)\n*   [Limitations](#limitations)\n*   [Resources](#resources)\n\n## Getting started\n\nInstall:\n\n`> npm i medusa-fulfillment-shippo`\n\nAdd to medusa-config.js\n\n```javascript\n{\n  resolve: `medusa-fulfillment-shippo`,\n    options: {\n      api_key: SHIPPO_API_KEY,\n      weight_unit_type: 'g', // valid values: g, kg, lb, oz\n      dimension_unit_type: 'cm', // valid values: cm, mm, in\n      webhook_secret: '', // README section on webhooks before using!\n      webhook_test_mode: false\n    },\n}\n```\n\n## Orders\n\nCreating an order fulfillment makes a new order in shippo. An event is emitted with the response data and related internal ids.\n\n[Create a Subscriber](https://docs.medusajs.com/advanced/backend/subscribers/create-subscriber) to access the data.\n\n**Event:**\n`shippo.order_created`\n\n```javascript\n{\n  order_id: \"\",\n  fulfillment_id: \"\",\n  customer_id: \"\",\n  shippo_order: {...}\n}\n```\n\n### Retrieve\n\n```javascript\nawait shippoService.order.fetch(object_id)\n\nawait shippoService.order.fetchBy([\"fulfillment\", ful_id]\n\nawait shippoService.order.with([\"fulfillment\"]).fetch(object_id)\n```\n\n[See references](#order) for all methods\n\n## Packing Slips\n\n### Retrieve\n\n```javascript\nconst { object_id } = order\n\nawait shippoService.packingslip.fetch(object_id)\n\nawait shippoService.packingslip.fetchBy([\"fulfillment\"], ful_id)\n\nawait shippoService.packingslip.with([\"fulfillment\"]).fetch(object_id)\n```\n\n[See references](#packingslip) for all methods\n\n## Returns\n\n### Request\n\nInvoked when [Request a Return](https://docs.medusajs.com/api/admin/order/request-a-return) `return_shipping` has `provider: shippo`\n\nAttempts fetching an existing return label from shippo.\n\n**Event:**\n`shippo.return_requested`\n\n```javascript\n{\n  order: {...}, // return order\n  transaction: {...} // shippo transaction for return label OR null\n}\n```\n\n## Swaps\n\n### Create\n\nInvoked when [Create a Swap](https://docs.medusajs.com/api/admin/order/create-a-swap) `return_shipping` has `provider: shippo`\n\nAttempts fetching an existing return label from shippo.\n\n**Event:**\n`shippo.swap_created`\n\n```javascript\n{\n  order: {...}, // return order\n  transaction: {...} // shippo transaction for return label OR null\n}\n```\n\n### Fulfillment\n\nInvoked when [Create a Swap Fulfillment](https://docs.medusajs.com/api/admin/order/create-a-swap-fulfillment) `shipping_option` has `provider: shippo`\n\nCreates an order in shippo.\n\n**Event:**\n`shippo.replace_order_created`\n\n```javascript\n{\n  order_id: \"\",\n  fulfillment_id: \"\",\n  customer_id: \"\",\n  shippo_order: {...}\n}\n```\n\n## Claims\n\n### Refund\n\nInvoked when [Create a Claim](https://docs.medusajs.com/api/admin/order/create-a-claim) has `type: refund` and `return_shipping` has `provider: shippo`\n\nAttempts fetching an existing return label from shippo.\n\n**Event:**\n`shippo.claim_refund_created`\n\n```javascript\n{\n  order: {...}, // return order\n  transaction: {...} // shippo transaction for return label OR null\n}\n```\n\n### Replace\n\nInvoked when [Create a Claim](https://docs.medusajs.com/api/admin/order/create-a-claim) has `type: replace` and `return_shipping` has `provider: shippo`\n\nAttempts fetching an existing return label from shippo.\n\n**Event:**\n`shippo.claim_replace_created`\n\n```javascript\n{\n  order: {...}, // return order\n  transaction: {...} // shippo transaction for return label OR null\n}\n```\n\n### Fulfillment\n\nInvoked when [Create a Claim Fulfillment](https://docs.medusajs.com/api/admin/order/create-a-claim-fulfillment) `shipping_option` has `provider: shippo`\n\nCreates an order in shippo.\n\n**Event:**\n`shippo.replace_order_created`\n\n```javascript\n{\n  order_id: \"\",\n  fulfillment_id: \"\",\n  customer_id: \"\",\n  shippo_order: {...}\n}\n```\n\n## Rates at Checkout\n\nProvide customers with accurate shipping rates at checkout to reduce over and under charges. This plugin implements a first-fit-decreasing bin packing algorithm to choose an appropriate parcel for the items in a cart. Follow this guide to get setup and then optimize.\n\n### Setup Shipping Options in Shippo App\n\nLets assume shipping from Canada to customers in Canada and USA via “Standard” and “Express” options\n\nThis would require setting up 4 shipping options in Shippo (\\<https://apps.goshippo.com/settings/rates-at-checkout>)\n\n1.  Standard Shipping Canada\n2.  Express Shipping Canada\n3.  Standard Shipping USA\n4.  Express Shiping USA\n\nSet each shipping option to “Live rate” and assign *service(s)* to them\n\nFor example:\n\n*   Express Shipping Canada: *Canada Post XpressPost*\n*   Express Shipping USA: *Canada Post XpressPost USA*\n*   *…*\n\nFor more in-depth details see https://support.goshippo.com/hc/en-us/articles/4403207559963\n\n### Assign Shipping Options to Regions in Medusa\n\nCreate shipping options for regions as usual\n\n[See here for common issue](#help-adding-a-shipping-method-to-cart-throws-an-error)\n\n### Setup parcel templates\n\nCreate package templates in the [Shippo app settings](https://apps.goshippo.com/settings/packages)\n\nTo get most optimal results, it is recommended to create package templates for all your shipping boxes.\n\n### Verify product dimensions and weight\n\nIn your medusa store, make sure products have correct values for length, width, height, weight\n\n### During Checkout\n\n[Retrieve shipping options for cart](https://docs.medusajs.com/api/store/shipping-option/retrieve-shipping-options-for-cart) as usual and any `price_type: calculated` options belonging to `provider: shippo` will have `amount: Number`.\n\nRates calculate only if cart has shipping address and items\n\n**HTTP:**\n\n```plaintext\nGET /store/shipping-options/:cart_id\n```\n\n**Service:**\n\n```javascript\nconst shippingOptions = await shippingProfileService.fetchCartOptions(cart)\n```\n\n### Add to Cart\n\n[Add a Shipping Method](https://docs.medusajs.com/api/store/cart/add-a-shipping-method) and if  `shipping_option` has `price_type: calculated` the rate will be saved to the `shipping_method`\n\n**HTTP:**\n\n```plaintext\nPOST /store/carts/:id/shipping-methods\n --data '{\"option_id\":\"example_cart_option_id\"}'\n```\n\n### Help, adding a shipping method to cart throws an error\n\nThis is an issue with medusa-admin. Examine line 85 [`admin/src/domain/settings/regions/new-shipping.tsx`](https://github.com/medusajs/admin/blob/a33ed20214297ffdbd2383f809dddd4870f5dad9/src/domain/settings/regions/new-shipping.tsx#L85)\n\nOptions with `price_type: flat_rate` will not pass through [`fulFillmentProviderService.calculatePrice()`](https://docs.medusajs.com/references/services/classes/FulfillmentProviderService#calculateprice)\n\nmedusa-admin is still early phase software.\n\nWorkaround it, use the REST api directly, or patch the issue for now\n\nPossible interim solution:\n\n```javascript\nprice_type: (options[optionIndex].type === \"LIVE_RATE\") \n    ? \"calculated\" \n    : \"flat_rate\",\n```\n\n## Webhooks\n\n### Caution\n\nIncoming HTTP requests from Shippo to webhook endpoints lack authentication. No secret token, no signature in the request header, no bearer, nothing.\n\nBefore enabling webhooks, understand the risks of an open and insecure HTTP endpoint that consumes data, and how to mitigate this. Please DO NOT use this without SSL/TLS. [Whitelisting shippo IP's](https://groups.google.com/g/shippo-api-announce/c/1A6m6Snvypk) is a good idea. There are also intermediary third party services such as pipedream and hookdeck that can be used to relay requests.\n\nYou will also need to self generate a token and add it as a url query param. Ya I know… but it's better than nothing and it is encrypted over HTTPS\n\nThe flow at the code level is:\n\n1.  Webhook receives POST data\n2.  URL query token is verified\n3.  The request json gets verified by fetching the same object directly from shippo API, following these steps:\n    1.  Request body contains json claiming to be a shippo object. \n    2.  Ok, but lets fetch this object directly from Shippo's API\n    3.  If the fetch resolves to the object requested, then use that data instead of the untrusted input \n    4.  Otherwise throw a HTTP 500 and do nothing\n\n### Setup\n\nIn `.env` add `SHIPPO_WEBHOOK_SECRET=some_secret_string` \n\nAdd to `medusa-config.js`\n\n```javascript\nconst SHIPPO_API_KEY = process.env.SHIPPO_API_KEY\nconst SHIPPO_WEBHOOK_SECRET = process.env.SHIPPO_WEBHOOK_SECRET\n\n{\n  resolve: `medusa-fulfillment-shippo`,\n  options: {\n    api_key: SHIPPO_API_KEY,\n    weight_unit_type: 'g',\n    dimension_unit_type: 'cm',\n    webhook_secret: SHIPPO_WEBHOOK_SECRET,\n    webhook_test_mode: false    \n  },\n},\n```\n\n### Endpoints\n\nHooks need to be setup in [Shippo app settings](https://apps.goshippo.com/settings/api)\n\n**transaction\\_created**: `/hooks/shippo/transaction?token=SHIPPO_WEBHOOK_SECRET`\n\n**transaction\\_updated**: `/hooks/shippo/transaction?token=SHIPPO_WEBHOOK_SECRET`\n\n**track\\_updated**: `/hooks/shippo/track?token=SHIPPO_WEBHOOK_SECRET`\n\nThen send a sample. If everything is good you will see this in console:\n\n```shell\nProcessing shippo.received.transaction_created which has 0 subscribers\nProcessing shippo.rejected.transaction_created which has 0 subscribers\n```\n\nThis is the expected behaviour because the data could not be verified. Since it is a sample, when the plugin tried to verify the transaction by requesting the same object back directly from shippo api, it did not exist. It will NOT use input data beyond making the verification, so it gets rejected.\n\n### Test Mode\n\nTest mode bypasses input authenticity verification, i.e. it will use the untrusted input data instead of requesting the same data back from shippo.\n\nThis allows testing using data that does not exist in shippo.\n\nTo enable, set `webhook_test_mode: true` in `medusa-config.js` plugin options.\n\nRunning in test mode is a security risk, enable only for testing purposes.\n\n### transaction\\_created\n\n`/hooks/shippo/transaction?token=SHIPPO_WEBHOOK_SECRET`\n\nReceives shippo transaction object when label purchased\n\n*   Updates fulfillment to “shipped”\n*   Adds tracking number and link to fulfillment\n\n#### Events\n\n`shippo.transaction_created.shipment`\n\n```javascript\n{\n  order_id: \"\",\n  fulfillment_id: \"\",\n  transaction: {...}\n}\n```\n\n`shippo.transaction_created.return_label`\n\n```javascript\n{\n  order_id: \"\",\n  transaction: {...}\n}\n```\n\n### transaction\\_updated\n\n`/hooks/shippo/transaction?token=SHIPPO_WEBHOOK_SECRET`\n\nReceives shippo transaction object when transaction updated\n\n#### Events\n\n`shippo.transaction_updated.payload`\n\n```javascript\n{\n  order_id: \"\",\n  fulfillment_id: \"\",\n  transaction: {...}\n}\n```\n\n### track\\_updated\n\n`/hooks/shippo/track?token=SHIPPO_WEBHOOK_SECRET`\n\n#### Events\n\n`shippo.track_updated.payload`\n\n```javascript\n{\n  ...track\n}\n```\n\n## Public Interface\n\nReferences the declared public interface for client consumption, the [semver](https://semver.org/) \"Declared Public API\"\n\nAlthough there is nothing stopping you from accessing and using public methods behind the interface, be aware that those implementation details can and will change. The purpose of the interface is semver compliant stability.\n\n> Notice: (semver 0.x.x) - methods labeled `@experimental` have high probability of breaking changes\n\n### Getting Started\n\nDependency inject `shippoService` as you would with any other service\n\nFor guide, see [Using Custom Service](https://docs.medusajs.com/advanced/backend/services/create-service#using-your-custom-service)\n\n> Note:\n>\n> ```plaintext\n> order = shippo_order\n>\n> local_order = medusa_order\n> ```\n\n### Account\n\n`address`\n\n```javascript\nawait shippoService.account.address()\n```\n\n### Order\n\n`fetch(id)`\n\n```javascript\nawait shippoService.order.fetch(object_id)\n```\n\n`with([entity]).fetch(id)`\n\n```javascript\nawait shippoService.order.with([\"fulfillment\"]).fetch(object_id)\n```\n\n`fetchBy([entity, id])`\n\n```javascript\n/* @return {Promise.<object>} */\n\nawait shippoService.order.fetchBy([\"fulfillment\", id])\n```\n\n```javascript\n/* @return {Promise.<object[]>} */\n\nawait shippoService.order.fetchBy([\"local_order\", id])\n\nawait shippoService.order.fetchBy([\"claim\", id])\n\nawait shippoService.order.fetchBy([\"swap\", id])\n```\n\n`is([entity, id], attr).fetch()`\n\n```javascript\nawait shippoService.is([\"order\", id], \"replace\").fetch()\n```\n\n### Package\n\n`for([entity, id]).fetch()`\n\n```javascript\n// use parcel templates defined in shippo account\n\nawait shippoService.package.for([\"line_items\", [...lineItems]]).fetch()\n\nawait shippoService.package.for([\"cart\", id]).fetch()\n\nawait shippoService.package.for([\"local_order\", id]).fetch()\n\nawait shippoService.package.for([\"fulfillment\", id]).fetch()\n```\n\n```javascript\n// use any parcel templates \nconst packages = [\n  {\n    id: \"id123\",\n    name: \"My Package\",\n    length: \"40\",\n    width: \"30\",\n    height: \"30\",\n    weight: \"10000\", // max-weight\n  },\n  {...}\n]\n\nshippoService.package.set(\"boxes\", packages)\n\nawait shippoService.package.for([\"cart\", id]).get()\n...\n```\n\n### Packingslip\n\n`fetch(id)`\n\n```javascript\nconst { object_id } = order\n\nawait shippoService.packingslip.fetch(object_id)\n```\n\n`with([entity]).fetch(id)`\n\n```javascript\nawait shippoService.packingslip.with([\"fulfillment\"]).fetch(object_id)\n```\n\n`fetchBy([entity, id])`\n\n```javascript\n/* @return {Promise.<object>} */\n\nawait shippoService.packingslip.fetchBy([\"fulfillment\", id])\n\n```\n\n```javascript\n/* @return {Promise.<object[]>} */\n\nawait shippoService.packingslip.fetchBy([\"local_order\", id]) \n\nawait shippoService.packingslip.fetchBy([\"claim\", id]) \n\nawait shippoService.packingslip.fetchBy([\"swap\", id]) \n```\n\n### Track\n\n`fetch(carrier_enum, track_num)`\n\n```javascript\nawait shippoService.track.fetch(\"usps\", \"trackingnumber\")\n```\n\n`fetchBy([entity, id])`\n\n```javascript\nawait shippoService.track.fetchBy([\"fulfillment\", id])\n```\n\n### Transaction\n\n`fetch(id, {...args} = null)`\n\n```javascript\nawait shippoService.transaction.fetch(object_id)\n\nawait shippoService.transaction.fetch(object_id, { type: \"extended\" })\n```\n\n`fetchBy([entity, id], {...args} = null)`\n\n```javascript\nawait shippoService.transaction.fetchBy([\"local_order\", id])\n\nawait shippoService.transaction.fetchBy([\"local_order\", id], { type: \"extended\" })\n\nawait shippoService.transaction.fetchBy([\"fulfillment\", id])\n\nawait shippoService.transaction.fetchBy([\"fulfillment\", id], { type: \"extended\" })\n```\n\n`is([entity, id], attr).fetch()`\n\n```javascript\nawait shippoService.is([\"transaction\", id], \"return\").fetch()\n```\n\n### Client\n\n`shippo-node-client` ([forked](#shippo-node-client))\n\n```javascript\nconst client = shippoService.client \n```\n\n### Find\n\n`find(entity).for([entity, id])`\n\n```javascript\n/* @experimental */\n\nawait shippoService.find(\"fulfillment\").for([\"transaction\", id])\n\nawait shippoService.find(\"order\").for([\"transaction\", id])\n```\n\n## Events\n\nList of all events, their triggers, and expected payload for handlers\n\n[Subscribe to events](https://docs.medusajs.com/advanced/backend/subscribers/create-subscriber) to perform additional operations\n\nThese events only emit if the action pertains to `provider: shippo`\n\n### `shippo.order_created`\n\nTriggered when a new [fulfillment](https://docs.medusajs.com/api/admin/order/create-a-fulfillment) creates a shippo order.\n\n#### Payload\n\n```javascript\n{\n  order_id: \"\",\n  fulfillment_id: \"\",\n  customer_id: \"\",\n  shippo_order: {...}\n}\n```\n\n### `shippo.return_requested`\n\nTriggered when a [return is requested](https://docs.medusajs.com/api/admin/order/request-a-return)\n\nIf the return `ShippingMethod` has `provider: shippo` it attempts to find an existing return label in shippo.\n\n#### Payload\n\n```javascript\n{\n  order: {...}, // return order\n  transaction: {...} // shippo transaction for return label OR null\n}\n```\n\n### `shippo.swap_created`\n\nTriggered when a [swap is created](https://docs.medusajs.com/api/admin/order/create-a-swap)\n\nIf return `ShippingMethod` has `provider: shippo` it attempts to find an existing return label in shippo.\n\n#### Payload\n\n```javascript\n{\n  order: {...}, // return order\n  transaction: {...} // shippo transaction for return label OR null\n}\n```\n\n### `shippo.replace_order_created`\n\nTriggered when a [swap](https://docs.medusajs.com/api/admin/order/create-a-swap-fulfillment) or [claim](https://docs.medusajs.com/api/admin/order/create-a-claim-fulfillment) fulfillment is created.\n\nIf the `ShippingMethod` has `provider: shippo` a shippo order is created\n\n#### Payload\n\n```javascript\n{\n  order_id: \"\",\n  fulfillment_id: \"\",\n  customer_id: \"\",\n  shippo_order: {...}\n}\n```\n\n### `shippo.claim_refund_created`\n\nTriggered when a `type: refund` [claim is created](https://docs.medusajs.com/api/admin/order/create-a-claim)\n\nIf return `ShippingMethod` has `provider: shippo`, it attempts to find an existing return label in shippo\n\n#### Payload\n\n```javascript\n{\n  order: {...}, // return order\n  transaction: {...} // shippo transaction for return label OR null\n}\n```\n\n### `shippo.claim_replace_created`\n\nTriggered when a `type: replace` [claim is created](https://docs.medusajs.com/api/admin/order/create-a-claim)\n\nIf return `ShippingMethod` has `provider: shippo`, it attempts to find an existing return label in shippo\n\n#### Payload\n\n```javascript\n{\n  order: {...}, // return order\n  transaction: {...} // shippo transaction for return label OR null\n}\n```\n\n### `shippo.transaction_created.shipment`\n\nTriggered when the `transaction_created` webhook updates a `Fulfillment` status to `shipped`\n\n#### Payload\n\n```javascript\n{\n  order_id: \"\",\n  fulfillment_id: \"\",\n  transaction: {...}\n}\n```\n\n### `shippo.transaction_created.return_label`\n\nTriggered when the `transaction_created` webhook receives a return label transaction\n\n#### Payload\n\n```javascript\n{\n  order_id: \"\",\n  transaction: {...}\n}\n```\n\n### `shippo.transaction_updated.payload`\n\nTriggered when the `transaction_updated` webhook receives an updated transaction\n\n#### Payload\n\n```javascript\n{\n  order_id: \"\",\n  fulfillment_id: \"\",\n  transaction: {...}\n}\n```\n\n### `shippo.track_updated.payload`\n\nTriggered when the `track_updated` webhook receives an updated track\n\n#### Payload\n\n```javascript\n{\n  ...track\n}\n```\n\n## Shippo Node Client\n\nThis plugin is using a forked version of the official shippo-node-client. \n\nThe fork adds support for the following endpoints:\n\n*   live-rates\n*   service-groups\n*   user-parcel-templates\n*   orders/:id/packingslip\n*   ...\n*   Doc is WIP\n\nThe client is exposed on the `useClient` property of `shippoClientService`\n\n```javascript\nconst client = shippoService.client\n\n// Forks additional methods\nawait client.liverates.create({...parms})\nawait client.userparceltemplates.list()\nawait client.userparceltemplates.retrieve(id)\nawait client.servicegroups.list()\nawait client.servicegroups.create({...params})\n...\n```\n\nSee [Shippo API Reference](https://goshippo.com/docs/reference) for methods\n\n[Official client](https://github.com/goshippo/shippo-node-client)\n\n[Forked client](https://github.com/macder/shippo-node-client/tree/medusa)\n\n## Shipping Rates\n\nDimensional weight is a major factor in determining costs. Estimates are frivolous when based on inaccurate parcel volume and weight. This raises a challenging problem in computing which parcel box to use. While this is simple for single items, it becomes increasingly difficult when packing multiple items of various dimensions. It is a classic [bin packing problem](https://en.wikipedia.org/wiki/Bin_packing_problem), [NP-Hard](https://en.wikipedia.org/wiki/NP-hardness) stuff.\n\nThis plugin uses [binpackingjs](https://github.com/olragon/binpackingjs) which provides a [first-fit](https://en.wikipedia.org/wiki/First-fit_bin_packing) algorithm. Additional logic is wrapped around it to get a more optimized [first-fit-decreasing](https://en.wikipedia.org/wiki/First-fit-decreasing_bin_packing) algorithm. In order for this to be effective, parcel templates need to be setup in the Shippo account, and all products in medusa must have values for length, width, height, and weight.\n\n### Accuracy of Rates\n\nShipping rate estimates are calculated by third parties using data you supply. The onus is on the store admin to supply accurate data values about their products and packaging. This plugin does its best to use this data to create optimized requests, within reason and scope, to retrieve rates from Shippo. The intent is to provide a cost-cutting solution, but there is no one-size-fits all.\n\nAssuming accurate data for product dimensions, weight, and package templates in shippo reflect a carefully planned boxing strategy, expect reasonably accurate rates for single item and multi-item fulfillment's that fit in a single parcel. Multi parcel for rates at checkout is currently not supported (future consideration). If items cannot fit into a single box, the default package template set in [Shippo app settings](https://apps.goshippo.com/settings/rates-at-checkout) is used.\n\n## Limitations\n\nNo support for customs declarations. Planned for future release.\n\n## Resources\n\nMedusa Docs\\\nhttps://docs.medusajs.com/\n\nMedusa Shipping Architecture:\\\nhttps://docs.medusajs.com/advanced/backend/shipping/overview\n\nShippo API\\\nhttps://goshippo.com/docs/intro\\\nhttps://goshippo.com/docs/reference\n","readmeFilename":"README.md","gitHead":"6fa753ba695387e7a42d8985839f4ffb6f81672f","bugs":{"url":"https://github.com/macder/medusa-fulfillment-shippo/issues"},"homepage":"https://github.com/macder/medusa-fulfillment-shippo#readme","_id":"medusa-fulfillment-shippo@1.0.0-beta.2","_nodeVersion":"16.15.1","_npmVersion":"8.11.0","dist":{"integrity":"sha512-xwFG1UPvzhcyeJtAQwuojqwmtVVnUN5JJcH6wpzZ6TNLcgdfYIm4n5dM0SMTkYwSCNR8blp/jR8s966kMkkmKA==","shasum":"ef81b7e31e513655d37be419e204ad1f9750e0da","tarball":"https://registry.npmjs.org/medusa-fulfillment-shippo/-/medusa-fulfillment-shippo-1.0.0-beta.2.tgz","fileCount":26,"unpackedSize":484356,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIE6QbnJiz8ORL6ZBzfrGTUOh0mPym0vdwnFL//C88UwXAiEA4pea9rDYj7bqD5mKYb+5DfcbtMyT7omnkgDFSPRecv0="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJi83DpACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmrY+w/8Dha1pXN1y2H1DZxjb/l6lT/+odekyDSkGYSXrKR0eau9Cnhm\r\n5rpkXWU9HLdqstoLCAQg5dJnCeYWbemYQq0Wdqxx25YesYwf7ygD2YLrLXJR\r\nthZAuWy9XRGke2fFLNSlduwqM1b1dMCD77kjKxGxumVGrstKoBEqVwTU3W+j\r\nYtesa7nRpBmND8oBVd/AdySruDaDc+uqKcssT1SpqUGYbvMyvncUcrfvaVFx\r\nBaG+hTQnvLvj/8JIVk4t8VuB1PGugHIB0E2NFdd/sur2prcCKyUgqrm/4+9c\r\nJgq4tQz1/ygqYl/u0xtHwbY6Fx+6i2bgD7pAAFuOfFZr6KTfY6T4FyWq0UFm\r\nRdK4wlG9ghGpoX3qWqBmlVqoz+BYEcxBMVGOSSAI1fmArfUOYPVKREG6LYyH\r\niNAUNasvEGrGJ/UQyENgP7XUeIAwphuRVAoJiVgNuUwAg+Co+XflBfDvG5pK\r\nrtTzAIyUp4gDCFPb6FVZeoBN33y9thkM5yds5EZEpEU3k0T61xqiGAZ0uQ+q\r\ngtYITHhn6mvRCp3stz7KXj/pLg/APjM7MTj+Tr6T8rUeTUgohxM5wVaJAQMl\r\n0WydY6p+xcwZUqoiC6YvWRsJ49XjYL3vkfgjs5xzayHtk9+VzkJuAY6uraDy\r\nL3P/9AFvddfOSbCZdWTd/qjdQwmsmn5Dv8g=\r\n=X7PC\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"macder","email":"maciej@derulski.com"},"directories":{},"maintainers":[{"name":"macder","email":"maciej@derulski.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/medusa-fulfillment-shippo_1.0.0-beta.2_1660121320979_0.3671008472847075"},"_hasShrinkwrap":false},"1.0.0-beta.3":{"name":"medusa-fulfillment-shippo","version":"1.0.0-beta.3","description":"Shippo fulfillment provider for medusa","author":{"name":"Maciej Derulski"},"license":"MIT","scripts":{"build":"babel src -d . --ignore **/__tests__,**/__mocks__,**/sandbox,**/sand.js,**/old-tests","prepare":"cross-env NODE_ENV=production npm run build","watch":"onchange -v src/** -- copyfiles {{file}} ../my-medusa-store","test":"jest --runInBand"},"dependencies":{"@macder/shippo":"^1.0.0","@macder/binpackingjs":"^2.3.2","body-parser":"^1.19.0","express":"^4.17.1","express-rate-limit":"^6.4.0","medusa-core-utils":"^1.1.30"},"peerDependencies":{"medusa-interfaces":"1.x"},"repository":{"type":"git","url":"git+https://github.com/macder/medusa-fulfillment-shippo.git"},"keywords":["medusa","medusa-plugin","medusa-fulfillment","medusa-shippo"],"devDependencies":{"@babel/cli":"^7.7.5","@babel/core":"^7.7.5","@babel/eslint-parser":"^7.15.8","@babel/node":"^7.7.4","@babel/plugin-proposal-class-properties":"^7.7.4","@babel/plugin-transform-classes":"^7.9.5","@babel/plugin-transform-instanceof":"^7.8.3","@babel/plugin-transform-runtime":"^7.7.6","@babel/preset-env":"^7.7.5","@babel/register":"^7.7.4","@babel/runtime":"^7.9.6","@faker-js/faker":"^7.3.0","client-sessions":"^0.8.0","copyfiles":"^2.4.1","cross-env":"^5.2.1","eslint":"^8.20.0","eslint-config-airbnb-base":"^15.0.0","eslint-config-prettier":"^8.3.0","eslint-plugin-import":"^2.26.0","eslint-plugin-prettier":"^4.0.0","jest":"^28.1.2","jest-extended":"2.0.0","medusa-test-utils":"^1.1.37","onchange":"^7.1.0"},"readme":"# medusa-fulfillment-shippo\n\n[![CircleCI](https://dl.circleci.com/status-badge/img/gh/macder/medusa-fulfillment-shippo/tree/main.svg?style=shield)](https://dl.circleci.com/status-badge/redirect/gh/macder/medusa-fulfillment-shippo/tree/main)\n[![Codacy Badge](https://app.codacy.com/project/badge/Grade/5ca5e600f1574354a8056441f589ca80)](https://www.codacy.com/gh/macder/medusa-fulfillment-shippo/dashboard?utm_source=github.com\\&utm_medium=referral\\&utm_content=macder/medusa-fulfillment-shippo\\&utm_campaign=Badge_Grade)\n[![Codacy Badge](https://app.codacy.com/project/badge/Coverage/5ca5e600f1574354a8056441f589ca80)](https://www.codacy.com/gh/macder/medusa-fulfillment-shippo/dashboard?utm_source=github.com\\&utm_medium=referral\\&utm_content=macder/medusa-fulfillment-shippo\\&utm_campaign=Badge_Coverage)\n\n> :information\\_source: Requires Medusa ^1.3.5\n\nShippo fulfillment provider for Medusa Commerce.\n\nProvides fulfillment options using carrier service levels and user created service groups that can be used to create shipping options for profiles and regions.\n\nRates at checkout optimized with a [first-fit-decreasing (FFD)](https://en.wikipedia.org/wiki/First-fit-decreasing_bin_packing) bin packing algorithm.\n\nFulfillments create orders in shippo.\n\nSupports returns, exchanges, and claims.\n\n[Public interface](#public-interface) for rapid custom integration.\n\n[Eventbus payloading](#events) instead of arbitrary data assumption and storage.\n\n## Table of Contents\n\n*   [Getting Started](#getting-started)\n*   [Orders](#orders)\n*   [Packing Slips](#packing-slips)\n*   [Returns](#returns)\n    *   [Request](#request)\n*   [Swaps](#swaps)\n    *   [Create](#create)\n    *   [Fulfillment](#fulfillment)\n*   [Claims](#claims)\n    *   [Refund](#refund)\n    *   [Replace](#replace)\n    *   [Fulfillment](#fulfillment-1)\n*   [Rates at Checkout](#rates-at-checkout)\n    *   [Shipping Options in Shippo App](#setup-shipping-options-in-shippo-app)\n    *   [Assign Shipping Options to Regions in Medusa](#assign-shipping-options-to-regions-in-medusa)\n    *   [During Checkout](#during-checkout)\n    *   [Set rates for cart](#set-rates-for-cart)\n    *   [Add to Cart](#add-to-carlst)\n    *   [Help, adding a shipping method to cart throws an error](#help-adding-a-shipping-method-to-cart-throws-an-error)\n*   [Webhooks](#webhooks)\n*   [Public Interface](#public-interface)\n    *   [Detailed Reference](#public-interface)\n    *   [Quick Reference](#quick-reference)\n*   [Events](#events)\n*   [Shippo Node Client](#shippo-node-client)\n*   [Shipping Rates](#shipping-rates)\n*   [Limitations](#limitations)\n*   [Resources](#resources)\n\n## Getting started\n\nInstall:\n\n`> npm i medusa-fulfillment-shippo`\n\nAdd to medusa-config.js\n\n```javascript\n{\n  resolve: `medusa-fulfillment-shippo`,\n    options: {\n      api_key: SHIPPO_API_KEY,\n      weight_unit_type: 'g', // valid values: g, kg, lb, oz\n      dimension_unit_type: 'cm', // valid values: cm, mm, in\n      webhook_secret: '', // README section on webhooks before using!\n      webhook_test_mode: false\n    },\n}\n```\n\n## Orders\n\nCreating an order fulfillment makes a new order in shippo. An event is emitted with the response data and related internal ids.\n\n[Create a Subscriber](https://docs.medusajs.com/advanced/backend/subscribers/create-subscriber) to access the data.\n\n**Event:**\n`shippo.order_created`\n\n```javascript\n{\n  order_id: \"\",\n  fulfillment_id: \"\",\n  customer_id: \"\",\n  shippo_order: {...}\n}\n```\n\n### Retrieve\n\n```javascript\nawait shippoService.order.fetch(object_id)\n\nawait shippoService.order.fetchBy([\"fulfillment\", ful_id]\n\nawait shippoService.order.with([\"fulfillment\"]).fetch(object_id)\n```\n\n[See references](#order) for all methods\n\n## Packing Slips\n\n### Retrieve\n\n```javascript\nconst { object_id } = order\n\nawait shippoService.packingslip.fetch(object_id)\n\nawait shippoService.packingslip.fetchBy([\"fulfillment\"], ful_id)\n\nawait shippoService.packingslip.with([\"fulfillment\"]).fetch(object_id)\n```\n\n[See references](#packingslip) for all methods\n\n## Returns\n\n### Request\n\nInvoked when [Request a Return](https://docs.medusajs.com/api/admin/order/request-a-return) `return_shipping` has `provider: shippo`\n\nAttempts fetching an existing return label from shippo.\n\n**Event:**\n`shippo.return_requested`\n\n```javascript\n{\n  order: {...}, // return order\n  transaction: {...} // shippo transaction for return label OR null\n}\n```\n\n## Swaps\n\n### Create\n\nInvoked when [Create a Swap](https://docs.medusajs.com/api/admin/order/create-a-swap) `return_shipping` has `provider: shippo`\n\nAttempts fetching an existing return label from shippo.\n\n**Event:**\n`shippo.swap_created`\n\n```javascript\n{\n  order: {...}, // return order\n  transaction: {...} // shippo transaction for return label OR null\n}\n```\n\n### Fulfillment\n\nInvoked when [Create a Swap Fulfillment](https://docs.medusajs.com/api/admin/order/create-a-swap-fulfillment) `shipping_option` has `provider: shippo`\n\nCreates an order in shippo.\n\n**Event:**\n`shippo.replace_order_created`\n\n```javascript\n{\n  order_id: \"\",\n  fulfillment_id: \"\",\n  customer_id: \"\",\n  shippo_order: {...}\n}\n```\n\n## Claims\n\n### Refund\n\nInvoked when [Create a Claim](https://docs.medusajs.com/api/admin/order/create-a-claim) has `type: refund` and `return_shipping` has `provider: shippo`\n\nAttempts fetching an existing return label from shippo.\n\n**Event:**\n`shippo.claim_refund_created`\n\n```javascript\n{\n  order: {...}, // return order\n  transaction: {...} // shippo transaction for return label OR null\n}\n```\n\n### Replace\n\nInvoked when [Create a Claim](https://docs.medusajs.com/api/admin/order/create-a-claim) has `type: replace` and `return_shipping` has `provider: shippo`\n\nAttempts fetching an existing return label from shippo.\n\n**Event:**\n`shippo.claim_replace_created`\n\n```javascript\n{\n  order: {...}, // return order\n  transaction: {...} // shippo transaction for return label OR null\n}\n```\n\n### Fulfillment\n\nInvoked when [Create a Claim Fulfillment](https://docs.medusajs.com/api/admin/order/create-a-claim-fulfillment) `shipping_option` has `provider: shippo`\n\nCreates an order in shippo.\n\n**Event:**\n`shippo.replace_order_created`\n\n```javascript\n{\n  order_id: \"\",\n  fulfillment_id: \"\",\n  customer_id: \"\",\n  shippo_order: {...}\n}\n```\n\n## Rates at Checkout\n\nProvide customers with accurate shipping rates at checkout to reduce over and under charges. This plugin implements a first-fit-decreasing bin packing algorithm to choose an appropriate parcel for the items in a cart. Follow this guide to get setup and then optimize.\n\n### Setup Shipping Options in Shippo App\n\nLets assume shipping from Canada to customers in Canada and USA via “Standard” and “Express” options\n\nThis would require setting up 4 shipping options in Shippo (\\<https://apps.goshippo.com/settings/rates-at-checkout>)\n\n1.  Standard Shipping Canada\n2.  Express Shipping Canada\n3.  Standard Shipping USA\n4.  Express Shiping USA\n\nSet each shipping option to “Live rate” and assign *service(s)* to them\n\nFor example:\n\n*   Express Shipping Canada: *Canada Post XpressPost*\n*   Express Shipping USA: *Canada Post XpressPost USA*\n*   *…*\n\nFor more in-depth details see https://support.goshippo.com/hc/en-us/articles/4403207559963\n\n### Assign Shipping Options to Regions in Medusa\n\nCreate shipping options for regions as usual\n\n[See here for common issue](#help-adding-a-shipping-method-to-cart-throws-an-error)\n\n### Setup parcel templates\n\nCreate package templates in the [Shippo app settings](https://apps.goshippo.com/settings/packages)\n\nTo get most optimal results, it is recommended to create package templates for all your shipping boxes.\n\n### Verify product dimensions and weight\n\nIn your medusa store, make sure products have correct values for length, width, height, weight\n\n### During Checkout\n\n[Retrieve shipping options for cart](https://docs.medusajs.com/api/store/shipping-option/retrieve-shipping-options-for-cart) as usual and any `price_type: calculated` options belonging to `provider: shippo` will have `amount: Number`.\n\nRates calculate only if cart has shipping address and items\n\n**HTTP:**\n\n```plaintext\nGET /store/shipping-options/:cart_id\n```\n\n**Service:**\n\n```javascript\nconst shippingOptions = await shippingProfileService.fetchCartOptions(cart)\n```\n\n### Add to Cart\n\n[Add a Shipping Method](https://docs.medusajs.com/api/store/cart/add-a-shipping-method) and if  `shipping_option` has `price_type: calculated` the rate will be saved to the `shipping_method`\n\n**HTTP:**\n\n```plaintext\nPOST /store/carts/:id/shipping-methods\n --data '{\"option_id\":\"example_cart_option_id\"}'\n```\n\n### Help, adding a shipping method to cart throws an error\n\nThis is an issue with medusa-admin. Examine line 85 [`admin/src/domain/settings/regions/new-shipping.tsx`](https://github.com/medusajs/admin/blob/a33ed20214297ffdbd2383f809dddd4870f5dad9/src/domain/settings/regions/new-shipping.tsx#L85)\n\nOptions with `price_type: flat_rate` will not pass through [`fulFillmentProviderService.calculatePrice()`](https://docs.medusajs.com/references/services/classes/FulfillmentProviderService#calculateprice)\n\nmedusa-admin is still early phase software.\n\nWorkaround it, use the REST api directly, or patch the issue for now\n\nPossible interim solution:\n\n```javascript\nprice_type: (options[optionIndex].type === \"LIVE_RATE\") \n    ? \"calculated\" \n    : \"flat_rate\",\n```\n\n## Webhooks\n\n### Caution\n\nIncoming HTTP requests from Shippo to webhook endpoints lack authentication. No secret token, no signature in the request header, no bearer, nothing.\n\nBefore enabling webhooks, understand the risks of an open and insecure HTTP endpoint that consumes data, and how to mitigate this. Please DO NOT use this without SSL/TLS. [Whitelisting shippo IP's](https://groups.google.com/g/shippo-api-announce/c/1A6m6Snvypk) is a good idea. There are also intermediary third party services such as pipedream and hookdeck that can be used to relay requests.\n\nYou will also need to self generate a token and add it as a url query param. Ya I know… but it's better than nothing and it is encrypted over HTTPS\n\nThe flow at the code level is:\n\n1.  Webhook receives POST data\n2.  URL query token is verified\n3.  The request json gets verified by fetching the same object directly from shippo API, following these steps:\n    1.  Request body contains json claiming to be a shippo object. \n    2.  Ok, but lets fetch this object directly from Shippo's API\n    3.  If the fetch resolves to the object requested, then use that data instead of the untrusted input \n    4.  Otherwise throw a HTTP 500 and do nothing\n\n### Setup\n\nIn `.env` add `SHIPPO_WEBHOOK_SECRET=some_secret_string` \n\nAdd to `medusa-config.js`\n\n```javascript\nconst SHIPPO_API_KEY = process.env.SHIPPO_API_KEY\nconst SHIPPO_WEBHOOK_SECRET = process.env.SHIPPO_WEBHOOK_SECRET\n\n{\n  resolve: `medusa-fulfillment-shippo`,\n  options: {\n    api_key: SHIPPO_API_KEY,\n    weight_unit_type: 'g',\n    dimension_unit_type: 'cm',\n    webhook_secret: SHIPPO_WEBHOOK_SECRET,\n    webhook_test_mode: false    \n  },\n},\n```\n\n### Endpoints\n\nHooks need to be setup in [Shippo app settings](https://apps.goshippo.com/settings/api)\n\n**transaction\\_created**: `/hooks/shippo/transaction?token=SHIPPO_WEBHOOK_SECRET`\n\n**transaction\\_updated**: `/hooks/shippo/transaction?token=SHIPPO_WEBHOOK_SECRET`\n\n**track\\_updated**: `/hooks/shippo/track?token=SHIPPO_WEBHOOK_SECRET`\n\nThen send a sample. If everything is good you will see this in console:\n\n```shell\nProcessing shippo.received.transaction_created which has 0 subscribers\nProcessing shippo.rejected.transaction_created which has 0 subscribers\n```\n\nThis is the expected behaviour because the data could not be verified. Since it is a sample, when the plugin tried to verify the transaction by requesting the same object back directly from shippo api, it did not exist. It will NOT use input data beyond making the verification, so it gets rejected.\n\n### Test Mode\n\nTest mode bypasses input authenticity verification, i.e. it will use the untrusted input data instead of requesting the same data back from shippo.\n\nThis allows testing using data that does not exist in shippo.\n\nTo enable, set `webhook_test_mode: true` in `medusa-config.js` plugin options.\n\nRunning in test mode is a security risk, enable only for testing purposes.\n\n### transaction\\_created\n\n`/hooks/shippo/transaction?token=SHIPPO_WEBHOOK_SECRET`\n\nReceives shippo transaction object when label purchased\n\n*   Updates fulfillment to “shipped”\n*   Adds tracking number and link to fulfillment\n\n#### Events\n\n`shippo.transaction_created.shipment`\n\n```javascript\n{\n  order_id: \"\",\n  fulfillment_id: \"\",\n  transaction: {...}\n}\n```\n\n`shippo.transaction_created.return_label`\n\n```javascript\n{\n  order_id: \"\",\n  transaction: {...}\n}\n```\n\n### transaction\\_updated\n\n`/hooks/shippo/transaction?token=SHIPPO_WEBHOOK_SECRET`\n\nReceives shippo transaction object when transaction updated\n\n#### Events\n\n`shippo.transaction_updated.payload`\n\n```javascript\n{\n  order_id: \"\",\n  fulfillment_id: \"\",\n  transaction: {...}\n}\n```\n\n### track\\_updated\n\n`/hooks/shippo/track?token=SHIPPO_WEBHOOK_SECRET`\n\n#### Events\n\n`shippo.track_updated.payload`\n\n```javascript\n{\n  ...track\n}\n```\n\n## Public Interface\n\nReferences the declared public interface for client consumption, the [semver](https://semver.org/) \"Declared Public API\"\n\nAlthough there is nothing stopping you from accessing and using public methods behind the interface, be aware that those implementation details can and will change. The purpose of the interface is semver compliant stability.\n\n### Getting Started\n\nDependency inject `shippoService` as you would with any other service\n\nFor guide, see [Using Custom Service](https://docs.medusajs.com/advanced/backend/services/create-service#using-your-custom-service)\n\n***\n\n### account.address()\n\nFetch default sender address\n\n#### Return\n\n`Promise.<object>`\n\n#### Example\n\n```javascript\nawait shippoService.account.address()\n```\n\n***\n\n### order.fetch(id)\n\nFetch an order from shippo\n\n#### Parameters\n\n| Name     | Type       | Description                           |\n|----------|------------|---------------------------------------|\n| id | `String` | The object\\_id for an order |\n\n#### Return\n\n`Promise.<object>`\n\n#### Example\n\n```javascript\nawait shippoService.order.fetch(object_id)\n```\n\n***\n\n### order.with(\\[entity]).fetch(id)\n\nFetch a shippo order with a related entity.\n\n#### Parameters\n\n| Name     | Type       | Description                           |\n|----------|------------|---------------------------------------|\n| id | `String` | The object\\_id for an order |\n| entity | `Array.<string>` | The entity to attach  |\n\n#### Supported Entities\n\n`fulfillment`\n\n#### Return\n\n`Promise.<object>`\n\n#### Example\n\n```javascript\nawait shippoService.order.with([\"fulfillment\"]).fetch(object_id)\n\n/* @return */\n{\n  ...order,\n  fulfillment: {\n    ...fulfillment\n  }\n}\n```\n\n***\n\n### order.fetchBy(\\[entity, id])\n\nFetch a shippo order using the id of a related entity\n\n#### Parameters\n\n`@param {[entity: string, id: string>]}`\n\n| Name     | Type       | Description                           |\n|----------|------------|---------------------------------------|\n| entity | `string` | The entity type to fetch order by |\n| id | `string` | Id of the entity |\n\n#### Supported Entities\n\n`fulfillment` `local_order` `claim` `swap`\n\n#### Return\n\n`Promise.<object|object[]>`\n\n#### Example\n\n```javascript\n/* @return {Promise.<object>} */\n\nawait shippoService.order.fetchBy([\"fulfillment\", id])\n```\n\n```javascript\n/* @return {Promise.<object[]>} */\n\nawait shippoService.order.fetchBy([\"local_order\", id])\n\nawait shippoService.order.fetchBy([\"claim\", id])\n\nawait shippoService.order.fetchBy([\"swap\", id])\n```\n\n***\n\n### package.for(\\[entity, id]).fetch()\n\nBin pack items to determine best fit parcel using package templates from [shippo account](https://apps.goshippo.com/settings/packages)\n\nWill return full output from binpacker, including locus. The first array member is best fit\n\nSee also: [override package templates](#override-parcel-templates)\n\n#### Parameters\n\n`@param {[entity: string, id: string>]}`\n\n| Name     | Type       | Description                           |\n|----------|------------|---------------------------------------|\n| entity | `string` | Entity type  |\n| id | items | `string\\|array` | The id of {\\[entity]} or array of items |\n\n#### Supported Entities\n\n`cart` `local_order` `fulfillment` `line_items`\n\n#### Return\n\n`Promise.<object[]>`\n\n#### Example\n\n```javascript\n// use parcel templates defined in shippo account\n\nawait shippoService.package.for([\"cart\", id]).fetch()\n\nawait shippoService.package.for([\"local_order\", id]).fetch()\n\nawait shippoService.package.for([\"fulfillment\", id]).fetch()\n\nawait shippoService.package.for([\"line_items\", [...lineItems]]).fetch()\n```\n\n#### Override Parcel Templates\n\n`package.set(\"boxes\", [...packages])`\n\n```javascript\nconst packages = [\n  {\n    id: \"id123\",\n    name: \"My Package\",\n    length: \"40\",\n    width: \"30\",\n    height: \"30\",\n    weight: \"10000\", // max-weight\n  },\n  {...}\n]\n\nshippoService.package.set(\"boxes\", packages)\n\nawait shippoService.package.for([\"cart\", id]).get()\n...\n```\n\n***\n\n### packingslip.fetch(id)\n\nFetch the packingslip for shippo order\n\n#### Parameters\n\n| Name     | Type       | Description                           |\n|----------|------------|---------------------------------------|\n| id | `String` | The object\\_id of the order to get packingslip for |\n\n#### Return\n\n`Promise.<object>`\n\n#### Example\n\n```javascript\nconst { object_id } = order\n\nawait shippoService.packingslip.fetch(object_id)\n```\n\n***\n\n### packingslip.with(\\[entity]).fetch(id)\n\nFetch the packingslip for shippo order with a related entity.\n\n#### Parameters\n\n| Name     | Type       | Description                           |\n|----------|------------|---------------------------------------|\n| id | `String` | The object\\_id of the order to get packingslip for |\n| entity | `Array.<string>` | The entity to attach  |\n\n#### Supported Entities\n\n`fulfillment`\n\n#### Return\n\n`Promise.<object>`\n\n#### Example\n\n```javascript\nawait shippoService.packingslip.with([\"fulfillment\"]).fetch(object_id)\n\n/* @return */\n{\n  ...packingslip,\n  fulfillment: {\n    ...fulfillment\n  }\n}\n```\n\n***\n\n### packingslip.fetchBy(\\[entity, id])\n\nFetch the packing slip for a shippo order, using the id of a related entity\n\n#### Parameters\n\n`@param {[entity: string, id: string>]}`\n\n| Name     | Type       | Description                           |\n|----------|------------|---------------------------------------|\n| entity | `string` | The entity type to fetch packingslip by |\n| id | `string` | Id of the entity |\n\n#### Supported Entities\n\n`fulfillment` `local_order` `claim` `swap`\n\n#### Return\n\n`Promise.<object|object[]>`\n\n#### Example\n\n```javascript\n/* @return {Promise.<object>} */\n\nawait shippoService.packingslip.fetchBy([\"fulfillment\", id])\n```\n\n```javascript\n/* @return {Promise.<object[]>} */\n\nawait shippoService.packingslip.fetchBy([\"local_order\", id])\n\nawait shippoService.packingslip.fetchBy([\"claim\", id])\n\nawait shippoService.packingslip.fetchBy([\"swap\", id])\n```\n\n***\n\n### track.fetch(carrier\\_enum, track\\_num)\n\nFetch a tracking status object\n\n#### Parameters\n\n| Name     | Type       | Description                           |\n|----------|------------|---------------------------------------|\n| carrier\\_enum | `string` | The [carrier enum token](https://goshippo.com/docs/reference#carriers) |\n| track\\_num | `string` | The tracking number |\n\n#### Return\n\n`Promise.<object>`\n\n#### Example\n\n```javascript\nawait shippoService.track.fetch(\"usps\", \"trackingnumber\")\n```\n\n***\n\n### track.fetchBy(\\[entity, id])\n\nFetch a tracking status object using id of related entity\n\n`@param {[entity: string, id: string>]}`\n\n| Name     | Type       | Description                           |\n|----------|------------|---------------------------------------|\n| entity | `string` | The entity type to fetch tracking status by |\n| id | `string` | Id of the entity |\n\n#### Supported Entities\n\n`fulfillment`\n\n#### Return\n\n`Promise.<object>`\n\n#### Example\n\n```javascript\nawait shippoService.track.fetchBy([\"fulfillment\", id])\n```\n\n***\n\n### transaction.fetch(id)\n\nFetch a transaction object from shippo.\n\nTo fetch an extended version with additional fields, use `transaction.fetch(id, { type: extended})`\n\n| Name     | Type       | Description                           |\n|----------|------------|---------------------------------------|\n| id | `String` | The object\\_id for transaction |\n\n#### Return\n\n`Promise.<object>`\n\n#### Example\n\n```javascript\nawait shippoService.transaction.fetch(object_id)\n\nawait shippoService.transaction.fetch(object_id, { type: \"extended\" })\n```\n\n### transaction.fetchBy(\\[entity, id])\n\nFetch a transaction using the id of a related entity\n\n#### Parameters\n\n`@param {[entity: string, id: string>]}`\n\n| Name     | Type       | Description                           |\n|----------|------------|---------------------------------------|\n| entity | `string` | The entity type to fetch transaction by |\n| id | `string` | Id of the entity |\n\n#### Supported Entities\n\n`fulfillment` `local_order`\n\n#### Return\n\n`Promise.<object|object[]>`\n\n#### Example\n\n```javascript\nawait shippoService.transaction.fetchBy([\"local_order\", id])\n\nawait shippoService.transaction.fetchBy([\"local_order\", id], { type: \"extended\" })\n\nawait shippoService.transaction.fetchBy([\"fulfillment\", id])\n\nawait shippoService.transaction.fetchBy([\"fulfillment\", id], { type: \"extended\" })\n```\n\n***\n\n### Misc\n\n#### is(\\[entity, id], attr).fetch()\n\n```javascript\nawait shippoService.is([\"transaction\", id], \"return\").fetch()\n\nawait shippoService.is([\"order\", id], \"replace\").fetch()\n```\n\n#### Client\n\n`shippo-node-client` ([forked](#shippo-node-client))\n\n```javascript\nconst client = shippoService.client \n```\n\n#### find(entity).for(\\[entity, id])\n\n```javascript\n/* @experimental */\n\nawait shippoService.find(\"fulfillment\").for([\"transaction\", id])\n\nawait shippoService.find(\"order\").for([\"transaction\", id])\n```\n\n***\n\n### Quick Reference\n\n#### Account\n\n```javascript\nawait shippoService.account.address()\n```\n\n#### Order\n\n```javascript\nawait shippoService.order.fetch(object_id)\n```\n\n```javascript\nawait shippoService.order.with([\"fulfillment\"]).fetch(object_id)\n```\n\n```javascript\nawait shippoService.order.fetchBy([\"fulfillment\", id])\n\nawait shippoService.order.fetchBy([\"local_order\", id])\n\nawait shippoService.order.fetchBy([\"claim\", id])\n\nawait shippoService.order.fetchBy([\"swap\", id])\n```\n\n```javascript\nawait shippoService.is([\"order\", id], \"replace\").fetch()\n```\n\n#### Package\n\n```javascript\nawait shippoService.package.for([\"line_items\", [...lineItems]]).fetch()\n\nawait shippoService.package.for([\"cart\", id]).fetch()\n\nawait shippoService.package.for([\"local_order\", id]).fetch()\n\nawait shippoService.package.for([\"fulfillment\", id]).fetch()\n```\n\n```javascript\n// use any parcel templates \nconst packages = [\n  {\n    id: \"id123\",\n    name: \"My Package\",\n    length: \"40\",\n    width: \"30\",\n    height: \"30\",\n    weight: \"10000\", // max-weight\n  },\n  {...}\n]\n\nshippoService.package.set(\"boxes\", packages)\n\nawait shippoService.package.for([\"cart\", id]).get()\n```\n\n#### Packingslip\n\n```javascript\nawait shippoService.packingslip.fetch(object_id)\n```\n\n```javascript\nawait shippoService.packingslip.with([\"fulfillment\"]).fetch(object_id)\n```\n\n```javascript\nawait shippoService.packingslip.fetchBy([\"fulfillment\", id])\n\nawait shippoService.packingslip.fetchBy([\"local_order\", id]) \n\nawait shippoService.packingslip.fetchBy([\"claim\", id]) \n\nawait shippoService.packingslip.fetchBy([\"swap\", id]) \n```\n\n#### Track\n\n```javascript\nawait shippoService.track.fetch(\"usps\", \"trackingnumber\")\n```\n\n```javascript\nawait shippoService.track.fetchBy([\"fulfillment\", id])\n```\n\n#### Transaction\n\n```javascript\nawait shippoService.transaction.fetch(object_id)\n\nawait shippoService.transaction.fetch(object_id, { type: \"extended\" })\n```\n\n```javascript\nawait shippoService.transaction.fetchBy([\"local_order\", id])\n\nawait shippoService.transaction.fetchBy([\"local_order\", id], { type: \"extended\" })\n\nawait shippoService.transaction.fetchBy([\"fulfillment\", id])\n\nawait shippoService.transaction.fetchBy([\"fulfillment\", id], { type: \"extended\" })\n```\n\n```javascript\nawait shippoService.is([\"transaction\", id], \"return\").fetch()\n```\n\n#### Client\n\n```javascript\nconst client = shippoService.client \n```\n\n#### Find\n\n```javascript\n/* @experimental */\n\nawait shippoService.find(\"fulfillment\").for([\"transaction\", id])\n\nawait shippoService.find(\"order\").for([\"transaction\", id])\n```\n\n## Events\n\nList of all events, their triggers, and expected payload for handlers\n\n[Subscribe to events](https://docs.medusajs.com/advanced/backend/subscribers/create-subscriber) to perform additional operations\n\nThese events only emit if the action pertains to `provider: shippo`\n\n### shippo.order\\_created\n\nTriggered when a new [fulfillment](https://docs.medusajs.com/api/admin/order/create-a-fulfillment) creates a shippo order.\n\n#### Payload\n\n```javascript\n{\n  order_id: \"\",\n  fulfillment_id: \"\",\n  customer_id: \"\",\n  shippo_order: {...}\n}\n```\n\n***\n\n### shippo.return\\_requested\n\nTriggered when a [return is requested](https://docs.medusajs.com/api/admin/order/request-a-return)\n\nIf the return `ShippingMethod` has `provider: shippo` it attempts to find an existing return label in shippo.\n\n#### Payload\n\n```javascript\n{\n  order: {...}, // return order\n  transaction: {...} // shippo transaction for return label OR null\n}\n```\n\n***\n\n### shippo.swap\\_created\n\nTriggered when a [swap is created](https://docs.medusajs.com/api/admin/order/create-a-swap)\n\nIf return `ShippingMethod` has `provider: shippo` it attempts to find an existing return label in shippo.\n\n#### Payload\n\n```javascript\n{\n  order: {...}, // return order\n  transaction: {...} // shippo transaction for return label OR null\n}\n```\n\n***\n\n### shippo.replace\\_order\\_created\n\nTriggered when a [swap](https://docs.medusajs.com/api/admin/order/create-a-swap-fulfillment) or [claim](https://docs.medusajs.com/api/admin/order/create-a-claim-fulfillment) fulfillment is created.\n\nIf the `ShippingMethod` has `provider: shippo` a shippo order is created\n\n#### Payload\n\n```javascript\n{\n  order_id: \"\",\n  fulfillment_id: \"\",\n  customer_id: \"\",\n  shippo_order: {...}\n}\n```\n\n***\n\n### shippo.claim\\_refund\\_created\n\nTriggered when a `type: refund` [claim is created](https://docs.medusajs.com/api/admin/order/create-a-claim)\n\nIf return `ShippingMethod` has `provider: shippo`, it attempts to find an existing return label in shippo\n\n#### Payload\n\n```javascript\n{\n  order: {...}, // return order\n  transaction: {...} // shippo transaction for return label OR null\n}\n```\n\n***\n\n### shippo.claim\\_replace\\_created\n\nTriggered when a `type: replace` [claim is created](https://docs.medusajs.com/api/admin/order/create-a-claim)\n\nIf return `ShippingMethod` has `provider: shippo`, it attempts to find an existing return label in shippo\n\n#### Payload\n\n```javascript\n{\n  order: {...}, // return order\n  transaction: {...} // shippo transaction for return label OR null\n}\n```\n\n***\n\n### shippo.transaction\\_created.shipment\n\nTriggered when the `transaction_created` webhook updates a `Fulfillment` status to `shipped`\n\n#### Payload\n\n```javascript\n{\n  order_id: \"\",\n  fulfillment_id: \"\",\n  transaction: {...}\n}\n```\n\n***\n\n### shippo.transaction\\_created.return\\_label\n\nTriggered when the `transaction_created` webhook receives a return label transaction\n\n#### Payload\n\n```javascript\n{\n  order_id: \"\",\n  transaction: {...}\n}\n```\n\n***\n\n### shippo.transaction\\_updated.payload\n\nTriggered when the `transaction_updated` webhook receives an updated transaction\n\n#### Payload\n\n```javascript\n{\n  order_id: \"\",\n  fulfillment_id: \"\",\n  transaction: {...}\n}\n```\n\n***\n\n### shippo.track\\_updated.payload\n\nTriggered when the `track_updated` webhook receives an updated track\n\n#### Payload\n\n```javascript\n{\n  ...track\n}\n```\n\n***\n\n## Shippo Node Client\n\nThis plugin is using a forked version of the official shippo-node-client. \n\nThe fork adds support for the following endpoints:\n\n*   live-rates\n*   service-groups\n*   user-parcel-templates\n*   orders/:id/packingslip\n*   ...\n*   Doc is WIP\n\nThe client is exposed on the `useClient` property of `shippoClientService`\n\n```javascript\nconst client = shippoService.client\n\n// Forks additional methods\nawait client.liverates.create({...parms})\nawait client.userparceltemplates.list()\nawait client.userparceltemplates.retrieve(id)\nawait client.servicegroups.list()\nawait client.servicegroups.create({...params})\n...\n```\n\nSee [Shippo API Reference](https://goshippo.com/docs/reference) for methods\n\n[Official client](https://github.com/goshippo/shippo-node-client)\n\n[Forked client](https://github.com/macder/shippo-node-client/tree/medusa)\n\n## Shipping Rates\n\nDimensional weight is a major factor in determining costs. Estimates are frivolous when based on inaccurate parcel volume and weight. This raises a challenging problem in computing which parcel box to use. While this is simple for single items, it becomes increasingly difficult when packing multiple items of various dimensions. It is a classic [bin packing problem](https://en.wikipedia.org/wiki/Bin_packing_problem), [NP-Hard](https://en.wikipedia.org/wiki/NP-hardness) stuff.\n\nThis plugin uses [binpackingjs](https://github.com/olragon/binpackingjs) which provides a [first-fit](https://en.wikipedia.org/wiki/First-fit_bin_packing) algorithm. Additional logic is wrapped around it to get a more optimized [first-fit-decreasing](https://en.wikipedia.org/wiki/First-fit-decreasing_bin_packing) algorithm. In order for this to be effective, parcel templates need to be setup in the Shippo account, and all products in medusa must have values for length, width, height, and weight.\n\n### Accuracy of Rates\n\nShipping rate estimates are calculated by third parties using data you supply. The onus is on the store admin to supply accurate data values about their products and packaging. This plugin does its best to use this data to create optimized requests, within reason and scope, to retrieve rates from Shippo. The intent is to provide a cost-cutting solution, but there is no one-size-fits all.\n\nAssuming accurate data for product dimensions, weight, and package templates in shippo reflect a carefully planned boxing strategy, expect reasonably accurate rates for single item and multi-item fulfillment's that fit in a single parcel. Multi parcel for rates at checkout is currently not supported (future consideration). If items cannot fit into a single box, the default package template set in [Shippo app settings](https://apps.goshippo.com/settings/rates-at-checkout) is used.\n\n## Limitations\n\nNo support for customs declarations. Planned for future release.\n\n## Resources\n\nMedusa Docs\\\nhttps://docs.medusajs.com/\n\nMedusa Shipping Architecture:\\\nhttps://docs.medusajs.com/advanced/backend/shipping/overview\n\nShippo API\\\nhttps://goshippo.com/docs/intro\\\nhttps://goshippo.com/docs/reference\n","readmeFilename":"README.md","gitHead":"22128ee248bd51dba192d6d3fc57f93177e86015","bugs":{"url":"https://github.com/macder/medusa-fulfillment-shippo/issues"},"homepage":"https://github.com/macder/medusa-fulfillment-shippo#readme","_id":"medusa-fulfillment-shippo@1.0.0-beta.3","_nodeVersion":"16.15.1","_npmVersion":"8.11.0","dist":{"integrity":"sha512-bb4ReZpjvlsI5kRRiYbtYB9kbhDt3E6iLU0RDEADxZ91yKP7jC/9kPP+U7HxsB10lBi//auonptg4Jnrvrkp2g==","shasum":"8470286d991ae2a6105f439d757a873ad006d8ba","tarball":"https://registry.npmjs.org/medusa-fulfillment-shippo/-/medusa-fulfillment-shippo-1.0.0-beta.3.tgz","fileCount":26,"unpackedSize":491797,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIH0OEuhIrUMq8m23ULCKsDAQn4SSQgJle2qApiEGlKQRAiEA41em8Z5+OY5frkr7JaX6Ea2sEN1GeOcFS2xTJHVBspc="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJi9KHXACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmqLvxAAmMdeGFRgFOjdHoLdpSS/Vf7Bt7bh18hWHBmTHXWm+hjNSiVA\r\na271PuFhbHrm8sfA3v9Cvokutu18tU3S1yjyFZrBRns8GqJ0HX9n92eV4bbJ\r\nH1RpYQbRAhLcwAgsJ3MfEddZuxkrK7AG4t/hDA4WwlJAkL51EiPCrJKRJf6t\r\nxjvjiZXz2B4MaHgqx+FtT8jfv/IBYdk6e+0fo9qJoW2s4bjaNA288cqQvfQg\r\nl1XbHFxB7NTsJhWKCdIgByCqqZaj7juCQc7W5r17S1xix6oLVYu3s2B5Y7oc\r\niS47NJ1Kx8Jcg0RWYe0fzDOHk4M7GjMbG1ieLDareeaVyKif2lkIZM/wvZ/Y\r\ntSnutKnX9W6bdmnpEOA9dv74643PabI+h1/s6QDXKGS03NOxLJXs7zT88CSq\r\nhKRzZi5epNytvpKEEzPRml6EDmhCm7jyzmnNemXpytEf0BoZE/9lz4x+TIca\r\ntWLkvmUQLfW16mDmk7dEbhkrvlzVPrgElhIutOkFgUao94f6AS3b1JLU9Km6\r\nVQ3mRhxSI87ZsITKkxv3tX80P1yhJ6f2uHCNoOpJMZFH0zt75yb5CA5T5TDA\r\nsyc3SQWG49IQkb0poaH4eIYSvSmie0tiTvC1HhfqpfLRnvv4uKS+QVZvY0vb\r\nEZKsY5if3aWMCMRbSWgzmbqy/Pk1edKFuXM=\r\n=FSaw\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"macder","email":"maciej@derulski.com"},"directories":{},"maintainers":[{"name":"macder","email":"maciej@derulski.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/medusa-fulfillment-shippo_1.0.0-beta.3_1660199382816_0.9358940378505098"},"_hasShrinkwrap":false},"0.29.0":{"name":"medusa-fulfillment-shippo","version":"0.29.0","description":"Shippo fulfillment provider for medusa","author":{"name":"Maciej Derulski"},"license":"MIT","scripts":{"build":"babel src -d . --ignore **/__tests__,**/__mocks__,**/sandbox,**/sand.js,**/old-tests","prepare":"cross-env NODE_ENV=production npm run build","watch":"onchange -v src/** -- copyfiles {{file}} ../my-medusa-store","test":"jest --runInBand"},"dependencies":{"@macder/shippo":"^1.0.0","@macder/binpackingjs":"^2.3.2","body-parser":"^1.20.0","express":"^4.18.1","express-rate-limit":"^6.5.1","medusa-core-utils":"^1.1.31"},"peerDependencies":{"medusa-interfaces":"1.x"},"repository":{"type":"git","url":"git+https://github.com/macder/medusa-fulfillment-shippo.git"},"keywords":["medusa","medusa-plugin","medusa-fulfillment","medusa-shippo"],"devDependencies":{"@babel/cli":"^7.7.5","@babel/core":"^7.7.5","@babel/eslint-parser":"^7.15.8","@babel/node":"^7.7.4","@babel/plugin-proposal-class-properties":"^7.7.4","@babel/plugin-transform-classes":"^7.9.5","@babel/plugin-transform-instanceof":"^7.8.3","@babel/plugin-transform-runtime":"^7.7.6","@babel/preset-env":"^7.7.5","@babel/register":"^7.7.4","@babel/runtime":"^7.9.6","@faker-js/faker":"^7.3.0","client-sessions":"^0.8.0","copyfiles":"^2.4.1","cross-env":"^5.2.1","eslint":"^8.20.0","eslint-config-airbnb-base":"^15.0.0","eslint-config-prettier":"^8.3.0","eslint-plugin-import":"^2.26.0","eslint-plugin-prettier":"^4.0.0","jest":"^28.1.2","jest-extended":"2.0.0","medusa-test-utils":"^1.1.37","onchange":"^7.1.0"},"gitHead":"91507f418d256b676db9443da29a1e89c9d6f08c","bugs":{"url":"https://github.com/macder/medusa-fulfillment-shippo/issues"},"homepage":"https://github.com/macder/medusa-fulfillment-shippo#readme","_id":"medusa-fulfillment-shippo@0.29.0","_nodeVersion":"16.15.1","_npmVersion":"8.11.0","dist":{"integrity":"sha512-HQA6p3SBKaQdrOy4Jl5XrNsJ8SLkrLSaklPrtZZguGAbDEmAfDyUSWtu8eqRNYu4x4FXBJ0V1wHdiv2oB8qEjQ==","shasum":"4ad615c9952b7a58d0798a60831407eb6fb49fe4","tarball":"https://registry.npmjs.org/medusa-fulfillment-shippo/-/medusa-fulfillment-shippo-0.29.0.tgz","fileCount":26,"unpackedSize":491694,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDVyWuoKdO3bYyg4k/S2EPuwxROlhMQR3QHp25ThH+drQIhAMUOu1hYjiG06eeQOTtJPrOSJpYxpeFkTLU80/wiqVxz"}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJi9durACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmqf5Q/9E6Ll/LPyQzmuxNurvprdH2tUWQbiUsHQEmSftzX0O6veJdHe\r\nSCuxVkSpQReU8BjhSF4ap9VZfWJkoNjFndznKBh6cjfbJwVEPeMfJea+0y6U\r\nTmuj6Rs42fs0XV1z7J3yjvr/XmglDl06Sw2xLKqfr+6nn/vWZ7M9j/J1UkW1\r\nOhE4fMOsZfPMvUGscwVonBP1JKtR+dw9ZbueI57E0I2hSuNAJWpLyO3ytwAn\r\n2uTY1eOkRVw+3LSY5+iT1YDsRAuw8bTR8lBhFitPAX7FVIJ67s1VJ6kVnd3e\r\nu8XSg6Q8lLJX3Ai4IFTlk+RUCegANi+lCyrSW1R3Vo641u5yhokiKOI4lZz8\r\nxzj6L0kdgtwR49Ly+pAUv+pmDs5PpcpszwYNdRFTfmdQnHY7bZbxGWckq5rf\r\nOOfGH8574SKMJfY+qqewpzgLXpJoK7sIKxmLLN1jBMUDwiVxZ0i9I+DU6wNX\r\n2snaJjscyJSVFKk+SlRGtxUy+VZB/fdoQFq6bdAm4S1xOOe/dOrKe/zI9a3R\r\n5gfpmlVNXkUGMz5fUttxwp3IISxiexYReoja8b66do2qRZYi/EKUc3v03x/e\r\n9Mqj0QKOcI2jPNzICf0hy604f2pkoV20N1viABKM0Ess26/RoQTbQ688WFN3\r\n611eIddTh7ZIYaL+LS7ryaRLhmNaRqU+1eE=\r\n=D8+C\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"macder","email":"maciej@derulski.com"},"directories":{},"maintainers":[{"name":"macder","email":"maciej@derulski.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/medusa-fulfillment-shippo_0.29.0_1660279722741_0.18444542281067"},"_hasShrinkwrap":false},"1.0.0-rc.0":{"name":"medusa-fulfillment-shippo","version":"1.0.0-rc.0","description":"Shippo fulfillment provider for medusa","author":{"name":"Maciej Derulski"},"license":"MIT","scripts":{"build":"babel src -d . --ignore **/__tests__,**/__mocks__,**/sandbox,**/sand.js,**/old-tests","prepare":"cross-env NODE_ENV=production npm run build","watch":"onchange -v src/** -- copyfiles {{file}} ../my-medusa-store","test":"jest --runInBand"},"dependencies":{"@macder/shippo":"^1.0.0","@macder/binpackingjs":"^2.3.2","body-parser":"^1.20.0","express":"^4.18.1","express-rate-limit":"^6.5.1","medusa-core-utils":"^1.1.31"},"peerDependencies":{"medusa-interfaces":"1.x"},"repository":{"type":"git","url":"git+https://github.com/macder/medusa-fulfillment-shippo.git"},"keywords":["medusa","medusa-plugin","medusa-fulfillment","medusa-shippo"],"devDependencies":{"@babel/cli":"^7.7.5","@babel/core":"^7.7.5","@babel/eslint-parser":"^7.15.8","@babel/node":"^7.7.4","@babel/plugin-proposal-class-properties":"^7.7.4","@babel/plugin-transform-classes":"^7.9.5","@babel/plugin-transform-instanceof":"^7.8.3","@babel/plugin-transform-runtime":"^7.7.6","@babel/preset-env":"^7.7.5","@babel/register":"^7.7.4","@babel/runtime":"^7.9.6","@faker-js/faker":"^7.3.0","client-sessions":"^0.8.0","copyfiles":"^2.4.1","cross-env":"^5.2.1","eslint":"^8.20.0","eslint-config-airbnb-base":"^15.0.0","eslint-config-prettier":"^8.3.0","eslint-plugin-import":"^2.26.0","eslint-plugin-prettier":"^4.0.0","jest":"^28.1.2","jest-extended":"2.0.0","medusa-test-utils":"^1.1.37","onchange":"^7.1.0"},"readme":"# medusa-fulfillment-shippo\n\n[![CircleCI](https://dl.circleci.com/status-badge/img/gh/macder/medusa-fulfillment-shippo/tree/main.svg?style=shield)](https://dl.circleci.com/status-badge/redirect/gh/macder/medusa-fulfillment-shippo/tree/main)\n[![Codacy Badge](https://app.codacy.com/project/badge/Grade/5ca5e600f1574354a8056441f589ca80)](https://www.codacy.com/gh/macder/medusa-fulfillment-shippo/dashboard?utm_source=github.com\\&utm_medium=referral\\&utm_content=macder/medusa-fulfillment-shippo\\&utm_campaign=Badge_Grade)\n[![Codacy Badge](https://app.codacy.com/project/badge/Coverage/5ca5e600f1574354a8056441f589ca80)](https://www.codacy.com/gh/macder/medusa-fulfillment-shippo/dashboard?utm_source=github.com\\&utm_medium=referral\\&utm_content=macder/medusa-fulfillment-shippo\\&utm_campaign=Badge_Coverage)\n![npm (tag)](https://img.shields.io/npm/v/medusa-fulfillment-shippo/latest)\n![npm (tag)](https://img.shields.io/npm/v/medusa-fulfillment-shippo/beta)\n\n> :information\\_source: Requires Medusa ^1.3.5\n\nShippo fulfillment provider for Medusa Commerce.\n\nProvides fulfillment options using carrier service levels and user created service groups that can be used to create shipping options for profiles and regions.\n\nRates at checkout optimized with a [first-fit-decreasing (FFD)](https://en.wikipedia.org/wiki/First-fit-decreasing_bin_packing) bin packing algorithm.\n\nFulfillments create orders in shippo.\n\nSupports returns, exchanges, and claims.\n\nPublic interface for rapid custom integration. [Reference](#public-interface) | [Quick Reference](#quick-reference)\n\n[Eventbus payloading](#events) instead of arbitrary data assumption and storage.\n\n## Table of Contents\n\n*   [Getting Started](#getting-started)\n*   [Orders](#orders)\n*   [Packing Slips](#packing-slips)\n*   [Returns](#returns)\n    *   [Request](#request)\n*   [Swaps](#swaps)\n    *   [Create](#create)\n    *   [Fulfillment](#fulfillment)\n*   [Claims](#claims)\n    *   [Refund](#refund)\n    *   [Replace](#replace)\n    *   [Fulfillment](#fulfillment-1)\n*   [Rates at Checkout](#rates-at-checkout)\n    *   [Shipping Options in Shippo App](#setup-shipping-options-in-shippo-app)\n    *   [Assign Shipping Options to Regions in Medusa](#assign-shipping-options-to-regions-in-medusa)\n    *   [During Checkout](#during-checkout)\n    *   [Set rates for cart](#set-rates-for-cart)\n    *   [Add to Cart](#add-to-carlst)\n    *   [Help, adding a shipping method to cart throws an error](#help-adding-a-shipping-method-to-cart-throws-an-error)\n*   [Webhooks](#webhooks)\n*   [Public Interface](#public-interface)\n    *   [Detailed Reference](#public-interface)\n    *   [Quick Reference](#quick-reference)\n*   [Events](#events)\n*   [Shippo Node Client](#shippo-node-client)\n*   [Shipping Rates](#shipping-rates)\n*   [Limitations](#limitations)\n*   [Resources](#resources)\n\n## Getting started\n\nInstall:\n\n`> npm i medusa-fulfillment-shippo`\n\nAdd to medusa-config.js\n\n```javascript\n{\n  resolve: `medusa-fulfillment-shippo`,\n    options: {\n      api_key: SHIPPO_API_KEY,\n      weight_unit_type: 'g', // valid values: g, kg, lb, oz\n      dimension_unit_type: 'cm', // valid values: cm, mm, in\n      webhook_secret: '', // README section on webhooks before using!\n      webhook_test_mode: false\n    },\n}\n```\n\n## Orders\n\nCreating an order fulfillment makes a new order in shippo. An event is emitted with the response data and related internal ids.\n\n[Create a Subscriber](https://docs.medusajs.com/advanced/backend/subscribers/create-subscriber) to access the data.\n\n**Event:**\n`shippo.order_created`\n\n```javascript\n{\n  order_id: \"\",\n  fulfillment_id: \"\",\n  customer_id: \"\",\n  shippo_order: {...}\n}\n```\n\n### Retrieve\n\n```javascript\nawait shippoService.order.fetch(object_id)\n\nawait shippoService.order.fetchBy([\"fulfillment\", ful_id]\n\nawait shippoService.order.with([\"fulfillment\"]).fetch(object_id)\n```\n\n[See references](#order) for all methods\n\n## Packing Slips\n\n### Retrieve\n\n```javascript\nconst { object_id } = order\n\nawait shippoService.packingslip.fetch(object_id)\n\nawait shippoService.packingslip.fetchBy([\"fulfillment\"], ful_id)\n\nawait shippoService.packingslip.with([\"fulfillment\"]).fetch(object_id)\n```\n\n[See references](#packingslip) for all methods\n\n## Returns\n\n### Request\n\nInvoked when [Request a Return](https://docs.medusajs.com/api/admin/order/request-a-return) `return_shipping` has `provider: shippo`\n\nAttempts fetching an existing return label from shippo.\n\n**Event:**\n`shippo.return_requested`\n\n```javascript\n{\n  order: {...}, // return order\n  transaction: {...} // shippo transaction for return label OR null\n}\n```\n\n## Swaps\n\n### Create\n\nInvoked when [Create a Swap](https://docs.medusajs.com/api/admin/order/create-a-swap) `return_shipping` has `provider: shippo`\n\nAttempts fetching an existing return label from shippo.\n\n**Event:**\n`shippo.swap_created`\n\n```javascript\n{\n  order: {...}, // return order\n  transaction: {...} // shippo transaction for return label OR null\n}\n```\n\n### Fulfillment\n\nInvoked when [Create a Swap Fulfillment](https://docs.medusajs.com/api/admin/order/create-a-swap-fulfillment) `shipping_option` has `provider: shippo`\n\nCreates an order in shippo.\n\n**Event:**\n`shippo.replace_order_created`\n\n```javascript\n{\n  order_id: \"\",\n  fulfillment_id: \"\",\n  customer_id: \"\",\n  shippo_order: {...}\n}\n```\n\n## Claims\n\n### Refund\n\nInvoked when [Create a Claim](https://docs.medusajs.com/api/admin/order/create-a-claim) has `type: refund` and `return_shipping` has `provider: shippo`\n\nAttempts fetching an existing return label from shippo.\n\n**Event:**\n`shippo.claim_refund_created`\n\n```javascript\n{\n  order: {...}, // return order\n  transaction: {...} // shippo transaction for return label OR null\n}\n```\n\n### Replace\n\nInvoked when [Create a Claim](https://docs.medusajs.com/api/admin/order/create-a-claim) has `type: replace` and `return_shipping` has `provider: shippo`\n\nAttempts fetching an existing return label from shippo.\n\n**Event:**\n`shippo.claim_replace_created`\n\n```javascript\n{\n  order: {...}, // return order\n  transaction: {...} // shippo transaction for return label OR null\n}\n```\n\n### Fulfillment\n\nInvoked when [Create a Claim Fulfillment](https://docs.medusajs.com/api/admin/order/create-a-claim-fulfillment) `shipping_option` has `provider: shippo`\n\nCreates an order in shippo.\n\n**Event:**\n`shippo.replace_order_created`\n\n```javascript\n{\n  order_id: \"\",\n  fulfillment_id: \"\",\n  customer_id: \"\",\n  shippo_order: {...}\n}\n```\n\n## Rates at Checkout\n\nProvide customers with accurate shipping rates at checkout to reduce over and under charges. This plugin implements a first-fit-decreasing bin packing algorithm to choose an appropriate parcel for the items in a cart. Follow this guide to get setup and then optimize.\n\n### Setup Shipping Options in Shippo App\n\nLets assume shipping from Canada to customers in Canada and USA via “Standard” and “Express” options\n\nThis would require setting up 4 shipping options in Shippo (\\<https://apps.goshippo.com/settings/rates-at-checkout>)\n\n1.  Standard Shipping Canada\n2.  Express Shipping Canada\n3.  Standard Shipping USA\n4.  Express Shiping USA\n\nSet each shipping option to “Live rate” and assign *service(s)* to them\n\nFor example:\n\n*   Express Shipping Canada: *Canada Post XpressPost*\n*   Express Shipping USA: *Canada Post XpressPost USA*\n*   *…*\n\nFor more in-depth details see https://support.goshippo.com/hc/en-us/articles/4403207559963\n\n### Assign Shipping Options to Regions in Medusa\n\nCreate shipping options for regions as usual\n\n[See here for common issue](#help-adding-a-shipping-method-to-cart-throws-an-error)\n\n### Setup parcel templates\n\nCreate package templates in the [Shippo app settings](https://apps.goshippo.com/settings/packages)\n\nTo get most optimal results, it is recommended to create package templates for all your shipping boxes.\n\n### Verify product dimensions and weight\n\nIn your medusa store, make sure products have correct values for length, width, height, weight\n\n### During Checkout\n\n[Retrieve shipping options for cart](https://docs.medusajs.com/api/store/shipping-option/retrieve-shipping-options-for-cart) as usual and any `price_type: calculated` options belonging to `provider: shippo` will have `amount: Number`.\n\nRates calculate only if cart has shipping address and items\n\n**HTTP:**\n\n```plaintext\nGET /store/shipping-options/:cart_id\n```\n\n**Service:**\n\n```javascript\nconst shippingOptions = await shippingProfileService.fetchCartOptions(cart)\n```\n\n### Add to Cart\n\n[Add a Shipping Method](https://docs.medusajs.com/api/store/cart/add-a-shipping-method) and if  `shipping_option` has `price_type: calculated` the rate will be saved to the `shipping_method`\n\n**HTTP:**\n\n```plaintext\nPOST /store/carts/:id/shipping-methods\n --data '{\"option_id\":\"example_cart_option_id\"}'\n```\n\n### Help, adding a shipping method to cart throws an error\n\nThis is an issue with medusa-admin. Examine line 85 [`admin/src/domain/settings/regions/new-shipping.tsx`](https://github.com/medusajs/admin/blob/a33ed20214297ffdbd2383f809dddd4870f5dad9/src/domain/settings/regions/new-shipping.tsx#L85)\n\nOptions with `price_type: flat_rate` will not pass through [`fulFillmentProviderService.calculatePrice()`](https://docs.medusajs.com/references/services/classes/FulfillmentProviderService#calculateprice)\n\nmedusa-admin is still early phase software.\n\nWorkaround it, use the REST api directly, or patch the issue for now\n\nPossible interim solution:\n\n```javascript\nprice_type: (options[optionIndex].type === \"LIVE_RATE\") \n    ? \"calculated\" \n    : \"flat_rate\",\n```\n\n## Webhooks\n\n### Caution\n\nIncoming HTTP requests from Shippo to webhook endpoints lack authentication. No secret token, no signature in the request header, no bearer, nothing.\n\nBefore enabling webhooks, understand the risks of an open and insecure HTTP endpoint that consumes data, and how to mitigate this. Please DO NOT use this without SSL/TLS. [Whitelisting shippo IP's](https://groups.google.com/g/shippo-api-announce/c/1A6m6Snvypk) is a good idea. There are also intermediary third party services such as pipedream and hookdeck that can be used to relay requests.\n\nYou will also need to self generate a token and add it as a url query param. Ya I know… but it's better than nothing and it is encrypted over HTTPS\n\nThe flow at the code level is:\n\n1.  Webhook receives POST data\n2.  URL query token is verified\n3.  The request json gets verified by fetching the same object directly from shippo API, following these steps:\n    1.  Request body contains json claiming to be a shippo object. \n    2.  Ok, but lets fetch this object directly from Shippo's API\n    3.  If the fetch resolves to the object requested, then use that data instead of the untrusted input \n    4.  Otherwise throw a HTTP 500 and do nothing\n\n### Setup\n\nIn `.env` add `SHIPPO_WEBHOOK_SECRET=some_secret_string` \n\nAdd to `medusa-config.js`\n\n```javascript\nconst SHIPPO_API_KEY = process.env.SHIPPO_API_KEY\nconst SHIPPO_WEBHOOK_SECRET = process.env.SHIPPO_WEBHOOK_SECRET\n\n{\n  resolve: `medusa-fulfillment-shippo`,\n  options: {\n    api_key: SHIPPO_API_KEY,\n    weight_unit_type: 'g',\n    dimension_unit_type: 'cm',\n    webhook_secret: SHIPPO_WEBHOOK_SECRET,\n    webhook_test_mode: false    \n  },\n},\n```\n\n### Endpoints\n\nHooks need to be setup in [Shippo app settings](https://apps.goshippo.com/settings/api)\n\n**transaction\\_created**: `/hooks/shippo/transaction?token=SHIPPO_WEBHOOK_SECRET`\n\n**transaction\\_updated**: `/hooks/shippo/transaction?token=SHIPPO_WEBHOOK_SECRET`\n\n**track\\_updated**: `/hooks/shippo/track?token=SHIPPO_WEBHOOK_SECRET`\n\nThen send a sample. If everything is good you will see this in console:\n\n```shell\nProcessing shippo.received.transaction_created which has 0 subscribers\nProcessing shippo.rejected.transaction_created which has 0 subscribers\n```\n\nThis is the expected behaviour because the data could not be verified. Since it is a sample, when the plugin tried to verify the transaction by requesting the same object back directly from shippo api, it did not exist. It will NOT use input data beyond making the verification, so it gets rejected.\n\n### Test Mode\n\nTest mode bypasses input authenticity verification, i.e. it will use the untrusted input data instead of requesting the same data back from shippo.\n\nThis allows testing using data that does not exist in shippo.\n\nTo enable, set `webhook_test_mode: true` in `medusa-config.js` plugin options.\n\nRunning in test mode is a security risk, enable only for testing purposes.\n\n### transaction\\_created\n\n`/hooks/shippo/transaction?token=SHIPPO_WEBHOOK_SECRET`\n\nReceives shippo transaction object when label purchased\n\n*   Updates fulfillment to “shipped”\n*   Adds tracking number and link to fulfillment\n\n#### Events\n\n`shippo.transaction_created.shipment`\n\n```javascript\n{\n  order_id: \"\",\n  fulfillment_id: \"\",\n  transaction: {...}\n}\n```\n\n`shippo.transaction_created.return_label`\n\n```javascript\n{\n  order_id: \"\",\n  transaction: {...}\n}\n```\n\n### transaction\\_updated\n\n`/hooks/shippo/transaction?token=SHIPPO_WEBHOOK_SECRET`\n\nReceives shippo transaction object when transaction updated\n\n#### Events\n\n`shippo.transaction_updated.payload`\n\n```javascript\n{\n  order_id: \"\",\n  fulfillment_id: \"\",\n  transaction: {...}\n}\n```\n\n### track\\_updated\n\n`/hooks/shippo/track?token=SHIPPO_WEBHOOK_SECRET`\n\n#### Events\n\n`shippo.track_updated.payload`\n\n```javascript\n{\n  ...track\n}\n```\n\n## Public Interface\n\nReferences the declared public interface for client consumption, the [semver](https://semver.org/) \"Declared Public API\"\n\nAlthough there is nothing stopping you from accessing and using public methods behind the interface, be aware that those implementation details can and will change. The purpose of the interface is semver compliant stability.\n\n### Getting Started\n\nDependency inject `shippoService` as you would with any other service\n\nFor guide, see [Using Custom Service](https://docs.medusajs.com/advanced/backend/services/create-service#using-your-custom-service)\n\n***\n\n### account.address()\n\nFetch default sender address\n\n#### Return\n\n`Promise.<object>`\n\n#### Example\n\n```javascript\nawait shippoService.account.address()\n```\n\n***\n\n### order.fetch(id)\n\nFetch an order from shippo\n\n#### Parameters\n\n| Name     | Type       | Description                           |\n|----------|------------|---------------------------------------|\n| id | `String` | The object\\_id for an order |\n\n#### Return\n\n`Promise.<object>`\n\n#### Example\n\n```javascript\nawait shippoService.order.fetch(object_id)\n```\n\n***\n\n### order.with(\\[entity]).fetch(id)\n\nFetch a shippo order with a related entity.\n\n#### Parameters\n\n| Name     | Type       | Description                           |\n|----------|------------|---------------------------------------|\n| id | `String` | The object\\_id for an order |\n| entity | `Array.<string>` | The entity to attach  |\n\n#### Supported Entities\n\n`fulfillment`\n\n#### Return\n\n`Promise.<object>`\n\n#### Example\n\n```javascript\nawait shippoService.order.with([\"fulfillment\"]).fetch(object_id)\n\n/* @return */\n{\n  ...order,\n  fulfillment: {\n    ...fulfillment\n  }\n}\n```\n\n***\n\n### order.fetchBy(\\[entity, id])\n\nFetch a shippo order using the id of a related entity\n\n#### Parameters\n\n`@param {[entity: string, id: string>]}`\n\n| Name     | Type       | Description                           |\n|----------|------------|---------------------------------------|\n| entity | `string` | The entity type to fetch order by |\n| id | `string` | Id of the entity |\n\n#### Supported Entities\n\n`fulfillment` `local_order` `claim` `swap`\n\n#### Return\n\n`Promise.<object|object[]>`\n\n#### Example\n\n```javascript\n/* @return {Promise.<object>} */\n\nawait shippoService.order.fetchBy([\"fulfillment\", id])\n```\n\n```javascript\n/* @return {Promise.<object[]>} */\n\nawait shippoService.order.fetchBy([\"local_order\", id])\n\nawait shippoService.order.fetchBy([\"claim\", id])\n\nawait shippoService.order.fetchBy([\"swap\", id])\n```\n\n***\n\n### package.for(\\[entity, id]).fetch()\n\nBin pack items to determine best fit parcel using package templates from [shippo account](https://apps.goshippo.com/settings/packages)\n\nWill return full output from binpacker, including locus. The first array member is best fit\n\nSee also: [override package templates](#override-parcel-templates)\n\n#### Parameters\n\n`@param {[entity: string, id: string>]}`\n\n| Name     | Type       | Description                           |\n|----------|------------|---------------------------------------|\n| entity | `string` | Entity type  |\n| id | items | `string\\|array` | The id of {\\[entity]} or array of items |\n\n#### Supported Entities\n\n`cart` `local_order` `fulfillment` `line_items`\n\n#### Return\n\n`Promise.<object[]>`\n\n#### Example\n\n```javascript\n// use parcel templates defined in shippo account\n\nawait shippoService.package.for([\"cart\", id]).fetch()\n\nawait shippoService.package.for([\"local_order\", id]).fetch()\n\nawait shippoService.package.for([\"fulfillment\", id]).fetch()\n\nawait shippoService.package.for([\"line_items\", [...lineItems]]).fetch()\n```\n\n#### Override Parcel Templates\n\n`package.set(\"boxes\", [...packages])`\n\n```javascript\nconst packages = [\n  {\n    id: \"id123\",\n    name: \"My Package\",\n    length: \"40\",\n    width: \"30\",\n    height: \"30\",\n    weight: \"10000\", // max-weight\n  },\n  {...}\n]\n\nshippoService.package.set(\"boxes\", packages)\n\nawait shippoService.package.for([\"cart\", id]).get()\n...\n```\n\n***\n\n### packingslip.fetch(id)\n\nFetch the packingslip for shippo order\n\n#### Parameters\n\n| Name     | Type       | Description                           |\n|----------|------------|---------------------------------------|\n| id | `String` | The object\\_id of the order to get packingslip for |\n\n#### Return\n\n`Promise.<object>`\n\n#### Example\n\n```javascript\nconst { object_id } = order\n\nawait shippoService.packingslip.fetch(object_id)\n```\n\n***\n\n### packingslip.with(\\[entity]).fetch(id)\n\nFetch the packingslip for shippo order with a related entity.\n\n#### Parameters\n\n| Name     | Type       | Description                           |\n|----------|------------|---------------------------------------|\n| id | `String` | The object\\_id of the order to get packingslip for |\n| entity | `Array.<string>` | The entity to attach  |\n\n#### Supported Entities\n\n`fulfillment`\n\n#### Return\n\n`Promise.<object>`\n\n#### Example\n\n```javascript\nawait shippoService.packingslip.with([\"fulfillment\"]).fetch(object_id)\n\n/* @return */\n{\n  ...packingslip,\n  fulfillment: {\n    ...fulfillment\n  }\n}\n```\n\n***\n\n### packingslip.fetchBy(\\[entity, id])\n\nFetch the packing slip for a shippo order, using the id of a related entity\n\n#### Parameters\n\n`@param {[entity: string, id: string>]}`\n\n| Name     | Type       | Description                           |\n|----------|------------|---------------------------------------|\n| entity | `string` | The entity type to fetch packingslip by |\n| id | `string` | Id of the entity |\n\n#### Supported Entities\n\n`fulfillment` `local_order` `claim` `swap`\n\n#### Return\n\n`Promise.<object|object[]>`\n\n#### Example\n\n```javascript\n/* @return {Promise.<object>} */\n\nawait shippoService.packingslip.fetchBy([\"fulfillment\", id])\n```\n\n```javascript\n/* @return {Promise.<object[]>} */\n\nawait shippoService.packingslip.fetchBy([\"local_order\", id])\n\nawait shippoService.packingslip.fetchBy([\"claim\", id])\n\nawait shippoService.packingslip.fetchBy([\"swap\", id])\n```\n\n***\n\n### track.fetch(carrier\\_enum, track\\_num)\n\nFetch a tracking status object\n\n#### Parameters\n\n| Name     | Type       | Description                           |\n|----------|------------|---------------------------------------|\n| carrier\\_enum | `string` | The [carrier enum token](https://goshippo.com/docs/reference#carriers) |\n| track\\_num | `string` | The tracking number |\n\n#### Return\n\n`Promise.<object>`\n\n#### Example\n\n```javascript\nawait shippoService.track.fetch(\"usps\", \"trackingnumber\")\n```\n\n***\n\n### track.fetchBy(\\[entity, id])\n\nFetch a tracking status object using id of related entity\n\n`@param {[entity: string, id: string>]}`\n\n| Name     | Type       | Description                           |\n|----------|------------|---------------------------------------|\n| entity | `string` | The entity type to fetch tracking status by |\n| id | `string` | Id of the entity |\n\n#### Supported Entities\n\n`fulfillment`\n\n#### Return\n\n`Promise.<object>`\n\n#### Example\n\n```javascript\nawait shippoService.track.fetchBy([\"fulfillment\", id])\n```\n\n***\n\n### transaction.fetch(id)\n\nFetch a transaction object from shippo.\n\nTo fetch an extended version with additional fields, use `transaction.fetch(id, { type: extended})`\n\n| Name     | Type       | Description                           |\n|----------|------------|---------------------------------------|\n| id | `String` | The object\\_id for transaction |\n\n#### Return\n\n`Promise.<object>`\n\n#### Example\n\n```javascript\nawait shippoService.transaction.fetch(object_id)\n\nawait shippoService.transaction.fetch(object_id, { type: \"extended\" })\n```\n\n### transaction.fetchBy(\\[entity, id])\n\nFetch a transaction using the id of a related entity\n\n#### Parameters\n\n`@param {[entity: string, id: string>]}`\n\n| Name     | Type       | Description                           |\n|----------|------------|---------------------------------------|\n| entity | `string` | The entity type to fetch transaction by |\n| id | `string` | Id of the entity |\n\n#### Supported Entities\n\n`fulfillment` `local_order`\n\n#### Return\n\n`Promise.<object|object[]>`\n\n#### Example\n\n```javascript\nawait shippoService.transaction.fetchBy([\"local_order\", id])\n\nawait shippoService.transaction.fetchBy([\"local_order\", id], { type: \"extended\" })\n\nawait shippoService.transaction.fetchBy([\"fulfillment\", id])\n\nawait shippoService.transaction.fetchBy([\"fulfillment\", id], { type: \"extended\" })\n```\n\n***\n\n### Misc\n\n#### is(\\[entity, id], attr).fetch()\n\n```javascript\nawait shippoService.is([\"transaction\", id], \"return\").fetch()\n\nawait shippoService.is([\"order\", id], \"replace\").fetch()\n```\n\n#### Client\n\n`shippo-node-client` ([forked](#shippo-node-client))\n\n```javascript\nconst client = shippoService.client \n```\n\n#### find(entity).for(\\[entity, id])\n\n```javascript\n/* @experimental */\n\nawait shippoService.find(\"fulfillment\").for([\"transaction\", id])\n\nawait shippoService.find(\"order\").for([\"transaction\", id])\n```\n\n***\n\n### Quick Reference\n\n#### Account\n\n```javascript\nawait shippoService.account.address()\n```\n\n#### Order\n\n```javascript\nawait shippoService.order.fetch(object_id)\n```\n\n```javascript\nawait shippoService.order.with([\"fulfillment\"]).fetch(object_id)\n```\n\n```javascript\nawait shippoService.order.fetchBy([\"fulfillment\", id])\n\nawait shippoService.order.fetchBy([\"local_order\", id])\n\nawait shippoService.order.fetchBy([\"claim\", id])\n\nawait shippoService.order.fetchBy([\"swap\", id])\n```\n\n```javascript\nawait shippoService.is([\"order\", id], \"replace\").fetch()\n```\n\n#### Package\n\n```javascript\nawait shippoService.package.for([\"line_items\", [...lineItems]]).fetch()\n\nawait shippoService.package.for([\"cart\", id]).fetch()\n\nawait shippoService.package.for([\"local_order\", id]).fetch()\n\nawait shippoService.package.for([\"fulfillment\", id]).fetch()\n```\n\n```javascript\n// use any parcel templates \nconst packages = [\n  {\n    id: \"id123\",\n    name: \"My Package\",\n    length: \"40\",\n    width: \"30\",\n    height: \"30\",\n    weight: \"10000\", // max-weight\n  },\n  {...}\n]\n\nshippoService.package.set(\"boxes\", packages)\n\nawait shippoService.package.for([\"cart\", id]).get()\n```\n\n#### Packingslip\n\n```javascript\nawait shippoService.packingslip.fetch(object_id)\n```\n\n```javascript\nawait shippoService.packingslip.with([\"fulfillment\"]).fetch(object_id)\n```\n\n```javascript\nawait shippoService.packingslip.fetchBy([\"fulfillment\", id])\n\nawait shippoService.packingslip.fetchBy([\"local_order\", id]) \n\nawait shippoService.packingslip.fetchBy([\"claim\", id]) \n\nawait shippoService.packingslip.fetchBy([\"swap\", id]) \n```\n\n#### Track\n\n```javascript\nawait shippoService.track.fetch(\"usps\", \"trackingnumber\")\n```\n\n```javascript\nawait shippoService.track.fetchBy([\"fulfillment\", id])\n```\n\n#### Transaction\n\n```javascript\nawait shippoService.transaction.fetch(object_id)\n\nawait shippoService.transaction.fetch(object_id, { type: \"extended\" })\n```\n\n```javascript\nawait shippoService.transaction.fetchBy([\"local_order\", id])\n\nawait shippoService.transaction.fetchBy([\"local_order\", id], { type: \"extended\" })\n\nawait shippoService.transaction.fetchBy([\"fulfillment\", id])\n\nawait shippoService.transaction.fetchBy([\"fulfillment\", id], { type: \"extended\" })\n```\n\n```javascript\nawait shippoService.is([\"transaction\", id], \"return\").fetch()\n```\n\n#### Client\n\n```javascript\nconst client = shippoService.client \n```\n\n#### Find\n\n```javascript\n/* @experimental */\n\nawait shippoService.find(\"fulfillment\").for([\"transaction\", id])\n\nawait shippoService.find(\"order\").for([\"transaction\", id])\n```\n\n## Events\n\nList of all events, their triggers, and expected payload for handlers\n\n[Subscribe to events](https://docs.medusajs.com/advanced/backend/subscribers/create-subscriber) to perform additional operations\n\nThese events only emit if the action pertains to `provider: shippo`\n\n### shippo.order\\_created\n\nTriggered when a new [fulfillment](https://docs.medusajs.com/api/admin/order/create-a-fulfillment) creates a shippo order.\n\n#### Payload\n\n```javascript\n{\n  order_id: \"\",\n  fulfillment_id: \"\",\n  customer_id: \"\",\n  shippo_order: {...}\n}\n```\n\n***\n\n### shippo.return\\_requested\n\nTriggered when a [return is requested](https://docs.medusajs.com/api/admin/order/request-a-return)\n\nIf the return `ShippingMethod` has `provider: shippo` it attempts to find an existing return label in shippo.\n\n#### Payload\n\n```javascript\n{\n  order: {...}, // return order\n  transaction: {...} // shippo transaction for return label OR null\n}\n```\n\n***\n\n### shippo.swap\\_created\n\nTriggered when a [swap is created](https://docs.medusajs.com/api/admin/order/create-a-swap)\n\nIf return `ShippingMethod` has `provider: shippo` it attempts to find an existing return label in shippo.\n\n#### Payload\n\n```javascript\n{\n  order: {...}, // return order\n  transaction: {...} // shippo transaction for return label OR null\n}\n```\n\n***\n\n### shippo.replace\\_order\\_created\n\nTriggered when a [swap](https://docs.medusajs.com/api/admin/order/create-a-swap-fulfillment) or [claim](https://docs.medusajs.com/api/admin/order/create-a-claim-fulfillment) fulfillment is created.\n\nIf the `ShippingMethod` has `provider: shippo` a shippo order is created\n\n#### Payload\n\n```javascript\n{\n  order_id: \"\",\n  fulfillment_id: \"\",\n  customer_id: \"\",\n  shippo_order: {...}\n}\n```\n\n***\n\n### shippo.claim\\_refund\\_created\n\nTriggered when a `type: refund` [claim is created](https://docs.medusajs.com/api/admin/order/create-a-claim)\n\nIf return `ShippingMethod` has `provider: shippo`, it attempts to find an existing return label in shippo\n\n#### Payload\n\n```javascript\n{\n  order: {...}, // return order\n  transaction: {...} // shippo transaction for return label OR null\n}\n```\n\n***\n\n### shippo.claim\\_replace\\_created\n\nTriggered when a `type: replace` [claim is created](https://docs.medusajs.com/api/admin/order/create-a-claim)\n\nIf return `ShippingMethod` has `provider: shippo`, it attempts to find an existing return label in shippo\n\n#### Payload\n\n```javascript\n{\n  order: {...}, // return order\n  transaction: {...} // shippo transaction for return label OR null\n}\n```\n\n***\n\n### shippo.transaction\\_created.shipment\n\nTriggered when the `transaction_created` webhook updates a `Fulfillment` status to `shipped`\n\n#### Payload\n\n```javascript\n{\n  order_id: \"\",\n  fulfillment_id: \"\",\n  transaction: {...}\n}\n```\n\n***\n\n### shippo.transaction\\_created.return\\_label\n\nTriggered when the `transaction_created` webhook receives a return label transaction\n\n#### Payload\n\n```javascript\n{\n  order_id: \"\",\n  transaction: {...}\n}\n```\n\n***\n\n### shippo.transaction\\_updated.payload\n\nTriggered when the `transaction_updated` webhook receives an updated transaction\n\n#### Payload\n\n```javascript\n{\n  order_id: \"\",\n  fulfillment_id: \"\",\n  transaction: {...}\n}\n```\n\n***\n\n### shippo.track\\_updated.payload\n\nTriggered when the `track_updated` webhook receives an updated track\n\n#### Payload\n\n```javascript\n{\n  ...track\n}\n```\n\n***\n\n## Shippo Node Client\n\nThis plugin is using a forked version of the official shippo-node-client. \n\nThe fork adds support for the following endpoints:\n\n*   live-rates\n*   service-groups\n*   user-parcel-templates\n*   orders/:id/packingslip\n*   ...\n*   Doc is WIP\n\nThe client is exposed on the `useClient` property of `shippoClientService`\n\n```javascript\nconst client = shippoService.client\n\n// Forks additional methods\nawait client.liverates.create({...parms})\nawait client.userparceltemplates.list()\nawait client.userparceltemplates.retrieve(id)\nawait client.servicegroups.list()\nawait client.servicegroups.create({...params})\n...\n```\n\nSee [Shippo API Reference](https://goshippo.com/docs/reference) for methods\n\n[Official client](https://github.com/goshippo/shippo-node-client)\n\n[Forked client](https://github.com/macder/shippo-node-client/tree/medusa)\n\n## Shipping Rates\n\nDimensional weight is a major factor in determining costs. Estimates are frivolous when based on inaccurate parcel volume and weight. This raises a challenging problem in computing which parcel box to use. While this is simple for single items, it becomes increasingly difficult when packing multiple items of various dimensions. It is a classic [bin packing problem](https://en.wikipedia.org/wiki/Bin_packing_problem), [NP-Hard](https://en.wikipedia.org/wiki/NP-hardness) stuff.\n\nThis plugin uses [binpackingjs](https://github.com/olragon/binpackingjs) which provides a [first-fit](https://en.wikipedia.org/wiki/First-fit_bin_packing) algorithm. Additional logic is wrapped around it to get a more optimized [first-fit-decreasing](https://en.wikipedia.org/wiki/First-fit-decreasing_bin_packing) algorithm. In order for this to be effective, parcel templates need to be setup in the Shippo account, and all products in medusa must have values for length, width, height, and weight.\n\n### Accuracy of Rates\n\nShipping rate estimates are calculated by third parties using data you supply. The onus is on the store admin to supply accurate data values about their products and packaging. This plugin does its best to use this data to create optimized requests, within reason and scope, to retrieve rates from Shippo. The intent is to provide a cost-cutting solution, but there is no one-size-fits all.\n\nAssuming accurate data for product dimensions, weight, and package templates in shippo reflect a carefully planned boxing strategy, expect reasonably accurate rates for single item and multi-item fulfillment's that fit in a single parcel. Multi parcel for rates at checkout is currently not supported (future consideration). If items cannot fit into a single box, the default package template set in [Shippo app settings](https://apps.goshippo.com/settings/rates-at-checkout) is used.\n\n## Limitations\n\nNo support for customs declarations. Planned for future release.\n\n## Resources\n\nMedusa Docs\\\nhttps://docs.medusajs.com/\n\nMedusa Shipping Architecture:\\\nhttps://docs.medusajs.com/advanced/backend/shipping/overview\n\nShippo API\\\nhttps://goshippo.com/docs/intro\\\nhttps://goshippo.com/docs/reference\n","readmeFilename":"README.md","gitHead":"e41a4dd37b95fa04d446508d5560849808d603c6","bugs":{"url":"https://github.com/macder/medusa-fulfillment-shippo/issues"},"homepage":"https://github.com/macder/medusa-fulfillment-shippo#readme","_id":"medusa-fulfillment-shippo@1.0.0-rc.0","_nodeVersion":"16.15.1","_npmVersion":"8.11.0","dist":{"integrity":"sha512-Ak10qerEcgsPeQ18Xt4td0xLJEgVgzHxt4kHRnSwunKogvEuJaGX+bn9r+em4pYRWopKaMt/008QP4/lqCfUNw==","shasum":"42a33635c2e9dcae4ea01bab21dbb3b3489ac840","tarball":"https://registry.npmjs.org/medusa-fulfillment-shippo/-/medusa-fulfillment-shippo-1.0.0-rc.0.tgz","fileCount":32,"unpackedSize":499723,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIF/GrriWCXioIju6w/UU4FPzUkymiYH+CO0rpQz/A3A/AiA4dsiuc9eZMK1v76EG5P28TbeqZRswQvq/mEhWYVzDzA=="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJi+MxRACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmptHA/+Mf/OTZ9pDdOb3AXFqKYYvLOMVJ7Z9BmqBaWKnYQ6rdX1eRoM\r\n24A71ao1SwiWfFOXo5QTE+oPLFU6M3I2HSLUuUdjxGRjlzTywMbk2Hbgq+xT\r\n3CznG/Zhw8xcnBi4EiylpkuzxXsJtHxtgv7PI9fLtdOHl4JBhF3XTOmc4AI6\r\ngQHMU44GlEzsc6Fjt9PKcHuBZmLmT/jOznkKbZNIZqwMLu9p3S3sDuXi9OX1\r\nrk3xkSdngv0NcYAXnMt7GxcNmFGP2pEMebrWU/67z2F0AMU7WsAD91O9c3D4\r\nvsXZY7wlANx3xgfGnOrqTD4aLB4xTW+U+r9PJ0tv/skYVlQpUO3WEVG0FL1L\r\n6cpUJql99YhymT9pjTGfrV7yVLlzDH8TMdQMpEBdX+Oj/V+SSFzTEbcMdzq9\r\ndRPN8DJvUZ8Q5zscwmxmfXaxz2YV898SJBBGy8uOFrnHr5q/Fdg7gL88f0Lj\r\nzMKzLfkCns/S87JALYaIwoNAF1WhA51DFSyvowoXSfLfWHrUc2/fTxWXMa/X\r\nkhzdrMVEo21/Kz1CXdjFHLIOPASyqKqwa6B2ugnfJ+psAp6aa2mhLhZgdMit\r\np4RwOupwzP1y4eD6OGQwvCx3c8w2ORqI/UnRdCg2KUSZE3OJ/JAYAH2AySuU\r\nXca5yAEnGi3Ttn/nKtWQQTkwYh40kcKLL/o=\r\n=27xK\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"macder","email":"maciej@derulski.com"},"directories":{},"maintainers":[{"name":"macder","email":"maciej@derulski.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/medusa-fulfillment-shippo_1.0.0-rc.0_1660472400778_0.7450947745650927"},"_hasShrinkwrap":false},"1.0.0":{"name":"medusa-fulfillment-shippo","version":"1.0.0","description":"Shippo fulfillment provider for medusa","author":{"name":"Maciej Derulski"},"license":"MIT","scripts":{"build":"babel src -d . --ignore **/__tests__,**/__mocks__,**/sandbox,**/sand.js,**/old-tests","prepare":"cross-env NODE_ENV=production npm run build","watch":"onchange -v src/** -- copyfiles {{file}} ../my-medusa-store","test":"jest --runInBand"},"dependencies":{"@macder/shippo":"^1.0.0","@macder/binpackingjs":"^2.3.2","body-parser":"^1.20.0","express":"^4.18.1","express-rate-limit":"^6.5.1","medusa-core-utils":"^1.1.31"},"peerDependencies":{"medusa-interfaces":"1.x"},"repository":{"type":"git","url":"git+https://github.com/macder/medusa-fulfillment-shippo.git"},"keywords":["medusa","medusa-plugin","medusa-fulfillment","medusa-shippo"],"devDependencies":{"@babel/cli":"^7.7.5","@babel/core":"^7.7.5","@babel/eslint-parser":"^7.15.8","@babel/node":"^7.7.4","@babel/plugin-proposal-class-properties":"^7.7.4","@babel/plugin-transform-classes":"^7.9.5","@babel/plugin-transform-instanceof":"^7.8.3","@babel/plugin-transform-runtime":"^7.7.6","@babel/preset-env":"^7.7.5","@babel/register":"^7.7.4","@babel/runtime":"^7.9.6","@faker-js/faker":"^7.3.0","client-sessions":"^0.8.0","copyfiles":"^2.4.1","cross-env":"^5.2.1","eslint":"^8.20.0","eslint-config-airbnb-base":"^15.0.0","eslint-config-prettier":"^8.3.0","eslint-plugin-import":"^2.26.0","eslint-plugin-prettier":"^4.0.0","jest":"^28.1.2","jest-extended":"2.0.0","medusa-test-utils":"^1.1.37","onchange":"^7.1.0"},"gitHead":"28310ee47160c617dfbd72c9a3e923b169a0fe1a","bugs":{"url":"https://github.com/macder/medusa-fulfillment-shippo/issues"},"homepage":"https://github.com/macder/medusa-fulfillment-shippo#readme","_id":"medusa-fulfillment-shippo@1.0.0","_nodeVersion":"16.15.1","_npmVersion":"8.11.0","dist":{"integrity":"sha512-9xLTM83iSZLFvuCaZgNACAtw+Xoj75QBrENnEmUyko7TYSD+L0en34Js+CaPQ6ETuod9Tj/8j8MiZoYER3epew==","shasum":"10e1460717fa0947e6abfc50073d01de96a89cbe","tarball":"https://registry.npmjs.org/medusa-fulfillment-shippo/-/medusa-fulfillment-shippo-1.0.0.tgz","fileCount":26,"unpackedSize":493940,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCKbYFcRohV6iC1rXuTNJwwATI6oxM//SA6llUg83qp2AIgdQgWoji/Z5xAIJ8TQcqlgFhqROBY0bTdrVCxtxyYcCQ="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJi+bfMACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmozRRAAheuNXBgs1mm1LcN7wXW+noLQQksaVTNynKETMu37dMP2Eiu2\r\n1ZQcpnLkHVEFPJzhLNvdtnoq3ACI7kuMeLPbJOrljI7JEb1+xmkwtJRiz91n\r\ni8hRF+6sQJI4neeUdm9iPxoiyXqKDVbYmPVuk0Can/RNt40z0KVeoa9Nr7ck\r\nGF8WRqxt+0ywlKrir2rjobDW6rSedGyT9lfHY0fwszElvoFT3aQN4DmbJzMz\r\nDPnUSyehgm3vj8PE9WRiSYfgQAva9iqP0TZ6dm/9TP/3YmXkcTru5zOHToMw\r\nvLOACSkX5gfXpAsSXoSiMDHaP6k7bP9QgK08JuVvMdqdrLiOWb5S5JEgCr5q\r\n/OPgkkDoJokeZD2aZjIcW9JPOVBdKbOw7YrDTx3ZkICI2tOB9RmE3AByOsLd\r\nc81keU8hhom/ETqaWxnlwKcUNKL28XeujyKJzTyABZ9lt/GXbVOWRP7/3u4K\r\nkvCfzEZ8FlMZanypaxcjolRDV3SLXh2oahFcWMdwFlvejT8/jcksBkSKLrrm\r\nzA9Dk67uttzG90BZVgmcWks0K7Go+kQl6UVAlgbL+l7bitsmQFP19P5vDsAy\r\nccpmfVCzPEjwUAL5Bzir4s9yofYPluOufbCV8Qky338zADmxmV9pHP/rXExA\r\nL+qj69t8N55Tal5HoPA9yZdRrFWEe9gLmWg=\r\n=EuNq\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"macder","email":"maciej@derulski.com"},"directories":{},"maintainers":[{"name":"macder","email":"maciej@derulski.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/medusa-fulfillment-shippo_1.0.0_1660532684496_0.66841075620518"},"_hasShrinkwrap":false},"1.1.0":{"name":"medusa-fulfillment-shippo","version":"1.1.0","description":"Shippo fulfillment provider for medusa","author":{"name":"Maciej Derulski"},"license":"MIT","scripts":{"build":"babel src -d . --ignore **/__tests__,**/__mocks__,**/sandbox,**/sand.js,**/tester.js","prepare":"cross-env NODE_ENV=production npm run build","watch":"onchange -v src/** -- copyfiles {{file}} ../my-medusa-store","ci-test":"jest --runInBand","test":"jest","coverage":"jest --coverage"},"dependencies":{"@macder/shippo":"^1.0.0","@macder/binpackingjs":"^2.3.2","body-parser":"^1.20.0","express":"^4.18.1","express-rate-limit":"^6.5.1","medusa-core-utils":"^1.1.31"},"peerDependencies":{"medusa-interfaces":"1.x"},"repository":{"type":"git","url":"git+https://github.com/macder/medusa-fulfillment-shippo.git"},"keywords":["medusa","medusa-plugin","medusa-fulfillment","medusa-shippo"],"devDependencies":{"@babel/cli":"^7.7.5","@babel/core":"^7.7.5","@babel/eslint-parser":"^7.15.8","@babel/node":"^7.7.4","@babel/plugin-proposal-class-properties":"^7.7.4","@babel/plugin-transform-classes":"^7.9.5","@babel/plugin-transform-instanceof":"^7.8.3","@babel/plugin-transform-runtime":"^7.7.6","@babel/preset-env":"^7.7.5","@babel/register":"^7.7.4","@babel/runtime":"^7.9.6","@faker-js/faker":"^7.3.0","client-sessions":"^0.8.0","copyfiles":"^2.4.1","cross-env":"^5.2.1","eslint":"^8.20.0","eslint-config-airbnb-base":"^15.0.0","eslint-config-prettier":"^8.3.0","eslint-plugin-import":"^2.26.0","eslint-plugin-prettier":"^4.0.0","jest":"^28.1.2","jest-extended":"2.0.0","medusa-test-utils":"^1.1.37","onchange":"^7.1.0"},"gitHead":"686e11fab48941ac364cc22dc7a2d8ce985fd8c4","bugs":{"url":"https://github.com/macder/medusa-fulfillment-shippo/issues"},"homepage":"https://github.com/macder/medusa-fulfillment-shippo#readme","_id":"medusa-fulfillment-shippo@1.1.0","_nodeVersion":"16.15.1","_npmVersion":"8.11.0","dist":{"integrity":"sha512-RnmAEYJfrH+HTMMGXAsXudzuZsyfIHMFXa0pEF/s7YG+vhuS2OYHAsy/E0B7jXrEqBNyfYTG1l7d+NeXydhetA==","shasum":"46c9c881ccc3a5d6f4c0e0e7e682d64e5e3ef8be","tarball":"https://registry.npmjs.org/medusa-fulfillment-shippo/-/medusa-fulfillment-shippo-1.1.0.tgz","fileCount":31,"unpackedSize":516294,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGLpsa6m7y+y8q9Yxe1LHHYoiKINoEUI/ONJYXyX1uXbAiEA6onTQRhxV7hP7O8xN8w9rn5QNv0iO3DfUqeEoEMyq8I="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjAoa4ACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmrwpBAAozdaPLMNQpSwfnbF4DO3Q+UqCuP/+P0B4o9R8YjsZgdKcmAk\r\nPV3mOkMGuHKQl95uB9ubMMEVE230X+Nwxtonc6iAuVhWBK4beKb1a5XQBJrs\r\neDROvzurYpFPyR07DR6QSKxxmTP/ihAMOAlqNJ0LIMg/LaAU436X79VCMsDq\r\nFPT1fql8CLaUHmOo1/5NxfCMsmaJMpPPJTslMVeBZ4ols4vtMbLMcJO1fNaP\r\nhkecl63m2zJDSFJTQUeoy4GXL4e8a3rBr/Vsj/KwioKX3SBG7jtmRCdrJLpf\r\ngFX26SdnCe5NiUO4VEU95udlLL7iUI6VAK6xTQwKPg55QtSSn66Tjt/DO07x\r\nOoqnLjD9RKRZIbZQpDRXQckkB+oxtwzjUqngjAn3XPLdwVJQElLvKGDcDO/r\r\nYPeiSlI4UkFJZ+FEsXQCQnLHEgWIngvjN+sZrKKf8HdxcW3UIBZi5bgrHzVF\r\nZ9lvVOjbTpjpqSa7mG3C2HpX2P8eDsqFzg8fjqcFA3Lj9w+hLImU6J1OqQPV\r\n5PrOoeDcbHMsT78P0+0gYTOQW1nd+Cs67qWAEFwzahIOGevdl0saiwKplLN8\r\nizEd6q+BiKBrB1ZSrxNwzQrybagY2xaQG+RbcqL/NhFAS3fou2/0zKpYtB2C\r\nNNkh31Z18lqrtK6+vD3KI1JRfk7LM2Q7YQo=\r\n=b2xf\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"macder","email":"maciej@derulski.com"},"directories":{},"maintainers":[{"name":"macder","email":"maciej@derulski.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/medusa-fulfillment-shippo_1.1.0_1661109944623_0.3556683610936613"},"_hasShrinkwrap":false},"1.1.1":{"name":"medusa-fulfillment-shippo","version":"1.1.1","description":"Shippo fulfillment provider for medusa","author":{"name":"Maciej Derulski"},"license":"MIT","scripts":{"build":"babel src -d . --ignore **/__tests__,**/__mocks__,**/sandbox,**/sand.js,**/tester.js","prepare":"cross-env NODE_ENV=production npm run build","watch":"onchange -v src/** -- copyfiles {{file}} ../my-medusa-store","ci-test":"jest --runInBand","test":"jest","coverage":"jest --coverage"},"dependencies":{"@macder/shippo":"^1.0.0","@macder/binpackingjs":"^2.3.2","body-parser":"^1.20.0","express":"^4.18.1","express-rate-limit":"^6.5.1","medusa-core-utils":"^1.1.31"},"peerDependencies":{"medusa-interfaces":"1.x"},"repository":{"type":"git","url":"git+https://github.com/macder/medusa-fulfillment-shippo.git"},"keywords":["medusa","medusa-plugin","medusa-fulfillment","medusa-shippo"],"devDependencies":{"@babel/cli":"^7.7.5","@babel/core":"^7.7.5","@babel/eslint-parser":"^7.15.8","@babel/node":"^7.7.4","@babel/plugin-proposal-class-properties":"^7.7.4","@babel/plugin-transform-classes":"^7.9.5","@babel/plugin-transform-instanceof":"^7.8.3","@babel/plugin-transform-runtime":"^7.7.6","@babel/preset-env":"^7.7.5","@babel/register":"^7.7.4","@babel/runtime":"^7.9.6","@faker-js/faker":"^7.3.0","client-sessions":"^0.8.0","copyfiles":"^2.4.1","cross-env":"^5.2.1","eslint":"^8.20.0","eslint-config-airbnb-base":"^15.0.0","eslint-config-prettier":"^8.3.0","eslint-plugin-import":"^2.26.0","eslint-plugin-prettier":"^4.0.0","jest":"^28.1.2","jest-extended":"2.0.0","medusa-test-utils":"^1.1.37","onchange":"^7.1.0"},"gitHead":"471ef5f1a39ede8ed6814916e2552bd4c2419a1d","bugs":{"url":"https://github.com/macder/medusa-fulfillment-shippo/issues"},"homepage":"https://github.com/macder/medusa-fulfillment-shippo#readme","_id":"medusa-fulfillment-shippo@1.1.1","_nodeVersion":"16.15.1","_npmVersion":"8.11.0","dist":{"integrity":"sha512-c0zQEmqtVsSfPsoMpZhNVUHdH5L7qVREgFrOlqJjR/zBz90MWdb/I05+rbF8Fsvxc2wDVWB0UD4pGTAqxyLfjA==","shasum":"f9e17a91c241ebb89e7ed5019f642178a0c8bf02","tarball":"https://registry.npmjs.org/medusa-fulfillment-shippo/-/medusa-fulfillment-shippo-1.1.1.tgz","fileCount":31,"unpackedSize":514974,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDNKzAsKWcFwGWEeLU1vY1u6YstVtUGnAA7+N84alS1VAIgCvdF8Y9VQqxxf6q4khJ9Kw6Cvz3yF6XdJnkB+n0Y6FU="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjAvOHACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmo9rw//am8MuPaaDIK7KjJUjXc+FESOy2bkM/0ZiYt1luag/CL2/4s9\r\nE/k7p1dzu344dfudif25KEnZezuOHNy8PKOvariNqTHuk9QMKR+UnpXbZmnp\r\nIKEIjsCYkhcMHopMvlY4ysRPN5E7NbLfFvGkndKetWkng2RARoFiZQzwOZe2\r\ncONFtEHTTxsM+xczUaVunkuvG2bfh3Pczof1YETUZX9OzNLGpkQxc2rkE+6i\r\noJZYnqP316iYwIDuO+x3Gd54yxZwLcV8aWZ2Bx9aAKodcyywCijFarCwlU3V\r\ndn5MxIWxVRlleZHGrRoCzmVUiSMz5+pT5tPp70HYgK28rLmtA2l31x68IW0g\r\nYKQLFGdbsP45Hsj2Czsh6S0U/AxWQwLRL0w1I4WcZHjils+R0XHN/wvDx/e9\r\ni12bRRCoCXLQkoEtrcfX6Lzy5O5QaUUT6QF4Ytte5jXuAnarYiTX62/QqiX4\r\nft+nq26lEpNBuHqh85+z8FDh1bnFvxGVW4Bk87HHPN2zqi7h/GKSmR33Uj8o\r\n2lsYEH0qIftdxTyF1ugzWKcc3tGtVJACfofah4j7SnWjaktkLGCr7Fomp2E6\r\nliBmb3XEQXc0sxPglzlTcUEQLtch/nNnonIu56nvf0cezMTR15meSr0nlxqZ\r\n/5biWEJBG/MC/ppy+j3Eti3DblcANAvrTcU=\r\n=B3QG\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"macder","email":"maciej@derulski.com"},"directories":{},"maintainers":[{"name":"macder","email":"maciej@derulski.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/medusa-fulfillment-shippo_1.1.1_1661137799695_0.14907310536624108"},"_hasShrinkwrap":false},"1.1.2":{"name":"medusa-fulfillment-shippo","version":"1.1.2","description":"Shippo fulfillment provider for Medusa","author":{"name":"Maciej Derulski"},"license":"MIT","scripts":{"build":"babel src -d . --ignore **/__tests__,**/__mocks__,**/sandbox,**/sand.js,**/tester.js","prepare":"cross-env NODE_ENV=production npm run build","watch":"onchange -v src/** -- copyfiles {{file}} ../my-medusa-store","ci-test":"jest --runInBand","test":"jest","coverage":"jest --coverage --runInBand"},"dependencies":{"@macder/shippo":"^1.0.0","@macder/binpackingjs":"^2.3.2","body-parser":"^1.20.0","express":"^4.18.1","express-rate-limit":"^6.5.1","medusa-core-utils":"^1.1.31"},"peerDependencies":{"medusa-interfaces":"1.x"},"repository":{"type":"git","url":"git+https://github.com/macder/medusa-fulfillment-shippo.git"},"keywords":["medusa","medusa-plugin","medusa-fulfillment","medusa-shippo"],"devDependencies":{"@babel/cli":"^7.7.5","@babel/core":"^7.7.5","@babel/eslint-parser":"^7.15.8","@babel/node":"^7.7.4","@babel/plugin-proposal-class-properties":"^7.7.4","@babel/plugin-transform-classes":"^7.9.5","@babel/plugin-transform-instanceof":"^7.8.3","@babel/plugin-transform-runtime":"^7.7.6","@babel/preset-env":"^7.7.5","@babel/register":"^7.7.4","@babel/runtime":"^7.9.6","@faker-js/faker":"^7.3.0","client-sessions":"^0.8.0","copyfiles":"^2.4.1","cross-env":"^5.2.1","eslint":"^8.20.0","eslint-config-airbnb-base":"^15.0.0","eslint-config-prettier":"^8.3.0","eslint-plugin-import":"^2.26.0","eslint-plugin-prettier":"^4.0.0","jest":"^28.1.2","jest-extended":"2.0.0","medusa-test-utils":"^1.1.37","onchange":"^7.1.0"},"gitHead":"69916d82dff4f49c56997df931cc5b1edb242def","bugs":{"url":"https://github.com/macder/medusa-fulfillment-shippo/issues"},"homepage":"https://github.com/macder/medusa-fulfillment-shippo#readme","_id":"medusa-fulfillment-shippo@1.1.2","_nodeVersion":"16.15.1","_npmVersion":"8.11.0","dist":{"integrity":"sha512-3OPuSsGy7cCo8DnyuCMeoFSzDaVrer6ISII4C6S5sn4aVVSKhVPn5terN9I8rm5EXZp/vGvzikl2s9iDDl2BcQ==","shasum":"9d1ef586b122e04339247334b7fd71f251c53315","tarball":"https://registry.npmjs.org/medusa-fulfillment-shippo/-/medusa-fulfillment-shippo-1.1.2.tgz","fileCount":31,"unpackedSize":514548,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDXYgqQ6sGalHIOGnPKMabOYi8JveFOXFv8suVsuLM/GAiEA1tlZcrAnu2CYMPmGYWhwrZpbptV+uyq027IIxC/q7f4="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjBYyDACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmoM3BAAhKu55dkBhPbasD3a9ngPrpqYysmecamsuYz/b3oy0DgWmpiS\r\nzXYW7X04JYMmb1Q8SaiVpDlQl9+1sR6sQ5yFxKgvBkF+TvERnYtei1Z840Bw\r\nVNCVSCOn2fUDlorKW9wYuN/EzO1TO6UaaVw+tB4t8seOuU0hOkC1Telf0hA5\r\n2kEQMi+2k1KmP6AzZBqxrk+6rBczWbfU6Y2SpIpfSNa3a9sePzsfdI/bJLbN\r\nhYZEqrBJPAH94AVHmuyBHVvAwmmWd/sdZ7xBzXMoepYPjuxhREY//imISRLc\r\ngdmPl+v59wYL4tsa/29SzoY3UPnT1xyMX7+uE8C+0R0rQPOZXELNbiEhe2/U\r\noI/LtuMbLTg/LxkEoKclsz4KJck3xBcjAtaVS0Jj68GFxVa1weDWhiVxYmJl\r\nHv3yF2PMZeJibwMdHF1X+PECxIS/ryqaH46R8VT40/AkPWLeUZ9vZfynjPeF\r\ntZg65o4eqmhNEHB2zdOZsiOiXZ1GjeGjtWfs2ODMfmVIYAHHBgfM2S2ueRYn\r\nucFavN5hsxEi8FlKxSvnu+Aq/tLbUTnLNK2nbNYh8W09HWOMqnw6DmX4a0H4\r\nmJL8atpe99LGQekv4CoUMnHT1NyqMazlW0tY//DvpMrGUFKZgIcreg8DPvuH\r\nmGdWaTzYrjTjxcLgU1fU3c2aOh0K5cLJL+c=\r\n=n+7H\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"macder","email":"maciej@derulski.com"},"directories":{},"maintainers":[{"name":"macder","email":"maciej@derulski.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/medusa-fulfillment-shippo_1.1.2_1661308035159_0.05698619963250273"},"_hasShrinkwrap":false}},"time":{"created":"2022-06-14T07:55:37.866Z","0.1.0":"2022-06-14T07:55:38.066Z","modified":"2022-08-24T02:27:15.427Z","0.1.1":"2022-06-15T02:57:22.845Z","0.1.2":"2022-06-15T06:06:58.560Z","0.2.0":"2022-06-16T03:58:01.211Z","0.3.0":"2022-06-17T04:25:03.036Z","0.3.1":"2022-06-18T02:31:09.325Z","0.4.0":"2022-06-19T00:17:16.372Z","0.5.0":"2022-06-20T04:28:00.970Z","0.5.1":"2022-06-21T05:04:46.782Z","0.5.2":"2022-06-21T08:50:25.390Z","0.6.0":"2022-06-22T00:10:33.904Z","0.7.0":"2022-06-23T08:12:01.923Z","0.8.0":"2022-06-24T00:54:59.788Z","0.8.1":"2022-06-24T01:29:57.312Z","0.8.2":"2022-06-24T01:35:24.519Z","0.8.3":"2022-06-25T01:16:54.918Z","0.8.4":"2022-06-26T01:17:08.472Z","0.8.5":"2022-06-26T01:30:02.824Z","0.8.6":"2022-06-27T08:41:55.971Z","0.8.7":"2022-06-28T06:59:32.228Z","0.9.0":"2022-06-29T09:05:07.309Z","0.10.0":"2022-06-30T06:52:50.540Z","0.10.1":"2022-07-01T01:07:24.603Z","0.10.2":"2022-07-01T04:52:19.228Z","0.10.3":"2022-07-02T03:20:59.991Z","0.10.4":"2022-07-03T04:02:19.780Z","0.11.0":"2022-07-05T07:55:01.484Z","0.12.0":"2022-07-08T02:07:28.030Z","0.12.1":"2022-07-08T04:32:58.210Z","0.12.2":"2022-07-08T05:42:06.266Z","0.13.0":"2022-07-10T05:21:48.657Z","0.14.0":"2022-07-11T04:15:30.768Z","0.15.0":"2022-07-12T06:45:57.467Z","0.16.0":"2022-07-13T08:47:15.862Z","0.16.1":"2022-07-14T05:06:20.886Z","0.17.0":"2022-07-15T07:10:02.703Z","0.18.0":"2022-07-16T04:53:49.010Z","0.18.1":"2022-07-16T08:51:45.119Z","0.18.2":"2022-07-17T02:16:28.899Z","0.19.0":"2022-07-17T22:52:03.639Z","0.20.0":"2022-07-19T09:02:53.984Z","0.21.0":"2022-07-20T05:36:30.705Z","0.21.1":"2022-07-20T22:39:25.813Z","0.22.0":"2022-07-22T03:17:36.449Z","0.22.1":"2022-07-22T07:26:15.490Z","0.22.2":"2022-07-23T03:51:57.437Z","0.22.3":"2022-07-23T23:41:20.094Z","0.23.0":"2022-07-25T00:55:31.870Z","0.24.0":"2022-07-26T02:50:31.744Z","0.24.1":"2022-07-26T08:54:05.466Z","0.25.0":"2022-07-27T01:08:38.649Z","0.26.0":"2022-07-28T06:23:41.735Z","0.26.1":"2022-07-29T06:28:50.570Z","0.27.0":"2022-07-31T05:10:51.540Z","1.0.0-alpha.0":"2022-07-31T06:17:37.200Z","1.0.0-alpha.1":"2022-08-01T09:10:53.496Z","1.0.0-alpha.2":"2022-08-04T08:21:34.787Z","0.27.1":"2022-08-04T08:34:15.892Z","1.0.0-alpha.3":"2022-08-04T09:51:55.073Z","1.0.0-alpha.4":"2022-08-04T10:20:27.376Z","0.27.2":"2022-08-05T02:55:38.499Z","1.0.0-beta.0":"2022-08-09T05:02:02.698Z","0.27.3":"2022-08-09T06:33:10.794Z","0.28.0":"2022-08-09T22:29:30.979Z","0.28.1":"2022-08-09T23:12:08.136Z","1.0.0-beta.1":"2022-08-09T23:21:07.334Z","1.0.0-beta.2":"2022-08-10T08:48:41.157Z","1.0.0-beta.3":"2022-08-11T06:29:42.995Z","0.29.0":"2022-08-12T04:48:43.007Z","1.0.0-rc.0":"2022-08-14T10:20:00.980Z","1.0.0":"2022-08-15T03:04:44.732Z","1.1.0":"2022-08-21T19:25:44.849Z","1.1.1":"2022-08-22T03:09:59.871Z","1.1.2":"2022-08-24T02:27:15.355Z"},"maintainers":[{"name":"macder","email":"maciej@derulski.com"}],"description":"Shippo fulfillment provider for Medusa","homepage":"https://github.com/macder/medusa-fulfillment-shippo#readme","keywords":["medusa","medusa-plugin","medusa-fulfillment","medusa-shippo"],"repository":{"type":"git","url":"git+https://github.com/macder/medusa-fulfillment-shippo.git"},"author":{"name":"Maciej Derulski"},"bugs":{"url":"https://github.com/macder/medusa-fulfillment-shippo/issues"},"license":"MIT","readme":"# medusa-fulfillment-shippo\n\n[![CircleCI](https://dl.circleci.com/status-badge/img/gh/macder/medusa-fulfillment-shippo/tree/main.svg?style=shield)](https://dl.circleci.com/status-badge/redirect/gh/macder/medusa-fulfillment-shippo/tree/main)\n[![Codacy Badge](https://app.codacy.com/project/badge/Grade/5ca5e600f1574354a8056441f589ca80)](https://www.codacy.com/gh/macder/medusa-fulfillment-shippo/dashboard)\n[![codecov](https://codecov.io/gh/macder/medusa-fulfillment-shippo/branch/develop/graph/badge.svg?token=ILQPWVVG57)](https://codecov.io/gh/macder/medusa-fulfillment-shippo)\n[![npm version](https://badge.fury.io/js/medusa-fulfillment-shippo.svg)](https://badge.fury.io/js/medusa-fulfillment-shippo)\n[![npm](https://img.shields.io/npm/dt/medusa-fulfillment-shippo.svg?maxAge=1000)](https://www.npmjs.com/package/medusa-fulfillment-shippo)\n\n> :information\\_source: Requires Medusa ^1.3.5\n\nShippo fulfillment provider for Medusa Commerce.\n\nProvides fulfillment options using carrier service levels and user created service groups that can be used to create shipping options for profiles and regions.\n\nRates at checkout optimized with a [first-fit-decreasing (FFD)](https://en.wikipedia.org/wiki/First-fit-decreasing_bin_packing) bin packing algorithm.\n\nFulfillments create orders in shippo.\n\nSupports returns, exchanges, and claims.\n\nPublic interface for rapid custom integration. [Reference](#public-interface) | [Quick Reference](#quick-reference)\n\n[Eventbus payloading](#events) instead of arbitrary data assumption and storage.\n\n## Table of Contents\n\n*   [Getting Started](#getting-started)\n*   [Orders](#orders)\n*   [Packing Slips](#packing-slips)\n*   [Returns](#returns)\n    *   [Request](#request)\n*   [Swaps](#swaps)\n    *   [Create](#create)\n    *   [Fulfillment](#fulfillment)\n*   [Claims](#claims)\n    *   [Refund](#refund)\n    *   [Replace](#replace)\n    *   [Fulfillment](#fulfillment-1)\n*   [Rates at Checkout](#rates-at-checkout)\n    *   [Shipping Options in Shippo App](#setup-shipping-options-in-shippo-app)\n    *   [Assign Shipping Options to Regions in Medusa](#assign-shipping-options-to-regions-in-medusa)\n    *   [During Checkout](#during-checkout)\n    *   [Set rates for cart](#set-rates-for-cart)\n    *   [Add to Cart](#add-to-carlst)\n    *   [Help, adding a shipping method to cart throws an error](#help-adding-a-shipping-method-to-cart-throws-an-error)\n*   [Webhooks](#webhooks)\n*   [Public Interface](#public-interface)\n    *   [Detailed Reference](#public-interface)\n    *   [Quick Reference](#quick-reference)\n*   [Events](#events)\n*   [Shippo Node Client](#shippo-node-client)\n*   [Release Policy](#release-policy)\n    *   [Versioning](#versioning)\n    *   [Breaking Changes](#breaking-changes) \n*   [Limitations](#limitations)\n*   [Resources](#resources)\n\n## Getting started\n\nInstall:\n\n`> npm i medusa-fulfillment-shippo`\n\nAdd to medusa-config.js\n\n```javascript\n{\n  resolve: `medusa-fulfillment-shippo`,\n    options: {\n      api_key: SHIPPO_API_KEY,\n      weight_unit_type: 'g', // valid values: g, kg, lb, oz\n      dimension_unit_type: 'cm', // valid values: cm, mm, in\n      webhook_secret: '', // README section on webhooks before using!\n      webhook_test_mode: false\n    },\n}\n```\n\n## Orders\n\nCreating an order fulfillment makes a new order in shippo. An event is emitted with the response data and related internal ids.\n\n[Create a Subscriber](https://docs.medusajs.com/advanced/backend/subscribers/create-subscriber) to access the data.\n\n**Event:**\n`shippo.order_created`\n\n```javascript\n{\n  order_id: \"\",\n  fulfillment_id: \"\",\n  customer_id: \"\",\n  shippo_order: {...}\n}\n```\n\n### Retrieve\n\n```javascript\nawait shippoService.order.fetch(object_id)\n\nawait shippoService.order.fetchBy([\"fulfillment\", ful_id]\n\nawait shippoService.order.with([\"fulfillment\"]).fetch(object_id)\n```\n\n[See references](#order) for all methods\n\n## Packing Slips\n\n### Retrieve\n\n```javascript\nconst { object_id } = order\n\nawait shippoService.packingslip.fetch(object_id)\n\nawait shippoService.packingslip.fetchBy([\"fulfillment\"], ful_id)\n\nawait shippoService.packingslip.with([\"fulfillment\"]).fetch(object_id)\n```\n\n[See references](#packingslip) for all methods\n\n## Returns\n\n### Request\n\nInvoked when [Request a Return](https://docs.medusajs.com/api/admin/order/request-a-return) `return_shipping` has `provider: shippo`\n\nAttempts fetching an existing return label from shippo.\n\n**Event:**\n`shippo.return_requested`\n\n```javascript\n{\n  order: {...}, // return order\n  transaction: {...} // shippo transaction for return label OR null\n}\n```\n\n## Swaps\n\n### Create\n\nInvoked when [Create a Swap](https://docs.medusajs.com/api/admin/order/create-a-swap) `return_shipping` has `provider: shippo`\n\nAttempts fetching an existing return label from shippo.\n\n**Event:**\n`shippo.swap_created`\n\n```javascript\n{\n  order: {...}, // return order\n  transaction: {...} // shippo transaction for return label OR null\n}\n```\n\n### Fulfillment\n\nInvoked when [Create a Swap Fulfillment](https://docs.medusajs.com/api/admin/order/create-a-swap-fulfillment) `shipping_option` has `provider: shippo`\n\nCreates an order in shippo.\n\n**Event:**\n`shippo.replace_order_created`\n\n```javascript\n{\n  order_id: \"\",\n  fulfillment_id: \"\",\n  customer_id: \"\",\n  shippo_order: {...}\n}\n```\n\n## Claims\n\n### Refund\n\nInvoked when [Create a Claim](https://docs.medusajs.com/api/admin/order/create-a-claim) has `type: refund` and `return_shipping` has `provider: shippo`\n\nAttempts fetching an existing return label from shippo.\n\n**Event:**\n`shippo.claim_refund_created`\n\n```javascript\n{\n  order: {...}, // return order\n  transaction: {...} // shippo transaction for return label OR null\n}\n```\n\n### Replace\n\nInvoked when [Create a Claim](https://docs.medusajs.com/api/admin/order/create-a-claim) has `type: replace` and `return_shipping` has `provider: shippo`\n\nAttempts fetching an existing return label from shippo.\n\n**Event:**\n`shippo.claim_replace_created`\n\n```javascript\n{\n  order: {...}, // return order\n  transaction: {...} // shippo transaction for return label OR null\n}\n```\n\n### Fulfillment\n\nInvoked when [Create a Claim Fulfillment](https://docs.medusajs.com/api/admin/order/create-a-claim-fulfillment) `shipping_option` has `provider: shippo`\n\nCreates an order in shippo.\n\n**Event:**\n`shippo.replace_order_created`\n\n```javascript\n{\n  order_id: \"\",\n  fulfillment_id: \"\",\n  customer_id: \"\",\n  shippo_order: {...}\n}\n```\n\n## Rates at Checkout\n\nProvide customers with accurate shipping rates at checkout to reduce over and under charges. This plugin implements a first-fit-decreasing bin packing algorithm to choose an appropriate parcel for the items in a cart. Follow this guide to get setup and then optimize.\n\n### Setup Shipping Options in Shippo App\n\nLets assume shipping from Canada to customers in Canada and USA via “Standard” and “Express” options\n\nThis would require setting up 4 shipping options in Shippo (\\<https://apps.goshippo.com/settings/rates-at-checkout>)\n\n1.  Standard Shipping Canada\n2.  Express Shipping Canada\n3.  Standard Shipping USA\n4.  Express Shiping USA\n\nSet each shipping option to “Live rate” and assign *service(s)* to them\n\nFor example:\n\n*   Express Shipping Canada: *Canada Post XpressPost*\n*   Express Shipping USA: *Canada Post XpressPost USA*\n*   *…*\n\nFor more in-depth details see https://support.goshippo.com/hc/en-us/articles/4403207559963\n\n### Assign Shipping Options to Regions in Medusa\n\nCreate shipping options for regions as usual\n\n[See here for common issue](#help-adding-a-shipping-method-to-cart-throws-an-error)\n\n### Setup parcel templates\n\nCreate package templates in the [Shippo app settings](https://apps.goshippo.com/settings/packages)\n\nTo get most optimal results, it is recommended to create package templates for all your shipping boxes.\n\n### Verify product dimensions and weight\n\nIn your medusa store, make sure products have correct values for length, width, height, weight\n\n### During Checkout\n\n[Retrieve shipping options for cart](https://docs.medusajs.com/api/store/shipping-option/retrieve-shipping-options-for-cart) as usual and any `price_type: calculated` options belonging to `provider: shippo` will have `amount: Number`.\n\nRates calculate only if cart has shipping address and items\n\n**HTTP:**\n\n```plaintext\nGET /store/shipping-options/:cart_id\n```\n\n**Service:**\n\n```javascript\nconst shippingOptions = await shippingProfileService.fetchCartOptions(cart)\n```\n\n### Add to Cart\n\n[Add a Shipping Method](https://docs.medusajs.com/api/store/cart/add-a-shipping-method) and if  `shipping_option` has `price_type: calculated` the rate will be saved to the `shipping_method`\n\n**HTTP:**\n\n```plaintext\nPOST /store/carts/:id/shipping-methods\n --data '{\"option_id\":\"example_cart_option_id\"}'\n```\n\n### Help, adding a shipping method to cart throws an error\n\nThis is an issue with medusa-admin. Examine line 85 [`admin/src/domain/settings/regions/new-shipping.tsx`](https://github.com/medusajs/admin/blob/a33ed20214297ffdbd2383f809dddd4870f5dad9/src/domain/settings/regions/new-shipping.tsx#L85)\n\nOptions with `price_type: flat_rate` will not pass through [`fulFillmentProviderService.calculatePrice()`](https://docs.medusajs.com/references/services/classes/FulfillmentProviderService#calculateprice)\n\nmedusa-admin is still early phase software.\n\nWorkaround it, use the REST api directly, or patch the issue for now\n\nPossible interim solution:\n\n```javascript\nprice_type: (options[optionIndex].type === \"LIVE_RATE\") \n    ? \"calculated\" \n    : \"flat_rate\",\n```\n\n## Webhooks\n\n### Caution\n\nIncoming HTTP requests from Shippo to webhook endpoints lack authentication. No secret token, no signature in the request header, no bearer, nothing.\n\nBefore enabling webhooks, understand the risks of an open and insecure HTTP endpoint that consumes data, and how to mitigate this. Please DO NOT use this without SSL/TLS. [Whitelisting shippo IP's](https://groups.google.com/g/shippo-api-announce/c/1A6m6Snvypk) is a good idea. There are also intermediary third party services such as pipedream and hookdeck that can be used to relay requests.\n\nYou will also need to self generate a token and add it as a url query param. Ya I know… but it's better than nothing and it is encrypted over HTTPS\n\nThe flow at the code level is:\n\n1.  Webhook receives POST data\n2.  URL query token is verified\n3.  The request json gets verified by fetching the same object directly from shippo API, following these steps:\n    1.  Request body contains json claiming to be a shippo object. \n    2.  Ok, but lets fetch this object directly from Shippo's API\n    3.  If the fetch resolves to the object requested, then use that data instead of the untrusted input \n    4.  Otherwise throw a HTTP 500 and do nothing\n\n### Setup\n\nIn `.env` add `SHIPPO_WEBHOOK_SECRET=some_secret_string` \n\nAdd to `medusa-config.js`\n\n```javascript\nconst SHIPPO_API_KEY = process.env.SHIPPO_API_KEY\nconst SHIPPO_WEBHOOK_SECRET = process.env.SHIPPO_WEBHOOK_SECRET\n\n{\n  resolve: `medusa-fulfillment-shippo`,\n  options: {\n    api_key: SHIPPO_API_KEY,\n    weight_unit_type: 'g',\n    dimension_unit_type: 'cm',\n    webhook_secret: SHIPPO_WEBHOOK_SECRET,\n    webhook_test_mode: false    \n  },\n},\n```\n\n### Endpoints\n\nHooks need to be setup in [Shippo app settings](https://apps.goshippo.com/settings/api)\n\n**transaction\\_created**: `/hooks/shippo/transaction?token=SHIPPO_WEBHOOK_SECRET`\n\n**transaction\\_updated**: `/hooks/shippo/transaction?token=SHIPPO_WEBHOOK_SECRET`\n\n**track\\_updated**: `/hooks/shippo/track?token=SHIPPO_WEBHOOK_SECRET`\n\nThen send a sample. If everything is good you will see this in console:\n\n```shell\nProcessing shippo.received.transaction_created which has 0 subscribers\nProcessing shippo.rejected.transaction_created which has 0 subscribers\n```\n\nThis is the expected behaviour because the data could not be verified. Since it is a sample, when the plugin tried to verify the transaction by requesting the same object back directly from shippo api, it did not exist. It will NOT use input data beyond making the verification, so it gets rejected.\n\n### Test Mode\n\nTest mode bypasses input authenticity verification, i.e. it will use the untrusted input data instead of requesting the same data back from shippo.\n\nThis allows testing using data that does not exist in shippo.\n\nTo enable, set `webhook_test_mode: true` in `medusa-config.js` plugin options.\n\nRunning in test mode is a security risk, enable only for testing purposes.\n\n### transaction\\_created\n\n`/hooks/shippo/transaction?token=SHIPPO_WEBHOOK_SECRET`\n\nReceives shippo transaction object when label purchased\n\n*   Updates fulfillment to “shipped”\n*   Adds tracking number and link to fulfillment\n\n#### Events\n\n`shippo.transaction_created.shipment`\n\n```javascript\n{\n  order_id: \"\",\n  fulfillment_id: \"\",\n  transaction: {...}\n}\n```\n\n`shippo.transaction_created.return_label`\n\n```javascript\n{\n  order_id: \"\",\n  transaction: {...}\n}\n```\n\n### transaction\\_updated\n\n`/hooks/shippo/transaction?token=SHIPPO_WEBHOOK_SECRET`\n\nReceives shippo transaction object when transaction updated\n\n#### Events\n\n`shippo.transaction_updated.payload`\n\n```javascript\n{\n  order_id: \"\",\n  fulfillment_id: \"\",\n  transaction: {...}\n}\n```\n\n### track\\_updated\n\n`/hooks/shippo/track?token=SHIPPO_WEBHOOK_SECRET`\n\n#### Events\n\n`shippo.track_updated.payload`\n\n```javascript\n{\n  ...track\n}\n```\n\n## Public Interface\n\nReferences the declared public interface for client consumption, the [semver](https://semver.org/) \"Declared Public API\"\n\nAlthough there is nothing stopping you from accessing and using public methods behind the interface, be aware that those implementation details can and will change. The purpose of the interface is semver compliant stability.\n\n### Getting Started\n\nDependency inject `shippoService` as you would with any other service\n\nFor guide, see [Using Custom Service](https://docs.medusajs.com/advanced/backend/services/create-service#using-your-custom-service)\n\n***\n\n### account.address()\n\nFetch default sender address\n\n#### Return\n\n`Promise.<object>`\n\n#### Example\n\n```javascript\nawait shippoService.account.address()\n```\n\n***\n\n### order.fetch(id)\n\nFetch an order from shippo\n\n#### Parameters\n\n| Name     | Type       | Description                           |\n|----------|------------|---------------------------------------|\n| id | `String` | The object\\_id for an order |\n\n#### Return\n\n`Promise.<object>`\n\n#### Example\n\n```javascript\nawait shippoService.order.fetch(object_id)\n```\n\n***\n\n### order.with(\\[entity]).fetch(id)\n\nFetch a shippo order with a related entity.\n\n#### Parameters\n\n| Name     | Type       | Description                           |\n|----------|------------|---------------------------------------|\n| id | `String` | The object\\_id for an order |\n| entity | `Array.<string>` | The entity to attach  |\n\n#### Supported Entities\n\n`fulfillment`\n\n#### Return\n\n`Promise.<object>`\n\n#### Example\n\n```javascript\nawait shippoService.order.with([\"fulfillment\"]).fetch(object_id)\n\n/* @return */\n{\n  ...order,\n  fulfillment: {\n    ...fulfillment\n  }\n}\n```\n\n***\n\n### order.fetchBy(\\[entity, id])\n\nFetch a shippo order using the id of a related entity\n\n#### Parameters\n\n`@param {[entity: string, id: string>]}`\n\n| Name     | Type       | Description                           |\n|----------|------------|---------------------------------------|\n| entity | `string` | The entity type to fetch order by |\n| id | `string` | Id of the entity |\n\n#### Supported Entities\n\n`fulfillment` `local_order` `claim` `swap`\n\n#### Return\n\n`Promise.<object|object[]>`\n\n#### Example\n\n```javascript\n/* @return {Promise.<object>} */\n\nawait shippoService.order.fetchBy([\"fulfillment\", id])\n```\n\n```javascript\n/* @return {Promise.<object[]>} */\n\nawait shippoService.order.fetchBy([\"local_order\", id])\n\nawait shippoService.order.fetchBy([\"claim\", id])\n\nawait shippoService.order.fetchBy([\"swap\", id])\n```\n\n***\n\n### package.for(\\[entity, id]).fetch()\n\nBin pack items to determine best fit parcel using package templates from [shippo account](https://apps.goshippo.com/settings/packages)\n\nWill return full output from binpacker, including locus. The first array member is best fit\n\nSee also: [override package templates](#override-parcel-templates)\n\n#### Parameters\n\n`@param {[entity: string, id: string>]}`\n\n| Name     | Type       | Description                           |\n|----------|------------|---------------------------------------|\n| entity | `string` | Entity type  |\n| id | items | `string\\|array` | The id of {\\[entity]} or array of items |\n\n#### Supported Entities\n\n`cart` `local_order` `fulfillment` `line_items`\n\n#### Return\n\n`Promise.<object[]>`\n\n#### Example\n\n```javascript\n// use parcel templates defined in shippo account\n\nawait shippoService.package.for([\"cart\", id]).fetch()\n\nawait shippoService.package.for([\"local_order\", id]).fetch()\n\nawait shippoService.package.for([\"fulfillment\", id]).fetch()\n\nawait shippoService.package.for([\"line_items\", [...lineItems]]).fetch()\n```\n\n#### Override Parcel Templates\n\n`package.set(\"boxes\", [...packages])`\n\n```javascript\nconst packages = [\n  {\n    id: \"id123\",\n    name: \"My Package\",\n    length: \"40\",\n    width: \"30\",\n    height: \"30\",\n    weight: \"10000\", // max-weight\n  },\n  {...}\n]\n\nshippoService.package.set(\"boxes\", packages)\n\nawait shippoService.package.for([\"cart\", id]).get()\n...\n```\n\n***\n\n### packingslip.fetch(id)\n\nFetch the packingslip for shippo order\n\n#### Parameters\n\n| Name     | Type       | Description                           |\n|----------|------------|---------------------------------------|\n| id | `String` | The object\\_id of the order to get packingslip for |\n\n#### Return\n\n`Promise.<object>`\n\n#### Example\n\n```javascript\nconst { object_id } = order\n\nawait shippoService.packingslip.fetch(object_id)\n```\n\n***\n\n### packingslip.with(\\[entity]).fetch(id)\n\nFetch the packingslip for shippo order with a related entity.\n\n#### Parameters\n\n| Name     | Type       | Description                           |\n|----------|------------|---------------------------------------|\n| id | `String` | The object\\_id of the order to get packingslip for |\n| entity | `Array.<string>` | The entity to attach  |\n\n#### Supported Entities\n\n`fulfillment`\n\n#### Return\n\n`Promise.<object>`\n\n#### Example\n\n```javascript\nawait shippoService.packingslip.with([\"fulfillment\"]).fetch(object_id)\n\n/* @return */\n{\n  ...packingslip,\n  fulfillment: {\n    ...fulfillment\n  }\n}\n```\n\n***\n\n### packingslip.fetchBy(\\[entity, id])\n\nFetch the packing slip for a shippo order, using the id of a related entity\n\n#### Parameters\n\n`@param {[entity: string, id: string>]}`\n\n| Name     | Type       | Description                           |\n|----------|------------|---------------------------------------|\n| entity | `string` | The entity type to fetch packingslip by |\n| id | `string` | Id of the entity |\n\n#### Supported Entities\n\n`fulfillment` `local_order` `claim` `swap`\n\n#### Return\n\n`Promise.<object|object[]>`\n\n#### Example\n\n```javascript\n/* @return {Promise.<object>} */\n\nawait shippoService.packingslip.fetchBy([\"fulfillment\", id])\n```\n\n```javascript\n/* @return {Promise.<object[]>} */\n\nawait shippoService.packingslip.fetchBy([\"local_order\", id])\n\nawait shippoService.packingslip.fetchBy([\"claim\", id])\n\nawait shippoService.packingslip.fetchBy([\"swap\", id])\n```\n\n***\n\n### track.fetch(carrier\\_enum, track\\_num)\n\nFetch a tracking status object\n\n#### Parameters\n\n| Name     | Type       | Description                           |\n|----------|------------|---------------------------------------|\n| carrier\\_enum | `string` | The [carrier enum token](https://goshippo.com/docs/reference#carriers) |\n| track\\_num | `string` | The tracking number |\n\n#### Return\n\n`Promise.<object>`\n\n#### Example\n\n```javascript\nawait shippoService.track.fetch(\"usps\", \"trackingnumber\")\n```\n\n***\n\n### track.fetchBy(\\[entity, id])\n\nFetch a tracking status object using id of related entity\n\n`@param {[entity: string, id: string>]}`\n\n| Name     | Type       | Description                           |\n|----------|------------|---------------------------------------|\n| entity | `string` | The entity type to fetch tracking status by |\n| id | `string` | Id of the entity |\n\n#### Supported Entities\n\n`fulfillment`\n\n#### Return\n\n`Promise.<object>`\n\n#### Example\n\n```javascript\nawait shippoService.track.fetchBy([\"fulfillment\", id])\n```\n\n***\n\n### transaction.fetch(id)\n\nFetch a transaction object from shippo.\n\nTo fetch an extended version with additional fields, use `transaction.fetch(id, { type: extended})`\n\n| Name     | Type       | Description                           |\n|----------|------------|---------------------------------------|\n| id | `String` | The object\\_id for transaction |\n\n#### Return\n\n`Promise.<object>`\n\n#### Example\n\n```javascript\nawait shippoService.transaction.fetch(object_id)\n\nawait shippoService.transaction.fetch(object_id, { type: \"extended\" })\n```\n\n### transaction.fetchBy(\\[entity, id])\n\nFetch a transaction using the id of a related entity\n\n#### Parameters\n\n`@param {[entity: string, id: string>]}`\n\n| Name     | Type       | Description                           |\n|----------|------------|---------------------------------------|\n| entity | `string` | The entity type to fetch transaction by |\n| id | `string` | Id of the entity |\n\n#### Supported Entities\n\n`fulfillment` `local_order` `claim` `swap`\n\n#### Return\n\n`Promise.<object|object[]>`\n\n#### Example\n\n```javascript\nawait shippoService.transaction.fetchBy([\"fulfillment\", id])\n\nawait shippoService.transaction.fetchBy([\"fulfillment\", id], { type: \"extended\" })\n\nawait shippoService.transaction.fetchBy([\"local_order\", id])\n\nawait shippoService.transaction.fetchBy([\"local_order\", id], { type: \"extended\" })\n\nawait shippoService.transaction.fetchBy([\"claim\", id])\n\nawait shippoService.transaction.fetchBy([\"claim\", id], { type: \"extended\" })\n\nawait shippoService.transaction.fetchBy([\"swap\", id])\n\nawait shippoService.transaction.fetchBy([\"swap\", id], { type: \"extended\" })\n```\n\n***\n\n### Misc\n\n#### is(\\[entity, id], attr).fetch()\n\n```javascript\nawait shippoService.is([\"transaction\", id], \"return\").fetch()\n\nawait shippoService.is([\"order\", id], \"replace\").fetch()\n```\n\n#### Client\n\n`shippo-node-client` ([forked](#shippo-node-client))\n\n```javascript\nconst client = shippoService.client \n```\n\n#### find(entity).for(\\[entity, id])\n\n```javascript\n/* @experimental */\n\nawait shippoService.find(\"fulfillment\").for([\"transaction\", id])\n\nawait shippoService.find(\"order\").for([\"transaction\", id])\n```\n\n***\n\n### Quick Reference\n\n#### Account\n\n```javascript\nawait shippoService.account.address()\n```\n\n#### Order\n\n```javascript\nawait shippoService.order.fetch(object_id)\n```\n\n```javascript\nawait shippoService.order.with([\"fulfillment\"]).fetch(object_id)\n```\n\n```javascript\nawait shippoService.order.fetchBy([\"fulfillment\", id])\n\nawait shippoService.order.fetchBy([\"local_order\", id])\n\nawait shippoService.order.fetchBy([\"claim\", id])\n\nawait shippoService.order.fetchBy([\"swap\", id])\n```\n\n```javascript\nawait shippoService.is([\"order\", id], \"replace\").fetch()\n```\n\n#### Package\n\n```javascript\nawait shippoService.package.for([\"line_items\", [...lineItems]]).fetch()\n\nawait shippoService.package.for([\"cart\", id]).fetch()\n\nawait shippoService.package.for([\"local_order\", id]).fetch()\n\nawait shippoService.package.for([\"fulfillment\", id]).fetch()\n```\n\n```javascript\n// use any parcel templates \nconst packages = [\n  {\n    id: \"id123\",\n    name: \"My Package\",\n    length: \"40\",\n    width: \"30\",\n    height: \"30\",\n    weight: \"10000\", // max-weight\n  },\n  {...}\n]\n\nshippoService.package.set(\"boxes\", packages)\n\nawait shippoService.package.for([\"cart\", id]).get()\n```\n\n#### Packingslip\n\n```javascript\nawait shippoService.packingslip.fetch(object_id)\n```\n\n```javascript\nawait shippoService.packingslip.with([\"fulfillment\"]).fetch(object_id)\n```\n\n```javascript\nawait shippoService.packingslip.fetchBy([\"fulfillment\", id])\n\nawait shippoService.packingslip.fetchBy([\"local_order\", id]) \n\nawait shippoService.packingslip.fetchBy([\"claim\", id]) \n\nawait shippoService.packingslip.fetchBy([\"swap\", id]) \n```\n\n#### Track\n\n```javascript\nawait shippoService.track.fetch(\"usps\", \"trackingnumber\")\n```\n\n```javascript\nawait shippoService.track.fetchBy([\"fulfillment\", id])\n```\n\n#### Transaction\n\n```javascript\nawait shippoService.transaction.fetch(object_id)\n\nawait shippoService.transaction.fetch(object_id, { type: \"extended\" })\n```\n\n```javascript\nawait shippoService.transaction.fetchBy([\"fulfillment\", id])\n\nawait shippoService.transaction.fetchBy([\"fulfillment\", id], { type: \"extended\" })\n\nawait shippoService.transaction.fetchBy([\"local_order\", id])\n\nawait shippoService.transaction.fetchBy([\"local_order\", id], { type: \"extended\" })\n\nawait shippoService.transaction.fetchBy([\"claim\", id])\n\nawait shippoService.transaction.fetchBy([\"claim\", id], { type: \"extended\" })\n\nawait shippoService.transaction.fetchBy([\"swap\", id])\n\nawait shippoService.transaction.fetchBy([\"swap\", id], { type: \"extended\" })\n```\n\n```javascript\nawait shippoService.is([\"transaction\", id], \"return\").fetch()\n```\n\n#### Client\n\n```javascript\nconst client = shippoService.client \n```\n\n#### Find\n\n```javascript\n/* @experimental */\n\nawait shippoService.find(\"fulfillment\").for([\"transaction\", id])\n\nawait shippoService.find(\"order\").for([\"transaction\", id])\n```\n\n## Events\n\nList of all events, their triggers, and expected payload for handlers\n\n[Subscribe to events](https://docs.medusajs.com/advanced/backend/subscribers/create-subscriber) to perform additional operations\n\nThese events only emit if the action pertains to `provider: shippo`\n\n### shippo.order\\_created\n\nTriggered when a new [fulfillment](https://docs.medusajs.com/api/admin/order/create-a-fulfillment) creates a shippo order.\n\n#### Payload\n\n```javascript\n{\n  order_id: \"\",\n  fulfillment_id: \"\",\n  customer_id: \"\",\n  shippo_order: {...}\n}\n```\n\n***\n\n### shippo.return\\_requested\n\nTriggered when a [return is requested](https://docs.medusajs.com/api/admin/order/request-a-return)\n\nIf the return `ShippingMethod` has `provider: shippo` it attempts to find an existing return label in shippo.\n\n#### Payload\n\n```javascript\n{\n  order: {...}, // return order\n  transaction: {...} // shippo transaction for return label OR null\n}\n```\n\n***\n\n### shippo.swap\\_created\n\nTriggered when a [swap is created](https://docs.medusajs.com/api/admin/order/create-a-swap)\n\nIf return `ShippingMethod` has `provider: shippo` it attempts to find an existing return label in shippo.\n\n#### Payload\n\n```javascript\n{\n  order: {...}, // return order\n  transaction: {...} // shippo transaction for return label OR null\n}\n```\n\n***\n\n### shippo.replace\\_order\\_created\n\nTriggered when a [swap](https://docs.medusajs.com/api/admin/order/create-a-swap-fulfillment) or [claim](https://docs.medusajs.com/api/admin/order/create-a-claim-fulfillment) fulfillment is created.\n\nIf the `ShippingMethod` has `provider: shippo` a shippo order is created\n\n#### Payload\n\n```javascript\n{\n  order_id: \"\",\n  fulfillment_id: \"\",\n  customer_id: \"\",\n  shippo_order: {...}\n}\n```\n\n***\n\n### shippo.claim\\_refund\\_created\n\nTriggered when a `type: refund` [claim is created](https://docs.medusajs.com/api/admin/order/create-a-claim)\n\nIf return `ShippingMethod` has `provider: shippo`, it attempts to find an existing return label in shippo\n\n#### Payload\n\n```javascript\n{\n  order: {...}, // return order\n  transaction: {...} // shippo transaction for return label OR null\n}\n```\n\n***\n\n### shippo.claim\\_replace\\_created\n\nTriggered when a `type: replace` [claim is created](https://docs.medusajs.com/api/admin/order/create-a-claim)\n\nIf return `ShippingMethod` has `provider: shippo`, it attempts to find an existing return label in shippo\n\n#### Payload\n\n```javascript\n{\n  order: {...}, // return order\n  transaction: {...} // shippo transaction for return label OR null\n}\n```\n\n***\n\n### shippo.transaction\\_created.shipment\n\nTriggered when the `transaction_created` webhook updates a `Fulfillment` status to `shipped`\n\n#### Payload\n\n```javascript\n{\n  order_id: \"\",\n  fulfillment_id: \"\",\n  transaction: {...}\n}\n```\n\n***\n\n### shippo.transaction\\_created.return\\_label\n\nTriggered when the `transaction_created` webhook receives a return label transaction\n\n#### Payload\n\n```javascript\n{\n  order_id: \"\",\n  transaction: {...}\n}\n```\n\n***\n\n### shippo.transaction\\_updated.payload\n\nTriggered when the `transaction_updated` webhook receives an updated transaction\n\n#### Payload\n\n```javascript\n{\n  order_id: \"\",\n  fulfillment_id: \"\",\n  transaction: {...}\n}\n```\n\n***\n\n### shippo.track\\_updated.payload\n\nTriggered when the `track_updated` webhook receives an updated track\n\n#### Payload\n\n```javascript\n{\n  ...track\n}\n```\n\n***\n\n## Shippo Node Client\n\nThis plugin is using a forked version of the official shippo-node-client. \n\nThe fork adds support for the following endpoints:\n\n*   live-rates\n*   service-groups\n*   user-parcel-templates\n*   orders/:id/packingslip\n*   ...\n*   Doc is WIP\n\nThe client is exposed on the `useClient` property of `shippoClientService`\n\n```javascript\nconst client = shippoService.client\n\n// Forks additional methods\nawait client.liverates.create({...parms})\nawait client.userparceltemplates.list()\nawait client.userparceltemplates.retrieve(id)\nawait client.servicegroups.list()\nawait client.servicegroups.create({...params})\n...\n```\n\nSee [Shippo API Reference](https://goshippo.com/docs/reference) for methods\n\n[Official client](https://github.com/goshippo/shippo-node-client)\n\n[Forked client](https://github.com/macder/shippo-node-client/tree/medusa)\n\n## Release Policy\n\n### Versioning\n\nFollows Semantic versioning (semver) principles.\n\n### Breaking Changes\n\nBreaking change refers to a backwards incompatible change to the **public interface** or **core feature**.\n\nThe public interface and core features are declared and defined in this document. Breaking changes will be announced in advance, and once released the major version number is incremented.\n\nUndocumented API and internal data structures are considered implementation details and are subject to change without notice. In other words, you are on your own when relying on undocumented usage.\n\n## Limitations\n\nNo support for customs declarations. Planned for future release.\n\n## Resources\n\nMedusa Docs\\\nhttps://docs.medusajs.com/\n\nMedusa Shipping Architecture:\\\nhttps://docs.medusajs.com/advanced/backend/shipping/overview\n\nShippo API\\\nhttps://goshippo.com/docs/intro\\\nhttps://goshippo.com/docs/reference\n","readmeFilename":"README.md"}