namespace Automattic\WooCommerce\StoreApi;
use Automattic\WooCommerce\Blocks\Registry\Container;
use Automattic\WooCommerce\StoreApi\Formatters;
use Automattic\WooCommerce\StoreApi\Authentication;
use Automattic\WooCommerce\StoreApi\Legacy;
use Automattic\WooCommerce\StoreApi\Formatters\CurrencyFormatter;
use Automattic\WooCommerce\StoreApi\Formatters\HtmlFormatter;
use Automattic\WooCommerce\StoreApi\Formatters\MoneyFormatter;
use Automattic\WooCommerce\StoreApi\RoutesController;
use Automattic\WooCommerce\StoreApi\SchemaController;
use Automattic\WooCommerce\StoreApi\Schemas\ExtendSchema;
* Init and hook in Store API functionality.
if ( ! wc_rest_should_load_namespace( 'wc/store' ) && ! wc_rest_should_load_namespace( 'wc/private' ) ) {
self::container()->get( Legacy::class )->init();
self::container()->get( RoutesController::class )->register_all_routes();
// Runs on priority 11 after rest_api_default_filters() which is hooked at 10.
if ( ! wc_rest_should_load_namespace( 'wc/store' ) ) {
self::container()->get( Authentication::class )->init();
'woocommerce_blocks_pre_get_routes_from_namespace',
function ( $routes, $ns ) {
if ( 'wc/store/v1' !== $ns ) {
self::container()->get( RoutesController::class )->get_all_routes( 'v1' )
* Loads the DI container for Store API.
* @internal This uses the Blocks DI container. If Store API were to move to core, this container could be replaced
* with a different compatible container.
* @param boolean $reset Used to reset the container to a fresh instance. Note: this means all dependencies will be reconstructed.
public static function container( $reset = false ) {
$container = new Container();
return new Authentication();
function ( $container ) {
return new RoutesController(
$container->get( SchemaController::class )
function ( $container ) {
return new SchemaController(
$container->get( ExtendSchema::class )
function ( $container ) {
$container->get( Formatters::class )
$formatters = new Formatters();
$formatters->register( 'money', MoneyFormatter::class );
$formatters->register( 'html', HtmlFormatter::class );
$formatters->register( 'currency', CurrencyFormatter::class );