diff --git a/packages/backend/dump.rdb b/packages/backend/dump.rdb new file mode 100644 index 0000000000..f02f988573 Binary files /dev/null and b/packages/backend/dump.rdb differ diff --git a/packages/backend/src/apps/usda-food-data/actions/index.js b/packages/backend/src/apps/usda-food-data/actions/index.js new file mode 100644 index 0000000000..aa499e6aea --- /dev/null +++ b/packages/backend/src/apps/usda-food-data/actions/index.js @@ -0,0 +1,3 @@ +import searchFood from './search-food/index.js'; + +export default [searchFood]; diff --git a/packages/backend/src/apps/usda-food-data/actions/search-food/index.js b/packages/backend/src/apps/usda-food-data/actions/search-food/index.js new file mode 100644 index 0000000000..4fcfac3155 --- /dev/null +++ b/packages/backend/src/apps/usda-food-data/actions/search-food/index.js @@ -0,0 +1,24 @@ +import defineAction from '../../../../helpers/define-action.js'; + +export default defineAction({ + name: 'Search Food', + key: 'searchFood', + description: 'Search for foods using keywords', + arguments: [ + { + label: 'Food item', + key: 'query', + type: 'string', + required: true, + variables: true, + description: '', + }, + ], + + async run($) { + const query = $.step.parameters.query; + const params = { query: query, pageNumber: 2, pageSize: 25 }; + const { data } = await $.http.get('/v1/foods/search', { params }); + $.setActionItem({ raw: data }); + }, +}); diff --git a/packages/backend/src/apps/usda-food-data/assets/favicon.svg b/packages/backend/src/apps/usda-food-data/assets/favicon.svg new file mode 100644 index 0000000000..9990c59df1 --- /dev/null +++ b/packages/backend/src/apps/usda-food-data/assets/favicon.svg @@ -0,0 +1,12 @@ + + + + +usda-symbol + + + + + diff --git a/packages/backend/src/apps/usda-food-data/auth/index.js b/packages/backend/src/apps/usda-food-data/auth/index.js new file mode 100644 index 0000000000..22ab4fa4b5 --- /dev/null +++ b/packages/backend/src/apps/usda-food-data/auth/index.js @@ -0,0 +1,33 @@ +import verifyCredentials from './verify-credentials.js'; +import isStillVerified from './is-still-verified.js'; + +export default { + fields: [ + { + key: 'screenName', + label: 'Screen Name', + type: 'string', + required: true, + readOnly: false, + value: null, + placeholder: null, + description: + 'Screen name of your connection to be used on Automatisch UI.', + clickToCopy: false, + }, + { + key: 'apiKey', + label: 'API Key', + type: 'string', + required: true, + readOnly: false, + value: null, + placeholder: null, + description: 'Food Data Central API key of your account.', + clickToCopy: false, + }, + ], + + verifyCredentials, + isStillVerified, +}; diff --git a/packages/backend/src/apps/usda-food-data/auth/is-still-verified.js b/packages/backend/src/apps/usda-food-data/auth/is-still-verified.js new file mode 100644 index 0000000000..6663679aab --- /dev/null +++ b/packages/backend/src/apps/usda-food-data/auth/is-still-verified.js @@ -0,0 +1,8 @@ +import verifyCredentials from './verify-credentials.js'; + +const isStillVerified = async ($) => { + await verifyCredentials($); + return true; +}; + +export default isStillVerified; diff --git a/packages/backend/src/apps/usda-food-data/auth/verify-credentials.js b/packages/backend/src/apps/usda-food-data/auth/verify-credentials.js new file mode 100644 index 0000000000..d2c4c76f1c --- /dev/null +++ b/packages/backend/src/apps/usda-food-data/auth/verify-credentials.js @@ -0,0 +1,10 @@ +const verifyCredentials = async ($) => { + await $.http.get('/v1/foods/list'); + + await $.auth.set({ + screenName: $.auth.data.screenName, + apiKey: $.auth.data.apiKey, + }); +}; + +export default verifyCredentials; diff --git a/packages/backend/src/apps/usda-food-data/common/add-auth-header.js b/packages/backend/src/apps/usda-food-data/common/add-auth-header.js new file mode 100644 index 0000000000..f0f524db93 --- /dev/null +++ b/packages/backend/src/apps/usda-food-data/common/add-auth-header.js @@ -0,0 +1,12 @@ +const addAuthHeader = ($, requestConfig) => { + if ($.auth.data?.apiKey) { + requestConfig.params = { + ...requestConfig.params, + api_key: $.auth.data.apiKey, + }; + } + + return requestConfig; +}; + +export default addAuthHeader; \ No newline at end of file diff --git a/packages/backend/src/apps/usda-food-data/index.js b/packages/backend/src/apps/usda-food-data/index.js new file mode 100644 index 0000000000..4b4372256f --- /dev/null +++ b/packages/backend/src/apps/usda-food-data/index.js @@ -0,0 +1,18 @@ +import defineApp from '../../helpers/define-app.js'; +import addAuthHeader from './common/add-auth-header.js'; +import auth from './auth/index.js'; +import actions from './actions/index.js'; + +export default defineApp({ + name: 'USDA Food Data', + key: 'usda-food-data', + iconUrl: '{BASE_URL}/apps/usda-food-data/assets/favicon.svg', + authDocUrl: '', + supportsConnections: true, + baseUrl: 'https://api.nal.usda.gov/fdc', + apiBaseUrl: 'https://api.nal.usda.gov/fdc', + primaryColor: '#6f42c1', + beforeRequest: [addAuthHeader], + auth, + actions, +});