[restructure] make api.py
diff --git a/erpnext/hub_node/__init__.py b/erpnext/hub_node/__init__.py
index 88570e5..9684458 100644
--- a/erpnext/hub_node/__init__.py
+++ b/erpnext/hub_node/__init__.py
@@ -14,280 +14,3 @@
 	hub_settings.register()
 	frappe.db.commit()
 	return hub_settings
-
-@frappe.whitelist()
-def call_hub_method(method, params=None):
-	connection = get_hub_connection()
-
-	if type(params) == unicode:
-		params = json.loads(params)
-
-	params.update({
-		'cmd': 'hub.hub.api.' + method
-	})
-
-	response = connection.post_request(params)
-	return response
-
-
-#### LOCAL ITEMS
-@frappe.whitelist()
-def get_valid_items(search_value=''):
-	items = frappe.get_list(
-		'Item',
-		fields=["*"],
-		filters={
-			'item_name': ['like', '%' + search_value + '%'],
-			'publish_in_hub': 0
-		},
-		order_by="modified desc"
-	)
-
-	valid_items = filter(lambda x: x.image and x.description, items)
-
-	def attach_source_type(item):
-		item.source_type = "local"
-		return item
-
-	valid_items = map(lambda x: attach_source_type(x), valid_items)
-	return valid_items
-
-@frappe.whitelist()
-def publish_selected_items(items_to_publish):
-	items_to_publish = json.loads(items_to_publish)
-	if not len(items_to_publish):
-		return
-
-	for item_code in items_to_publish:
-		frappe.db.set_value('Item', item_code, 'publish_in_hub', 1)
-
-	try:
-		hub_settings = frappe.get_doc('Hub Settings')
-		item_sync_preprocess()
-		hub_settings.sync()
-	except Exception as e:
-		frappe.db.set_value("Hub Settings", "Hub Settings", "sync_in_progress", 0)
-		frappe.throw(e)
-
-def item_sync_preprocess():
-	# Call Hub to make a new activity
-	# and return an activity ID
-	# that will be used as the remote ID for the Migration Run
-
-	hub_seller = frappe.db.get_value("Hub Settings", "Hub Settings", "company_email")
-
-	response = call_hub_method('add_hub_seller_activity', {
-		'hub_seller': hub_seller,
-		'activity_details': json.dumps({
-			'subject': 'Publishing items',
-			'status': 'Success'
-		})
-	})
-
-	if response:
-		frappe.db.set_value("Hub Settings", "Hub Settings", "sync_in_progress", 1)
-		return response
-	else:
-		frappe.throw('Unable to update remote activity')
-
-def item_sync_postprocess(sync_details):
-	hub_seller = frappe.db.get_value("Hub Settings", "Hub Settings", "company_email")
-
-	response = call_hub_method('add_hub_seller_activity', {
-		'hub_seller': hub_seller,
-		'activity_details': json.dumps({
-			'subject': 'Publishing items:' + sync_details['status'],
-			'content': json.dumps(sync_details['stats'])
-		})
-	})
-
-	if response:
-		frappe.db.set_value('Hub Settings', 'Hub Settings', 'sync_in_progress', 0)
-		frappe.db.set_value('Hub Settings', 'Hub Settings', 'last_sync_datetime', frappe.utils.now())
-	else:
-		frappe.throw('Unable to update remote activity')
-
-@frappe.whitelist()
-def get_item_favourites(start=0, limit=20, fields=["*"], order_by=None):
-	doctype = 'Hub Item'
-	hub_settings = frappe.get_doc('Hub Settings')
-	item_names_str = hub_settings.get('custom_data') or '[]'
-	item_names = json.loads(item_names_str)
-	filters = json.dumps({
-		'hub_item_code': ['in', item_names]
-	})
-	return get_list(doctype, start, limit, fields, filters, order_by)
-
-@frappe.whitelist()
-def update_wishlist_item(item_name, remove=0):
-	remove = int(remove)
-	hub_settings = frappe.get_doc('Hub Settings')
-	data = hub_settings.get('custom_data')
-	if not data or not json.loads(data):
-		data = '[]'
-		hub_settings.custom_data = data
-		hub_settings.save()
-
-	item_names_str = data
-	item_names = json.loads(item_names_str)
-	if not remove and item_name not in item_names:
-		item_names.append(item_name)
-	if remove and item_name in item_names:
-		item_names.remove(item_name)
-
-	item_names_str = json.dumps(item_names)
-
-	hub_settings.custom_data = item_names_str
-	hub_settings.save()
-
-
-@frappe.whitelist()
-def update_category(hub_item_code, category):
-	connection = get_hub_connection()
-
-	# args = frappe._dict(dict(
-	# 	doctype='Hub Category',
-	# 	hub_category_name=category
-	# ))
-	# response = connection.insert('Hub Category', args)
-
-	response = connection.update('Hub Item', frappe._dict(dict(
-		doctype='Hub Item',
-		hub_category = category
-	)), hub_item_code)
-
-	return response
-
-def get_hub_connection():
-	if frappe.db.exists('Data Migration Connector', 'Hub Connector'):
-		hub_connector = frappe.get_doc('Data Migration Connector', 'Hub Connector')
-		hub_connection = hub_connector.get_connection()
-		return hub_connection.connection
-
-	# read-only connection
-	hub_connection = FrappeClient(frappe.conf.hub_url)
-	return hub_connection
-
-def make_opportunity(buyer_name, email_id):
-	buyer_name = "HUB-" + buyer_name
-
-	if not frappe.db.exists('Lead', {'email_id': email_id}):
-		lead = frappe.new_doc("Lead")
-		lead.lead_name = buyer_name
-		lead.email_id = email_id
-		lead.save(ignore_permissions=True)
-
-	o = frappe.new_doc("Opportunity")
-	o.enquiry_from = "Lead"
-	o.lead = frappe.get_all("Lead", filters={"email_id": email_id}, fields = ["name"])[0]["name"]
-	o.save(ignore_permissions=True)
-
-@frappe.whitelist()
-def make_rfq_and_send_opportunity(item, supplier):
-	supplier = make_supplier(supplier)
-	contact = make_contact(supplier)
-	item = make_item(item)
-	rfq = make_rfq(item, supplier, contact)
-	status = send_opportunity(contact)
-
-	return {
-		'rfq': rfq,
-		'hub_document_created': status
-	}
-
-def make_supplier(supplier):
-	# make supplier if not already exists
-	supplier = frappe._dict(json.loads(supplier))
-
-	if not frappe.db.exists('Supplier', {'supplier_name': supplier.supplier_name}):
-		supplier_doc = frappe.get_doc({
-			'doctype': 'Supplier',
-			'supplier_name': supplier.supplier_name,
-			'supplier_group': supplier.supplier_group,
-			'supplier_email': supplier.supplier_email
-		}).insert()
-	else:
-		supplier_doc = frappe.get_doc('Supplier', supplier.supplier_name)
-
-	return supplier_doc
-
-def make_contact(supplier):
-	contact_name = get_default_contact('Supplier', supplier.supplier_name)
-	# make contact if not already exists
-	if not contact_name:
-		contact = frappe.get_doc({
-			'doctype': 'Contact',
-			'first_name': supplier.supplier_name,
-			'email_id': supplier.supplier_email,
-			'is_primary_contact': 1,
-			'links': [
-				{'link_doctype': 'Supplier', 'link_name': supplier.supplier_name}
-			]
-		}).insert()
-	else:
-		contact = frappe.get_doc('Contact', contact_name)
-
-	return contact
-
-def make_item(item):
-	# make item if not already exists
-	item = frappe._dict(json.loads(item))
-
-	if not frappe.db.exists('Item', {'item_code': item.item_code}):
-		item_doc = frappe.get_doc({
-			'doctype': 'Item',
-			'item_code': item.item_code,
-			'item_group': item.item_group,
-			'is_item_from_hub': 1
-		}).insert()
-	else:
-		item_doc = frappe.get_doc('Item', item.item_code)
-
-	return item_doc
-
-def make_rfq(item, supplier, contact):
-	# make rfq
-	rfq = frappe.get_doc({
-		'doctype': 'Request for Quotation',
-		'transaction_date': nowdate(),
-		'status': 'Draft',
-		'company': frappe.db.get_single_value('Hub Settings', 'company'),
-		'message_for_supplier': 'Please supply the specified items at the best possible rates',
-		'suppliers': [
-			{ 'supplier': supplier.name, 'contact': contact.name }
-		],
-		'items': [
-			{
-				'item_code': item.item_code,
-				'qty': 1,
-				'schedule_date': nowdate(),
-				'warehouse': item.default_warehouse or get_root_of("Warehouse"),
-				'description': item.description,
-				'uom': item.stock_uom
-			}
-		]
-	}).insert()
-
-	rfq.save()
-	rfq.submit()
-	return rfq
-
-def send_opportunity(contact):
-	# Make Hub Message on Hub with lead data
-	doc = {
-		'doctype': 'Lead',
-		'lead_name': frappe.db.get_single_value('Hub Settings', 'company'),
-		'email_id': frappe.db.get_single_value('Hub Settings', 'user')
-	}
-
-	args = frappe._dict(dict(
-		doctype='Hub Message',
-		reference_doctype='Lead',
-		data=json.dumps(doc),
-		user=contact.email_id
-	))
-
-	connection = get_hub_connection()
-	response = connection.insert('Hub Message', args)
-
-	return response.ok
diff --git a/erpnext/hub_node/api.py b/erpnext/hub_node/api.py
new file mode 100644
index 0000000..a1d9e8a
--- /dev/null
+++ b/erpnext/hub_node/api.py
@@ -0,0 +1,285 @@
+from __future__ import unicode_literals
+import frappe, requests, json
+from frappe.utils import now
+from frappe.frappeclient import FrappeClient
+
+@frappe.whitelist()
+def call_hub_method(method, params=None):
+	connection = get_hub_connection()
+
+	if type(params) == unicode:
+		params = json.loads(params)
+
+	params.update({
+		'cmd': 'hub.hub.api.' + method
+	})
+
+	response = connection.post_request(params)
+	return response
+
+
+#### LOCAL ITEMS
+@frappe.whitelist()
+def get_valid_items(search_value=''):
+	items = frappe.get_list(
+		'Item',
+		fields=["*"],
+		filters={
+			'item_name': ['like', '%' + search_value + '%'],
+			'publish_in_hub': 0
+		},
+		order_by="modified desc"
+	)
+
+	valid_items = filter(lambda x: x.image and x.description, items)
+
+	def attach_source_type(item):
+		item.source_type = "local"
+		return item
+
+	valid_items = map(lambda x: attach_source_type(x), valid_items)
+	return valid_items
+
+@frappe.whitelist()
+def publish_selected_items(items_to_publish):
+	items_to_publish = json.loads(items_to_publish)
+	if not len(items_to_publish):
+		return
+
+	for item_code in items_to_publish:
+		frappe.db.set_value('Item', item_code, 'publish_in_hub', 1)
+
+	try:
+		hub_settings = frappe.get_doc('Hub Settings')
+		item_sync_preprocess()
+		hub_settings.sync()
+	except Exception as e:
+		frappe.db.set_value("Hub Settings", "Hub Settings", "sync_in_progress", 0)
+		frappe.throw(e)
+
+def item_sync_preprocess():
+	# Call Hub to make a new activity
+	# and return an activity ID
+	# that will be used as the remote ID for the Migration Run
+
+	hub_seller = frappe.db.get_value("Hub Settings", "Hub Settings", "company_email")
+
+	response = call_hub_method('add_hub_seller_activity', {
+		'hub_seller': hub_seller,
+		'activity_details': json.dumps({
+			'subject': 'Publishing items',
+			'status': 'Success'
+		})
+	})
+
+	if response:
+		frappe.db.set_value("Hub Settings", "Hub Settings", "sync_in_progress", 1)
+		return response
+	else:
+		frappe.throw('Unable to update remote activity')
+
+def item_sync_postprocess(sync_details):
+	hub_seller = frappe.db.get_value("Hub Settings", "Hub Settings", "company_email")
+
+	response = call_hub_method('add_hub_seller_activity', {
+		'hub_seller': hub_seller,
+		'activity_details': json.dumps({
+			'subject': 'Publishing items:' + sync_details['status'],
+			'content': json.dumps(sync_details['stats'])
+		})
+	})
+
+	if response:
+		frappe.db.set_value('Hub Settings', 'Hub Settings', 'sync_in_progress', 0)
+		frappe.db.set_value('Hub Settings', 'Hub Settings', 'last_sync_datetime', frappe.utils.now())
+	else:
+		frappe.throw('Unable to update remote activity')
+
+def get_hub_connection():
+	if frappe.db.exists('Data Migration Connector', 'Hub Connector'):
+		hub_connector = frappe.get_doc('Data Migration Connector', 'Hub Connector')
+		hub_connection = hub_connector.get_connection()
+		return hub_connection.connection
+
+	# read-only connection
+	hub_connection = FrappeClient(frappe.conf.hub_url)
+	return hub_connection
+
+
+
+# Legacy functionality
+# =============================================================================
+
+@frappe.whitelist()
+def get_item_favourites(start=0, limit=20, fields=["*"], order_by=None):
+	doctype = 'Hub Item'
+	hub_settings = frappe.get_doc('Hub Settings')
+	item_names_str = hub_settings.get('custom_data') or '[]'
+	item_names = json.loads(item_names_str)
+	filters = json.dumps({
+		'hub_item_code': ['in', item_names]
+	})
+	return get_list(doctype, start, limit, fields, filters, order_by)
+
+@frappe.whitelist()
+def update_wishlist_item(item_name, remove=0):
+	remove = int(remove)
+	hub_settings = frappe.get_doc('Hub Settings')
+	data = hub_settings.get('custom_data')
+	if not data or not json.loads(data):
+		data = '[]'
+		hub_settings.custom_data = data
+		hub_settings.save()
+
+	item_names_str = data
+	item_names = json.loads(item_names_str)
+	if not remove and item_name not in item_names:
+		item_names.append(item_name)
+	if remove and item_name in item_names:
+		item_names.remove(item_name)
+
+	item_names_str = json.dumps(item_names)
+
+	hub_settings.custom_data = item_names_str
+	hub_settings.save()
+
+@frappe.whitelist()
+def update_category(hub_item_code, category):
+	connection = get_hub_connection()
+
+	# args = frappe._dict(dict(
+	# 	doctype='Hub Category',
+	# 	hub_category_name=category
+	# ))
+	# response = connection.insert('Hub Category', args)
+
+	response = connection.update('Hub Item', frappe._dict(dict(
+		doctype='Hub Item',
+		hub_category = category
+	)), hub_item_code)
+
+	return response
+
+def make_opportunity(buyer_name, email_id):
+	buyer_name = "HUB-" + buyer_name
+
+	if not frappe.db.exists('Lead', {'email_id': email_id}):
+		lead = frappe.new_doc("Lead")
+		lead.lead_name = buyer_name
+		lead.email_id = email_id
+		lead.save(ignore_permissions=True)
+
+	o = frappe.new_doc("Opportunity")
+	o.enquiry_from = "Lead"
+	o.lead = frappe.get_all("Lead", filters={"email_id": email_id}, fields = ["name"])[0]["name"]
+	o.save(ignore_permissions=True)
+
+@frappe.whitelist()
+def make_rfq_and_send_opportunity(item, supplier):
+	supplier = make_supplier(supplier)
+	contact = make_contact(supplier)
+	item = make_item(item)
+	rfq = make_rfq(item, supplier, contact)
+	status = send_opportunity(contact)
+
+	return {
+		'rfq': rfq,
+		'hub_document_created': status
+	}
+
+def make_supplier(supplier):
+	# make supplier if not already exists
+	supplier = frappe._dict(json.loads(supplier))
+
+	if not frappe.db.exists('Supplier', {'supplier_name': supplier.supplier_name}):
+		supplier_doc = frappe.get_doc({
+			'doctype': 'Supplier',
+			'supplier_name': supplier.supplier_name,
+			'supplier_group': supplier.supplier_group,
+			'supplier_email': supplier.supplier_email
+		}).insert()
+	else:
+		supplier_doc = frappe.get_doc('Supplier', supplier.supplier_name)
+
+	return supplier_doc
+
+def make_contact(supplier):
+	contact_name = get_default_contact('Supplier', supplier.supplier_name)
+	# make contact if not already exists
+	if not contact_name:
+		contact = frappe.get_doc({
+			'doctype': 'Contact',
+			'first_name': supplier.supplier_name,
+			'email_id': supplier.supplier_email,
+			'is_primary_contact': 1,
+			'links': [
+				{'link_doctype': 'Supplier', 'link_name': supplier.supplier_name}
+			]
+		}).insert()
+	else:
+		contact = frappe.get_doc('Contact', contact_name)
+
+	return contact
+
+def make_item(item):
+	# make item if not already exists
+	item = frappe._dict(json.loads(item))
+
+	if not frappe.db.exists('Item', {'item_code': item.item_code}):
+		item_doc = frappe.get_doc({
+			'doctype': 'Item',
+			'item_code': item.item_code,
+			'item_group': item.item_group,
+			'is_item_from_hub': 1
+		}).insert()
+	else:
+		item_doc = frappe.get_doc('Item', item.item_code)
+
+	return item_doc
+
+def make_rfq(item, supplier, contact):
+	# make rfq
+	rfq = frappe.get_doc({
+		'doctype': 'Request for Quotation',
+		'transaction_date': nowdate(),
+		'status': 'Draft',
+		'company': frappe.db.get_single_value('Hub Settings', 'company'),
+		'message_for_supplier': 'Please supply the specified items at the best possible rates',
+		'suppliers': [
+			{ 'supplier': supplier.name, 'contact': contact.name }
+		],
+		'items': [
+			{
+				'item_code': item.item_code,
+				'qty': 1,
+				'schedule_date': nowdate(),
+				'warehouse': item.default_warehouse or get_root_of("Warehouse"),
+				'description': item.description,
+				'uom': item.stock_uom
+			}
+		]
+	}).insert()
+
+	rfq.save()
+	rfq.submit()
+	return rfq
+
+def send_opportunity(contact):
+	# Make Hub Message on Hub with lead data
+	doc = {
+		'doctype': 'Lead',
+		'lead_name': frappe.db.get_single_value('Hub Settings', 'company'),
+		'email_id': frappe.db.get_single_value('Hub Settings', 'user')
+	}
+
+	args = frappe._dict(dict(
+		doctype='Hub Message',
+		reference_doctype='Lead',
+		data=json.dumps(doc),
+		user=contact.email_id
+	))
+
+	connection = get_hub_connection()
+	response = connection.insert('Hub Message', args)
+
+	return response.ok
diff --git a/erpnext/hub_node/data_migration_mapping/item_to_hub_item/item_to_hub_item.json b/erpnext/hub_node/data_migration_mapping/item_to_hub_item/item_to_hub_item.json
index edcf91a..3ace088 100644
--- a/erpnext/hub_node/data_migration_mapping/item_to_hub_item/item_to_hub_item.json
+++ b/erpnext/hub_node/data_migration_mapping/item_to_hub_item/item_to_hub_item.json
@@ -1,45 +1,45 @@
 {
- "condition": "{\"publish_in_hub\": 1}",
- "creation": "2017-09-07 13:27:52.726350",
- "docstatus": 0,
- "doctype": "Data Migration Mapping",
+ "condition": "{\"publish_in_hub\": 1}", 
+ "creation": "2017-09-07 13:27:52.726350", 
+ "docstatus": 0, 
+ "doctype": "Data Migration Mapping", 
  "fields": [
   {
-   "is_child_table": 0,
-   "local_fieldname": "item_code",
+   "is_child_table": 0, 
+   "local_fieldname": "item_code", 
    "remote_fieldname": "item_code"
-  },
+  }, 
   {
-   "is_child_table": 0,
-   "local_fieldname": "item_name",
+   "is_child_table": 0, 
+   "local_fieldname": "item_name", 
    "remote_fieldname": "item_name"
-  },
+  }, 
   {
-   "is_child_table": 0,
-   "local_fieldname": "eval:frappe.db.get_value('Hub Settings' , 'Hub Settings', 'company_email')",
+   "is_child_table": 0, 
+   "local_fieldname": "eval:frappe.db.get_value('Hub Settings' , 'Hub Settings', 'company_email')", 
    "remote_fieldname": "hub_seller"
-  },
+  }, 
   {
-   "is_child_table": 0,
-   "local_fieldname": "image",
+   "is_child_table": 0, 
+   "local_fieldname": "image", 
    "remote_fieldname": "image"
-  },
+  }, 
   {
-   "is_child_table": 0,
-   "local_fieldname": "item_group",
+   "is_child_table": 0, 
+   "local_fieldname": "item_group", 
    "remote_fieldname": "item_group"
   }
- ],
- "idx": 1,
- "local_doctype": "Item",
- "mapping_name": "Item to Hub Item",
- "mapping_type": "Push",
- "migration_id_field": "hub_sync_id",
- "modified": "2018-07-28 22:25:35.289335",
- "modified_by": "cave@aperture.com",
- "name": "Item to Hub Item",
- "owner": "Administrator",
- "page_length": 10,
- "remote_objectname": "Hub Item",
+ ], 
+ "idx": 1, 
+ "local_doctype": "Item", 
+ "mapping_name": "Item to Hub Item", 
+ "mapping_type": "Push", 
+ "migration_id_field": "hub_sync_id", 
+ "modified": "2018-08-01 16:37:09.170546", 
+ "modified_by": "Administrator", 
+ "name": "Item to Hub Item", 
+ "owner": "Administrator", 
+ "page_length": 10, 
+ "remote_objectname": "Hub Item", 
  "remote_primary_key": "item_code"
-}
+}
\ No newline at end of file
diff --git a/erpnext/hub_node/data_migration_plan/hub_sync/hub_sync.json b/erpnext/hub_node/data_migration_plan/hub_sync/hub_sync.json
index 7490e43..1f772b6 100644
--- a/erpnext/hub_node/data_migration_plan/hub_sync/hub_sync.json
+++ b/erpnext/hub_node/data_migration_plan/hub_sync/hub_sync.json
@@ -1,19 +1,19 @@
 {
- "creation": "2017-09-07 11:39:38.445902",
- "docstatus": 0,
- "doctype": "Data Migration Plan",
- "idx": 1,
+ "creation": "2017-09-07 11:39:38.445902", 
+ "docstatus": 0, 
+ "doctype": "Data Migration Plan", 
+ "idx": 1, 
  "mappings": [
   {
-   "enabled": 1,
+   "enabled": 1, 
    "mapping": "Item to Hub Item"
   }
- ],
- "modified": "2018-07-28 22:25:35.216172",
- "modified_by": "cave@aperture.com",
- "module": "Hub Node",
- "name": "Hub Sync",
- "owner": "Administrator",
- "plan_name": "Hub Sync",
- "postprocess_method": "erpnext.hub_node.item_sync_postprocess"
-}
+ ], 
+ "modified": "2018-08-01 16:37:09.027512", 
+ "modified_by": "Administrator", 
+ "module": "Hub Node", 
+ "name": "Hub Sync", 
+ "owner": "Administrator", 
+ "plan_name": "Hub Sync", 
+ "postprocess_method": "erpnext.hub_node.api.item_sync_postprocess"
+}
\ No newline at end of file
diff --git a/erpnext/public/js/hub/hub_call.js b/erpnext/public/js/hub/hub_call.js
index e0fead3..6786cf6 100644
--- a/erpnext/public/js/hub/hub_call.js
+++ b/erpnext/public/js/hub/hub_call.js
@@ -19,7 +19,7 @@
 		}, timeout);
 
 		frappe.call({
-			method: 'erpnext.hub_node.call_hub_method',
+			method: 'erpnext.hub_node.api.call_hub_method',
 			args: {
 				method,
 				params: args
diff --git a/erpnext/public/js/hub/pages/category.js b/erpnext/public/js/hub/pages/category.js
index de1281c..87311ab 100644
--- a/erpnext/public/js/hub/pages/category.js
+++ b/erpnext/public/js/hub/pages/category.js
@@ -12,7 +12,7 @@
 
 	get_items_for_category(category) {
 		this.$wrapper.find('.hub-card-container').empty();
-		return frappe.call('erpnext.hub_node.get_list', {
+		return frappe.call('erpnext.hub_node.api.get_list', {
 			doctype: 'Hub Item',
 			filters: {
 				hub_category: category
@@ -24,4 +24,4 @@
 		const html = get_item_card_container_html(items, __(this.category));
 		this.$wrapper.append(html)
 	}
-}
\ No newline at end of file
+}
diff --git a/erpnext/public/js/hub/pages/publish.js b/erpnext/public/js/hub/pages/publish.js
index 2bcc0c6..859782e 100644
--- a/erpnext/public/js/hub/pages/publish.js
+++ b/erpnext/public/js/hub/pages/publish.js
@@ -196,7 +196,7 @@
 			return this.unpublished_items;
 		}
 		return frappe.call(
-			'erpnext.hub_node.get_valid_items',
+			'erpnext.hub_node.api.get_valid_items',
 			{
 				search_value: this.search_value
 			}
@@ -219,10 +219,10 @@
 		this.items_to_publish = items_to_publish;
 
 		return frappe.call(
-			'erpnext.hub_node.publish_selected_items',
+			'erpnext.hub_node.api.publish_selected_items',
 			{
 				items_to_publish: item_codes_to_publish
 			}
 		)
 	}
-}
\ No newline at end of file
+}