diff --git a/.agents/skills/release-review/SKILL.md b/.agents/skills/release-review/SKILL.md index a54872842ded..26b96da4c161 100644 --- a/.agents/skills/release-review/SKILL.md +++ b/.agents/skills/release-review/SKILL.md @@ -31,8 +31,8 @@ same way; docs changes always go in a PR on the docs repo. `git tag --sort=-creatordate --format='%(creatordate:short) %(refname:short)'`. Read every entry released in the period. Skip the Unreleased section. Lightning often lists a release's changes under its `-pre` heading, such as - `2.18.2-pre`, and leaves the final `2.18.2` empty, so read the `-pre` - entries too and report them under the final version. + `2.18.2-pre`, and leaves the final `2.18.2` empty, so read the `-pre` entries + too and report them under the final version. 2. **Rewrite each entry as a change a user would notice**: a new feature, a renamed button, a new CLI flag, a changed default, a removed option. Drop internal changes like refactors, dependency bumps, and tests. Open the linked diff --git a/.agents/skills/translate/SKILL.md b/.agents/skills/translate/SKILL.md index 84019fb1284c..d77f38e60c82 100644 --- a/.agents/skills/translate/SKILL.md +++ b/.agents/skills/translate/SKILL.md @@ -11,22 +11,21 @@ disable-model-invocation: true # Translate Translate English docs into Spanish (`es`) and French (`fr`). The English is -always the source of truth. Translations are generated files that live in -this repo. Save each one at the same path as the English page, under +always the source of truth. Translations are generated files that live in this +repo. Save each one at the same path as the English page, under `i18n//docusaurus-plugin-content-docs/current/`. For example, `docs/build/triggers.md` goes to -`i18n/es/docusaurus-plugin-content-docs/current/build/triggers.md`. -Docusaurus ignores a file anywhere else without an error, and the page stays -English. +`i18n/es/docusaurus-plugin-content-docs/current/build/triggers.md`. Docusaurus +ignores a file anywhere else without an error, and the page stays English. -The sidebar headings come from `sidebars-main.js`, not from the pages. If it -has new or renamed entries, run +The sidebar headings come from `sidebars-main.js`, not from the pages. If it has +new or renamed entries, run `yarn docusaurus write-translations --locale `. This adds them to -`i18n//docusaurus-plugin-content-docs/current.json` in English and -keeps the ones already translated. Translate the new ones. +`i18n//docusaurus-plugin-content-docs/current.json` in English and keeps +the ones already translated. Translate the new ones. -Never translate the generated adaptor pages, the job library, the old v1 -docs, or articles and blog posts. +Never translate the generated adaptor pages, the job library, the old v1 docs, +or articles and blog posts. ## Before you start @@ -38,9 +37,9 @@ Check these three things. If any fails, stop and ask. - `glossary.yml` and `translation-rules.yml` are valid YAML. Translate the English page exactly as it is on disk, so the hash you record -matches what you translated. Do not reformat it; English changes belong in -their own PR. After writing the translation, run -`yarn prettier --write ` on only the files you changed under `i18n/`. +matches what you translated. Do not reformat it; English changes belong in their +own PR. After writing the translation, run `yarn prettier --write ` on +only the files you changed under `i18n/`. ## Front matter @@ -57,33 +56,32 @@ The hash is the content hash of the English file, from merges: a hash pointing at a commit made on a branch dangles as soon as the branch is squashed onto main. A content hash is the same wherever the file lives, and it answers the only question the field exists to answer: is the -English still the version this was translated from? To compare, hash the -current English file and check it against the recorded value. +English still the version this was translated from? To compare, hash the current +English file and check it against the recorded value. `translation_review_status` can be `machine`, `needs-review`, or -`human-reviewed`. Only a human ever sets `human-reviewed`, and when they do -they also add `translation_reviewer` and `translation_review_date`. +`human-reviewed`. Only a human ever sets `human-reviewed`, and when they do they +also add `translation_reviewer` and `translation_review_date`. ## Decide what to do with each page - **No translation yet.** Translate the whole page. -- **The hash matches the current English file.** Skip it, whatever its - status. The English has not changed since it was translated. The one - exception: if `glossary.yml` or `translation-rules.yml` was committed more - recently than the translation (compare `git log -1 --format=%ct -- `), - treat a `machine` page as if the hash no longer matches, so it picks up the - new rules. -- **The hash no longer matches, and the status is `machine`, `needs-review`, - or missing.** Translate the whole page again, but keep any fenced blocks - (see below) exactly as they were. -- **The hash no longer matches, and the status is `human-reviewed`.** Leave - the file out of the translation PR. Instead, open a separate PR for the - named reviewer that changes only the affected parts. Recover the English the +- **The hash matches the current English file.** Skip it, whatever its status. + The English has not changed since it was translated. The one exception: if + `glossary.yml` or `translation-rules.yml` was committed more recently than the + translation (compare `git log -1 --format=%ct -- `), treat a `machine` + page as if the hash no longer matches, so it picks up the new rules. +- **The hash no longer matches, and the status is `machine`, `needs-review`, or + missing.** Translate the whole page again, but keep any fenced blocks (see + below) exactly as they were. +- **The hash no longer matches, and the status is `human-reviewed`.** Leave the + file out of the translation PR. Instead, open a separate PR for the named + reviewer that changes only the affected parts. Recover the English the reviewer saw with `git cat-file -p `, diff it against the current English, and translate only what changed. In the same PR, set - `translation_source_hash` to the current English hash and leave the status - as `human-reviewed`: the reviewer merging it approves it. If the old version - is no longer in the repo, say so and offer a full retranslation in that PR + `translation_source_hash` to the current English hash and leave the status as + `human-reviewed`: the reviewer merging it approves it. If the old version is + no longer in the repo, say so and offer a full retranslation in that PR instead. ## Fenced blocks @@ -92,19 +90,20 @@ A human can wrap part of a translation like this: ```markdown + Text a reviewer has corrected by hand. ``` Copy those blocks into the new translation exactly, in the same place. If the -English they correspond to has been deleted, keep the block anyway and ask -what to do with it. +English they correspond to has been deleted, keep the block anyway and ask what +to do with it. ## How to translate - Words in `glossary.yml` stay in English. For ordinary words that are also - product terms, like "run" or "step", keep the English only when the word - means the OpenFn thing. + product terms, like "run" or "step", keep the English only when the word means + the OpenFn thing. - Follow any rules for the locale in `translation-rules.yml`. By default, Spanish uses "tú" and French uses "vous". - Copy code blocks and inline code exactly. You may translate comments inside @@ -112,31 +111,31 @@ what to do with it. - Keep the names of things in the app, like buttons, menus, tabs, and field labels, exactly as they are in the English. The app is English only, so a translated button name points the reader at a button that does not exist. -- Keep the same structure: same headings at the same levels, same lists, - same callouts, same components. -- Keep internal links as they are in the English. Do not add `/es/` or - `/fr/`; Docusaurus adds the locale when it builds the page. -- The one exception: a relative link like `../deploy/portability.md` breaks - if the page it points to has no translation yet. Write it as the page's - full address instead, like `/documentation/deploy/portability`. If the - target page sets a `slug` in its front matter, the address is - `/documentation` plus the slug: `slug: /api-tokens` gives - `/documentation/api-tokens`, not the folder path. -- Give translated headings the original English anchor so existing links - still work. +- Keep the same structure: same headings at the same levels, same lists, same + callouts, same components. +- Keep internal links as they are in the English. Do not add `/es/` or `/fr/`; + Docusaurus adds the locale when it builds the page. +- The one exception: a relative link like `../deploy/portability.md` breaks if + the page it points to has no translation yet. Write it as the page's full + address instead, like `/documentation/deploy/portability`. If the target page + sets a `slug` in its front matter, the address is `/documentation` plus the + slug: `slug: /api-tokens` gives `/documentation/api-tokens`, not the folder + path. +- Give translated headings the original English anchor so existing links still + work. ## Before you commit -Check that the fixed glossary terms (the ones without `product_noun: true`, -such as OpenFn, Lightning, adaptor, webhook) appear as many times as in the -English. Product nouns like "run" and "step" are allowed to differ, since -their ordinary-English uses get translated. Before counting, join each file -into one line with single spaces: Prettier wraps prose at 80 columns, and -English and Spanish wrap at different points, so a multi-word term like "work -order" can sit across a line break in one file and not the other. Check the -code blocks are identical. Check the counts of headings, code blocks, -callouts, images, and tables match. Check the front matter is complete. Check -every fenced block survived. Then build the site and make sure it passes: +Check that the fixed glossary terms (the ones without `product_noun: true`, such +as OpenFn, Lightning, adaptor, webhook) appear as many times as in the English. +Product nouns like "run" and "step" are allowed to differ, since their +ordinary-English uses get translated. Before counting, join each file into one +line with single spaces: Prettier wraps prose at 80 columns, and English and +Spanish wrap at different points, so a multi-word term like "work order" can sit +across a line break in one file and not the other. Check the code blocks are +identical. Check the counts of headings, code blocks, callouts, images, and +tables match. Check the front matter is complete. Check every fenced block +survived. Then build the site and make sure it passes: ```bash yarn generate-library @@ -145,11 +144,11 @@ yarn build ``` Build the whole site, not just your locale. `yarn build --locale ` -builds the locale at the site root, so every correct `/es/...` link shows up -as broken. +builds the locale at the site root, so every correct `/es/...` link shows up as +broken. Open one PR per locale, separate from the English PR. Translated files do not -count toward the 20-file limit, because a locale's translations are reviewed -as a set. In the PR description, say which tool and model translated the -pages. If you spot a problem in the English while translating, note it for -the next English pass; do not fix it here. +count toward the 20-file limit, because a locale's translations are reviewed as +a set. In the PR description, say which tool and model translated the pages. If +you spot a problem in the English while translating, note it for the next +English pass; do not fix it here. diff --git a/.git-blame-ignore-revs b/.git-blame-ignore-revs new file mode 100644 index 000000000000..826745386203 --- /dev/null +++ b/.git-blame-ignore-revs @@ -0,0 +1,2 @@ +# Prettier reformat of the whole project +f5bf343eabd5fe6896f4945bc17887b6a3763183 diff --git a/README.md b/README.md index ac0049786e52..bb16c64d742b 100644 --- a/README.md +++ b/README.md @@ -119,8 +119,8 @@ Builds to `main` will automatically be deployed to [docs.openfn.org](https://docs.openfn.org). This branch is protected, but we welcome pull requests! - ### To add help sections to all adaptor files: + ```bash yarn run add-help-sections # or @@ -128,5 +128,6 @@ node scripts/add-help-section.js ``` ### For new adaptor files: -When creating new adaptor documentation files, make sure to run `npm run add-help-sections` to add the standard help section. +When creating new adaptor documentation files, make sure to run +`npm run add-help-sections` to add the standard help section. diff --git a/adaptors/asana.md b/adaptors/asana.md index 7235511026cd..49c1b5d7901a 100644 --- a/adaptors/asana.md +++ b/adaptors/asana.md @@ -4,25 +4,45 @@ title: Asana Adaptor ## About Asana -[Asana](https://app.asana.com/) is a web-based project management tool that helps teams organize, plan, collaborate, and execute tasks. +[Asana](https://app.asana.com/) is a web-based project management tool that +helps teams organize, plan, collaborate, and execute tasks. ## Integration Options Asana supports 2 primary integration options: -1. Rest API: Asana has an available REST API that enables external services like OpenFn to pull data from Asana, or push data from external apps to Asana. This option is suited for scheduled, bulk syncs or workflows that must update data in Asana with external information. See [functions](/adaptors/packages/asana-docs) for more on how to use this adaptor to work with the API. +1. Rest API: Asana has an available REST API that enables external services like + OpenFn to pull data from Asana, or push data from external apps to Asana. + This option is suited for scheduled, bulk syncs or workflows that must update + data in Asana with external information. See + [functions](/adaptors/packages/asana-docs) for more on how to use this + adaptor to work with the API. -2. Webhook: Asana also has a [Webhook or Data Forwarding](https://developers.asana.com/docs/webhooks-guide) to push data from Asana to external systems. This option is suited for real-time, event-based data integration. Check out the Asana [developer documentation](/adaptors/packages/asana-docs) to learn how to set up a webhook to push data to OpenFn. +2. Webhook: Asana also has a + [Webhook or Data Forwarding](https://developers.asana.com/docs/webhooks-guide) + to push data from Asana to external systems. This option is suited for + real-time, event-based data integration. Check out the Asana + [developer documentation](/adaptors/packages/asana-docs) to learn how to set + up a webhook to push data to OpenFn. ## Authentication -See [Asana docs](https://developers.asana.com/docs/authentication) for the latest on supported authentication methods. +See [Asana docs](https://developers.asana.com/docs/authentication) for the +latest on supported authentication methods. -When integrating with Asana via OpenFn, there is one primary authentication method that is supported: **Personal Access Token (PAT)**. You can generate a personal access token from the Asana [developer console](https://developers.asana.com/docs/personal-access-token). +When integrating with Asana via OpenFn, there is one primary authentication +method that is supported: **Personal Access Token (PAT)**. You can generate a +personal access token from the Asana +[developer console](https://developers.asana.com/docs/personal-access-token). -See this adaptor's [Configuration docs](/adaptors/packages/asana-configuration-schema) for more on the required authentication parameters. +See this adaptor's +[Configuration docs](/adaptors/packages/asana-configuration-schema) for more on +the required authentication parameters. -See platform docs on [managing credentials](/documentation/manage-projects/manage-credentials) for how to configure a credential in OpenFn. If working locally or if using a Raw JSON credential type, then your configuration will look something like this: +See platform docs on +[managing credentials](/documentation/manage-projects/manage-credentials) for +how to configure a credential in OpenFn. If working locally or if using a Raw +JSON credential type, then your configuration will look something like this: ``` { @@ -37,10 +57,16 @@ See platform docs on [managing credentials](/documentation/manage-projects/manag ### Implementation Examples -1. The Wildlife Conservation Society (WCS) - KoboToolBox -> GoogleSheets -> Asana sync: [https://openfn.github.io/ConSoSci/asana/](https://openfn.github.io/ConSoSci/asana/) +1. The Wildlife Conservation Society (WCS) - KoboToolBox -> GoogleSheets -> + Asana sync: + [https://openfn.github.io/ConSoSci/asana/](https://openfn.github.io/ConSoSci/asana/) ### I've noticed a problem with this Adaptor, or something is out of date, what can I do? -Thanks for asking! We are a fully Open Source Digital Public Good, and we welcome contributions from our community. Check out our [Adaptors Wiki](https://github.com/OpenFn/adaptors/blob/main/wiki/index.md) for more information on how you can update Adaptors! +Thanks for asking! We are a fully Open Source Digital Public Good, and we +welcome contributions from our community. Check out our +[Adaptors Wiki](https://github.com/OpenFn/adaptors/blob/main/wiki/index.md) for +more information on how you can update Adaptors! -Or, you can always reach out to the Community through our [Community Forum here](https://community.openfn.org/). +Or, you can always reach out to the Community through our +[Community Forum here](https://community.openfn.org/). diff --git a/adaptors/azure-storage.md b/adaptors/azure-storage.md index 09c021893a3e..60489a009662 100644 --- a/adaptors/azure-storage.md +++ b/adaptors/azure-storage.md @@ -1,23 +1,42 @@ --- -title: Azure Storage +title: Azure Storage --- -## About Azure Storage +## About Azure Storage + +[Azure Storage](https://azure.microsoft.com/en-us/products/category/storage) is +a cloud-based storage solution provided by Microsoft Azure. It offers scalable +and secure storage options for a wide range of data, including unstructured, +semi-structured, and structured data. -[Azure Storage](https://azure.microsoft.com/en-us/products/category/storage) is a cloud-based storage solution provided by Microsoft Azure. It offers scalable and secure storage options for a wide range of data, including unstructured, semi-structured, and structured data. ## Integration Options Azure Storage supports 2 primary integration options with OpenFn: -1. **Rest API:** Azure Storage has a REST API that enables external services like OpenFn to pull data from Azure Storage, or push data from external apps to Azure Storage. This option is suited for scheduled, bulk syncs or workflows that must update data in Azure Storage with external information. See [functions](/adaptors/packages/azure-storage-docs) for more on how to use this adaptor to work with the API. -2. **Webhook:** Webhook or Data Forwarding to push data from Azure Storage to external systems (see [docs](https://learn.microsoft.com/en-us/azure/storage/)). This option is suited for real-time, event-based data integration. +1. **Rest API:** Azure Storage has a REST API that enables external services + like OpenFn to pull data from Azure Storage, or push data from external apps + to Azure Storage. This option is suited for scheduled, bulk syncs or + workflows that must update data in Azure Storage with external information. + See [functions](/adaptors/packages/azure-storage-docs) for more on how to use + this adaptor to work with the API. +2. **Webhook:** Webhook or Data Forwarding to push data from Azure Storage to + external systems (see + [docs](https://learn.microsoft.com/en-us/azure/storage/)). This option is + suited for real-time, event-based data integration. ## Authentication -1. See [Azure Storage docs](https://learn.microsoft.com/en-us/azure/storage/) for the latest on supported authentication methods. -2. When integrating with Azure Storage via OpenFn, there is one primary authentication method that is supported: **API Key**. See this adaptor's [Configuration docs](/adaptors/packages/azure-storage-configuration-schema) for more on the required authentication parameters. +1. See [Azure Storage docs](https://learn.microsoft.com/en-us/azure/storage/) + for the latest on supported authentication methods. +2. When integrating with Azure Storage via OpenFn, there is one primary + authentication method that is supported: **API Key**. See this adaptor's + [Configuration docs](/adaptors/packages/azure-storage-configuration-schema) + for more on the required authentication parameters. -See platform docs on [managing credentials](/documentation/manage-projects/manage-credentials) for how to configure a credential in OpenFn. If working locally or if using a Raw JSON credential type, then your configuration will look something like this: +See platform docs on +[managing credentials](/documentation/manage-projects/manage-credentials) for +how to configure a credential in OpenFn. If working locally or if using a Raw +JSON credential type, then your configuration will look something like this: ``` { @@ -37,6 +56,10 @@ _Coming soon!_ ### I've noticed a problem with this Adaptor, or something is out of date, what can I do? -Thanks for asking! We are a fully Open Source Digital Public Good, and we welcome contributions from our community. Check out our [Adaptors Wiki](https://github.com/OpenFn/adaptors/blob/main/wiki/index.md) for more information on how you can update Adaptors! +Thanks for asking! We are a fully Open Source Digital Public Good, and we +welcome contributions from our community. Check out our +[Adaptors Wiki](https://github.com/OpenFn/adaptors/blob/main/wiki/index.md) for +more information on how you can update Adaptors! -Or, you can always reach out to the Community through our [Community Forum here](https://community.openfn.org/). +Or, you can always reach out to the Community through our +[Community Forum here](https://community.openfn.org/). diff --git a/adaptors/beyonic.md b/adaptors/beyonic.md index bda312ab5429..bef9f3e754fc 100644 --- a/adaptors/beyonic.md +++ b/adaptors/beyonic.md @@ -1,24 +1,40 @@ --- -title: Beyonic +title: Beyonic --- ## About Beyonic -Beyonic is a digital payments platform that supports mobile money payments, collections, and bulk disbursements, offering integration with major mobile network operators and banks. +Beyonic is a digital payments platform that supports mobile money payments, +collections, and bulk disbursements, offering integration with major mobile +network operators and banks. ## Integration Options Beyonic supports 2 primary integration options with OpenFn: -1. **Rest API:** Beyonic has a REST API that enables external services like OpenFn to pull data from Beyonic, or push data from external apps to Beyonic. This option is suited for scheduled, bulk syncs or workflows that must update data in Beyonic with external information. See [functions](/adaptors/packages/beyonic-docs) for more on how to use this adaptor to work with the API. -2. **Webhook:** Webhook or Data Forwarding to push data from Beyonic to external systems (see [docs](https://apidocs.beyonic.com/webhooks)). This option is suited for real-time, event-based data integration. +1. **Rest API:** Beyonic has a REST API that enables external services like + OpenFn to pull data from Beyonic, or push data from external apps to Beyonic. + This option is suited for scheduled, bulk syncs or workflows that must update + data in Beyonic with external information. See + [functions](/adaptors/packages/beyonic-docs) for more on how to use this + adaptor to work with the API. +2. **Webhook:** Webhook or Data Forwarding to push data from Beyonic to external + systems (see [docs](https://apidocs.beyonic.com/webhooks)). This option is + suited for real-time, event-based data integration. ## Authentication -1. See [Beyonic docs](https://apidocs.beyonic.com) for the latest on supported authentication methods. -2. When integrating with Beyonic via OpenFn, there is one primary authentication method that is supported: **API Key**. See this adaptor's [Configuration docs](/adaptors/packages/beyonic-configuration-schema) for more on the required authentication parameters. +1. See [Beyonic docs](https://apidocs.beyonic.com) for the latest on supported + authentication methods. +2. When integrating with Beyonic via OpenFn, there is one primary authentication + method that is supported: **API Key**. See this adaptor's + [Configuration docs](/adaptors/packages/beyonic-configuration-schema) for + more on the required authentication parameters. -See platform docs on [managing credentials](/documentation/manage-projects/manage-credentials) for how to configure a credential in OpenFn. If working locally or if using a Raw JSON credential type, then your configuration will look something like this: +See platform docs on +[managing credentials](/documentation/manage-projects/manage-credentials) for +how to configure a credential in OpenFn. If working locally or if using a Raw +JSON credential type, then your configuration will look something like this: ``` { @@ -39,6 +55,10 @@ _Coming soon!_ ### I've noticed a problem with this Adaptor, or something is out of date, what can I do? -Thanks for asking! We are a fully Open Source Digital Public Good, and we welcome contributions from our community. Check out our [Adaptors Wiki](https://github.com/OpenFn/adaptors/blob/main/wiki/index.md) for more information on how you can update Adaptors! +Thanks for asking! We are a fully Open Source Digital Public Good, and we +welcome contributions from our community. Check out our +[Adaptors Wiki](https://github.com/OpenFn/adaptors/blob/main/wiki/index.md) for +more information on how you can update Adaptors! -Or, you can always reach out to the Community through our [Community Forum here](https://community.openfn.org/). +Or, you can always reach out to the Community through our +[Community Forum here](https://community.openfn.org/). diff --git a/adaptors/bigquery.md b/adaptors/bigquery.md index 70848d8122ea..fd85e3b49454 100644 --- a/adaptors/bigquery.md +++ b/adaptors/bigquery.md @@ -1,24 +1,41 @@ --- -title: Big Query +title: Big Query --- -## About Big Query +## About Big Query -BigQuery is Google Cloud’s fully managed, serverless, and highly scalable data warehouse solution. It enables organizations to store, analyze, and visualize large datasets using SQL queries, machine learning, and real-time analytics. +BigQuery is Google Cloud’s fully managed, serverless, and highly scalable data +warehouse solution. It enables organizations to store, analyze, and visualize +large datasets using SQL queries, machine learning, and real-time analytics. ## Integration Options BigQuery supports 2 primary integration options with OpenFn: -1. **Rest API:** BigQuery has a REST API that enables external services like OpenFn to pull data from BigQuery, or push data from external apps to BigQuery. This option is suited for scheduled, bulk syncs or workflows that must update data in BigQuery with external information. See [functions](/adaptors/packages/bigquery-docs) for more on how to use this adaptor to work with the API. -2. **Webhook:** Webhook or Data Forwarding to push data from BigQuery to external systems (see [docs](https://cloud.google.com/run/docs/triggering/webhooks)). This option is suited for real-time, event-based data integration. +1. **Rest API:** BigQuery has a REST API that enables external services like + OpenFn to pull data from BigQuery, or push data from external apps to + BigQuery. This option is suited for scheduled, bulk syncs or workflows that + must update data in BigQuery with external information. See + [functions](/adaptors/packages/bigquery-docs) for more on how to use this + adaptor to work with the API. +2. **Webhook:** Webhook or Data Forwarding to push data from BigQuery to + external systems (see + [docs](https://cloud.google.com/run/docs/triggering/webhooks)). This option + is suited for real-time, event-based data integration. ## Authentication -1. See [BigQuery docs](https://cloud.google.com/bigquery/docs) for the latest on supported authentication methods. -2. When integrating with BigQuery via OpenFn, there is one primary authentication method that is supported: **API Key**. See this adaptor's [Configuration docs](/adaptors/packages/bigquery-configuration-schema) for more on the required authentication parameters. +1. See [BigQuery docs](https://cloud.google.com/bigquery/docs) for the latest on + supported authentication methods. +2. When integrating with BigQuery via OpenFn, there is one primary + authentication method that is supported: **API Key**. See this adaptor's + [Configuration docs](/adaptors/packages/bigquery-configuration-schema) for + more on the required authentication parameters. -See platform docs on [managing credentials](/documentation/manage-projects/manage-credentials) for how to configure a credential in OpenFn. If working locally or if using a Raw JSON credential type, then your configuration will look something like this: +See platform docs on +[managing credentials](/documentation/manage-projects/manage-credentials) for +how to configure a credential in OpenFn. If working locally or if using a Raw +JSON credential type, then your configuration will look something like this: ``` { @@ -40,13 +57,16 @@ See platform docs on [managing credentials](/documentation/manage-projects/manag 1. [BigQuery Documentation](https://cloud.google.com/bigquery/docs) 2. [BigQuery REST API](https://cloud.google.com/bigquery/docs/reference/rest) - ### Implementation Examples _Coming soon!_ ### I've noticed a problem with this Adaptor, or something is out of date, what can I do? -Thanks for asking! We are a fully Open Source Digital Public Good, and we welcome contributions from our community. Check out our [Adaptors Wiki](https://github.com/OpenFn/adaptors/blob/main/wiki/index.md) for more information on how you can update Adaptors! +Thanks for asking! We are a fully Open Source Digital Public Good, and we +welcome contributions from our community. Check out our +[Adaptors Wiki](https://github.com/OpenFn/adaptors/blob/main/wiki/index.md) for +more information on how you can update Adaptors! -Or, you can always reach out to the Community through our [Community Forum here](https://community.openfn.org/). +Or, you can always reach out to the Community through our +[Community Forum here](https://community.openfn.org/). diff --git a/adaptors/cartodb.md b/adaptors/cartodb.md index b2a7c08cfb66..0b007f346a13 100644 --- a/adaptors/cartodb.md +++ b/adaptors/cartodb.md @@ -4,13 +4,27 @@ title: CartoDB (CARTO) Adaptor ## About CartoDB -CARTO (formerly CartoDB) is a cloud-native spatial intelligence platform that enables organizations to unlock the power of location data. Built to work natively with major cloud data warehouses like Google BigQuery, Snowflake, Amazon Redshift, and Databricks, CARTO provides advanced geospatial analysis, visualization, and app development capabilities without requiring data movement or ETL processes. The platform serves data analysts, developers, and GIS professionals with tools for spatial analytics, interactive mapping, and location intelligence. +CARTO (formerly CartoDB) is a cloud-native spatial intelligence platform that +enables organizations to unlock the power of location data. Built to work +natively with major cloud data warehouses like Google BigQuery, Snowflake, +Amazon Redshift, and Databricks, CARTO provides advanced geospatial analysis, +visualization, and app development capabilities without requiring data movement +or ETL processes. The platform serves data analysts, developers, and GIS +professionals with tools for spatial analytics, interactive mapping, and +location intelligence. ## Integration Options CartoDB supports REST API integration with OpenFn: -**REST API**: CartoDB provides a comprehensive SQL API that enables external services like OpenFn to interact with geospatial datasets. This API allows you to execute SQL queries, insert/update spatial data, and perform complex geospatial analyses programmatically. The integration is suited for scheduled data synchronization, bulk geospatial operations, and workflows that need to update CartoDB datasets with external spatial information. See [functions](/adaptors/packages/cartodb-docs) for more on how to use this adaptor to work with the CartoDB SQL API. +**REST API**: CartoDB provides a comprehensive SQL API that enables external +services like OpenFn to interact with geospatial datasets. This API allows you +to execute SQL queries, insert/update spatial data, and perform complex +geospatial analyses programmatically. The integration is suited for scheduled +data synchronization, bulk geospatial operations, and workflows that need to +update CartoDB datasets with external spatial information. See +[functions](/adaptors/packages/cartodb-docs) for more on how to use this adaptor +to work with the CartoDB SQL API. ## Authentication @@ -24,11 +38,12 @@ To connect to CartoDB, you need to provide your account credentials: ``` **Required Fields:** + - `account`: Your CARTO account username (required) - `apiKey`: Your CARTO API key for authentication (required) -You can obtain your API key from your CARTO account dashboard under API Keys section. - +You can obtain your API key from your CARTO account dashboard under API Keys +section. ## Helpful Links @@ -37,6 +52,10 @@ You can obtain your API key from your CARTO account dashboard under API Keys sec ### I've noticed a problem with this Adaptor, or something is out of date, what can I do? -Thanks for asking! We are a fully Open Source Digital Public Good, and we welcome contributions from our community. Check out our [Adaptors Wiki](https://github.com/OpenFn/adaptors/blob/main/wiki/index.md) for more information on how you can update Adaptors! +Thanks for asking! We are a fully Open Source Digital Public Good, and we +welcome contributions from our community. Check out our +[Adaptors Wiki](https://github.com/OpenFn/adaptors/blob/main/wiki/index.md) for +more information on how you can update Adaptors! -Or, you can always reach out to the Community through our [Community Forum here](https://community.openfn.org/). +Or, you can always reach out to the Community through our +[Community Forum here](https://community.openfn.org/). diff --git a/adaptors/chatgpt.md b/adaptors/chatgpt.md index 37171bc017f8..18fa0ef5e3fe 100644 --- a/adaptors/chatgpt.md +++ b/adaptors/chatgpt.md @@ -41,10 +41,11 @@ the OpenAI API specification. With this, responses can be generated by alternative providers, self-hosted gateways, or other inference services. You may choose to do so for the following reasons: + - to use another LLM provider with a different pricing model - to use an LLM provider that offers local data residency -- to use a specific provider - for example, routing through a -regional service, or self-managed infrastructure +- to use a specific provider - for example, routing through a regional service, + or self-managed infrastructure See this adaptor's [Configuration docs](/adaptors/packages/chatgpt-configuration-schema) for @@ -64,6 +65,10 @@ technical docs on the authentication parameters required. ### I've noticed a problem with this Adaptor, or something is out of date, what can I do? -Thanks for asking! We are a fully Open Source Digital Public Good, and we welcome contributions from our community. Check out our [Adaptors Wiki](https://github.com/OpenFn/adaptors/blob/main/wiki/index.md) for more information on how you can update Adaptors! +Thanks for asking! We are a fully Open Source Digital Public Good, and we +welcome contributions from our community. Check out our +[Adaptors Wiki](https://github.com/OpenFn/adaptors/blob/main/wiki/index.md) for +more information on how you can update Adaptors! -Or, you can always reach out to the Community through our [Community Forum here](https://community.openfn.org/). +Or, you can always reach out to the Community through our +[Community Forum here](https://community.openfn.org/). diff --git a/adaptors/cht.md b/adaptors/cht.md index 2fe699b0b00f..1a033624f878 100644 --- a/adaptors/cht.md +++ b/adaptors/cht.md @@ -102,6 +102,10 @@ this: ### I've noticed a problem with this Adaptor, or something is out of date, what can I do? -Thanks for asking! We are a fully Open Source Digital Public Good, and we welcome contributions from our community. Check out our [Adaptors Wiki](https://github.com/OpenFn/adaptors/blob/main/wiki/index.md) for more information on how you can update Adaptors! +Thanks for asking! We are a fully Open Source Digital Public Good, and we +welcome contributions from our community. Check out our +[Adaptors Wiki](https://github.com/OpenFn/adaptors/blob/main/wiki/index.md) for +more information on how you can update Adaptors! -Or, you can always reach out to the Community through our [Community Forum here](https://community.openfn.org/). +Or, you can always reach out to the Community through our +[Community Forum here](https://community.openfn.org/). diff --git a/adaptors/ckan.md b/adaptors/ckan.md index f87736a3cb0d..a43cd36cc291 100644 --- a/adaptors/ckan.md +++ b/adaptors/ckan.md @@ -224,6 +224,10 @@ CKAN has been implemented in [catalog.data.gov](https://catalog.data.gov), ### I've noticed a problem with this Adaptor, or something is out of date, what can I do? -Thanks for asking! We are a fully Open Source Digital Public Good, and we welcome contributions from our community. Check out our [Adaptors Wiki](https://github.com/OpenFn/adaptors/blob/main/wiki/index.md) for more information on how you can update Adaptors! +Thanks for asking! We are a fully Open Source Digital Public Good, and we +welcome contributions from our community. Check out our +[Adaptors Wiki](https://github.com/OpenFn/adaptors/blob/main/wiki/index.md) for +more information on how you can update Adaptors! -Or, you can always reach out to the Community through our [Community Forum here](https://community.openfn.org/). +Or, you can always reach out to the Community through our +[Community Forum here](https://community.openfn.org/). diff --git a/adaptors/claude.md b/adaptors/claude.md index 9024bd8281da..e5023cf5694d 100644 --- a/adaptors/claude.md +++ b/adaptors/claude.md @@ -40,16 +40,16 @@ the Claude Messages API specification. With this, responses can be generated by alternative providers, self-hosted gateways, or other inference services. You may choose to do so for the following reasons: + - to use another LLM provider with a different pricing model - to use an LLM provider that offers local data residency -- to use a specific provider - for example, routing through a -regional service, or self-managed infrastructure +- to use a specific provider - for example, routing through a regional service, + or self-managed infrastructure See this adaptor's [Configuration docs](/adaptors/packages/claude-configuration-schema) for technical docs on the parameters required. - ## Authentication See this adaptor's @@ -63,6 +63,10 @@ technical docs on the authentication parameters required. ### I've noticed a problem with this Adaptor, or something is out of date, what can I do? -Thanks for asking! We are a fully Open Source Digital Public Good, and we welcome contributions from our community. Check out our [Adaptors Wiki](https://github.com/OpenFn/adaptors/blob/main/wiki/index.md) for more information on how you can update Adaptors! +Thanks for asking! We are a fully Open Source Digital Public Good, and we +welcome contributions from our community. Check out our +[Adaptors Wiki](https://github.com/OpenFn/adaptors/blob/main/wiki/index.md) for +more information on how you can update Adaptors! -Or, you can always reach out to the Community through our [Community Forum here](https://community.openfn.org/). +Or, you can always reach out to the Community through our +[Community Forum here](https://community.openfn.org/). diff --git a/adaptors/commcare.md b/adaptors/commcare.md index 801df058380f..cff3b1819bb5 100644 --- a/adaptors/commcare.md +++ b/adaptors/commcare.md @@ -17,8 +17,8 @@ CommCare cloud-hosted platform SaaS. :::info CommCare API Access -If using CommCare SaaS, as of October '24, only -projects with the Pro Plan or above include API access +If using CommCare SaaS, as of October '24, only projects with the Pro Plan or +above include API access ([see CommCare docs](https://dimagi.atlassian.net/wiki/spaces/commcarepublic/pages/2143958022/API+Access)). ::: @@ -45,8 +45,9 @@ CommCare supports 2 primary integration options: that enable external services like OpenFn to _pull_ data from CommCare, or push data from external apps to CommCare. This option is suited for _scheduled, bulk syncs_ or workflows that must update data in CommCare with - external information. Also [see here](https://dimagi.atlassian.net/wiki/spaces/commcarepublic/pages/2279637003/CommCare+API+Overview) - for more on the API Explorer. + external information. Also + [see here](https://dimagi.atlassian.net/wiki/spaces/commcarepublic/pages/2279637003/CommCare+API+Overview) + for more on the API Explorer. This OpenFn adaptor is designed for option #2 [CommCare's APIs](https://dimagi.atlassian.net/wiki/spaces/commcarepublic/pages/2279637003/CommCare+API+Overview). @@ -179,13 +180,15 @@ methods supported: [Configuration docs](/adaptors/packages/commcare-configuration-schema) for more on required authentication parameters.** -See platform docs [on managing credentials](/documentation/manage-projects/manage-credentials) for +See platform docs +[on managing credentials](/documentation/manage-projects/manage-credentials) for how to configure a credential in OpenFn and see the below CommCare credential example. ![CommCare Cred](/img/commcare_credential_edit.webp) -If you're using the `Raw JSON` credential type, your configuration may look like this: +If you're using the `Raw JSON` credential type, your configuration may look like +this: ```json { @@ -217,7 +220,6 @@ note: ::: - ## Integration Design Tips ### CommCare Data Model @@ -238,46 +240,71 @@ for a detailed description of the types of data. ![CommCare-data-model](/img/commcare-data-model.webp) ### Mapping CommCare Metadata to External Systems -Use the [CommCare App Summary](https://dimagi.atlassian.net/wiki/spaces/commcarepublic/pages/2143956371/App+Summary) to view and export case or form metadata to XLS. This will help you discover what data is available to be mapped to an external system. + +Use the +[CommCare App Summary](https://dimagi.atlassian.net/wiki/spaces/commcarepublic/pages/2143956371/App+Summary) +to view and export case or form metadata to XLS. This will help you discover +what data is available to be mapped to an external system. ### Unique Identifiers - As CommCare data is stored in forms and cases, there are two types of UIDs in - CommCare: `case_id` & form `id`. -- You can search for a particular case or form submission in CommCare by using the `Find Data by ID` feature [here](https://dimagi.atlassian.net/wiki/spaces/commcarepublic/pages/2143955380/Find+Data+by+ID). -- [See docs](https://dimagi.atlassian.net/wiki/spaces/commcarepublic/pages/2143946126/Generating+a+Unique+ID+for+beneficiaries) for more on generating custom unique IDs. + CommCare: `case_id` & form `id`. +- You can search for a particular case or form submission in CommCare by using + the `Find Data by ID` feature + [here](https://dimagi.atlassian.net/wiki/spaces/commcarepublic/pages/2143955380/Find+Data+by+ID). +- [See docs](https://dimagi.atlassian.net/wiki/spaces/commcarepublic/pages/2143946126/Generating+a+Unique+ID+for+beneficiaries) + for more on generating custom unique IDs. :::tip Embedding External IDs and Hidden Values in Forms -If integrating with CommCare `forms`, you may need to make sure that any unique identifiers or external IDs you want to reference in your integration are configured in your forms. You may consider using -[hidden values](https://dimagi.atlassian.net/wiki/spaces/commcarepublic/pages/2143954117/Hidden+Values+Tutorial+Part+1+Adding+Two+Questions+Using+a+Hidden+Value) to capture external IDs in form data, without affecting the end user experience. +If integrating with CommCare `forms`, you may need to make sure that any unique +identifiers or external IDs you want to reference in your integration are +configured in your forms. You may consider using +[hidden values](https://dimagi.atlassian.net/wiki/spaces/commcarepublic/pages/2143954117/Hidden+Values+Tutorial+Part+1+Adding+Two+Questions+Using+a+Hidden+Value) +to capture external IDs in form data, without affecting the end user experience. ::: ### Lookup Tables in CommCare -Lookup tables in CommCare store reference data that can be used across multiple forms and workflows. They are often used for predefined lists such as as health facility names, geographic locations, product catalogs, or standardized response options. + +Lookup tables in CommCare store reference data that can be used across multiple +forms and workflows. They are often used for predefined lists such as as health +facility names, geographic locations, product catalogs, or standardized response +options. #### Querying Lookup Tables -When fetching lookup table data in using CommCare APIs, there are two main approaches: + +When fetching lookup table data in using CommCare APIs, there are two main +approaches: **1. Using the Fixture API** -[See here](https://commcare-hq.readthedocs.io/api/fixture.html) for the CommCare docs on this API. FYI `fixture` is a more technical term that the CommCare docs sometimes use to refer to a `lookup table`. +[See here](https://commcare-hq.readthedocs.io/api/fixture.html) for the CommCare +docs on this API. FYI `fixture` is a more technical term that the CommCare docs +sometimes use to refer to a `lookup table`. + ``` //sample openfn job to get a specific 'diagnosis' lookup table get("fixture/?fixture_type=diagnosis") ``` **Pros:** -- Simple and direct API for querying a specific lookup table; response include lookup table metadata and data. -- Works well when items from only a couple of tables (e.g., 1-3) need to be queried. + +- Simple and direct API for querying a specific lookup table; response include + lookup table metadata and data. +- Works well when items from only a couple of tables (e.g., 1-3) need to be + queried. **Cons:** -- Requires multiple API calls if several tables are needed, which can be inefficient at scale. + +- Requires multiple API calls if several tables are needed, which can be + inefficient at scale. - See `lookup_table_item` API if querying data across multiple lookup tables. **2. Using the lookup_table_item API** -[See here](https://commcare-hq.readthedocs.io/api/fixture.html#list-lookup-table-row) for the CommCare docs on this API. -You can use this API to query _and_ update lookup table items or rows. +[See here](https://commcare-hq.readthedocs.io/api/fixture.html#list-lookup-table-row) +for the CommCare docs on this API. You can use this API to query _and_ update +lookup table items or rows. ``` get('lookup_table_item', //to list all lookup table items across multiple tables -> bulk query @@ -286,41 +313,61 @@ get('lookup_table_item', //to list all lookup table items across multiple tables fn(state => { //custom function to then assign & group lookup_table_items to new variables const findLookupById = (id) => state.data.filter((i) => i.data_type_id === id); - + //assign to facility, product, medications variables to use later in WF - state.facility = findLookupById("facility_table_id"); + state.facility = findLookupById("facility_table_id"); state.product = findLookupById("product_table_id"); state.medications = findLookupById("medications_table_id"); - return state; + return state; }) ``` **Pros:** -- Good for bulk querying lookup table rows in a single request, reducing API calls. + +- Good for bulk querying lookup table rows in a single request, reducing API + calls. - Useful for OpenFn workflows requiring data from multiple lookup tables. - Support for create & update of lookup table items. **Cons:** -- Retrieves all lookup tables and filters them in-memory, which can be inefficient if only a few tables are needed. + +- Retrieves all lookup tables and filters them in-memory, which can be + inefficient if only a few tables are needed. #### Updating Lookup Tables -You can bulk update rows in lookup tables using the [`bulk()` function](/adaptors/packages/commcare-docs#bulk) in the CommCare adaptor that will utilize this [CommCare bulk upload API](https://commcare-hq.readthedocs.io/api/fixture.html#bulk-upload-lookup-tables). **Tip:** Set the `replace` option as `false` if you want to _update_ (and not overwrite) tables. -Or, you can edit or delete an individual lookup table row via the [lookup_table_item API](https://commcare-hq.readthedocs.io/api/fixture.html#edit-or-delete-lookup-table-row). +You can bulk update rows in lookup tables using the +[`bulk()` function](/adaptors/packages/commcare-docs#bulk) in the CommCare +adaptor that will utilize this +[CommCare bulk upload API](https://commcare-hq.readthedocs.io/api/fixture.html#bulk-upload-lookup-tables). +**Tip:** Set the `replace` option as `false` if you want to _update_ (and not +overwrite) tables. + +Or, you can edit or delete an individual lookup table row via the +[lookup_table_item API](https://commcare-hq.readthedocs.io/api/fixture.html#edit-or-delete-lookup-table-row). + ``` request('PUT', `/a/${$.configuration.domain}/api/v1/lookup_table_item/${item-id}`} //to update 1 row request('DELETE', `/a/${$.configuration.domain}/api/v1/lookup_table_item/${item-id}`} //to delete 1 row ``` - + #### Best Practices -- Use the `Fixture` API when fetching data for only a couple of (1-3) lookup tables. -- Use the `lookup_table` API for scenarios where data from multiple lookup tables needs to be queried in bulk. -- Consider performance trade-offs when selecting which API to use, balancing API efficiency with data processing overhead. [See CommCare docs](https://commcare-hq.readthedocs.io/api/index.html#data-apis) for all available data APIs. + +- Use the `Fixture` API when fetching data for only a couple of (1-3) lookup + tables. +- Use the `lookup_table` API for scenarios where data from multiple lookup + tables needs to be queried in bulk. +- Consider performance trade-offs when selecting which API to use, balancing API + efficiency with data processing overhead. + [See CommCare docs](https://commcare-hq.readthedocs.io/api/index.html#data-apis) + for all available data APIs. #### Troubleshooting tips -If some tables are throwing errors when being fetched using the fixtures API, the lookup table might be corrupted. Consider exporting the table and re-importing it. +If some tables are throwing errors when being fetched using the fixtures API, +the lookup table might be corrupted. Consider exporting the table and +re-importing it. ## Helpful Links @@ -342,7 +389,8 @@ CommCare has different APIs for reading vs. modifying data. Some helpful links: ### Implementation Examples -- Mercy Corps Kenya (CommCare-Azure SQL DB): https://github.com/OpenFn/mercycorps-kenya +- Mercy Corps Kenya (CommCare-Azure SQL DB): + https://github.com/OpenFn/mercycorps-kenya - MiracleFeet (CommCare-to-Salesforce sync): https://github.com/OpenFn/miracle-feet - Lwala (CommCare-Salesforce 2-way sync): https://github.com/OpenFn/lwala @@ -350,6 +398,10 @@ CommCare has different APIs for reading vs. modifying data. Some helpful links: ### I've noticed a problem with this Adaptor, or something is out of date, what can I do? -Thanks for asking! We are a fully Open Source Digital Public Good, and we welcome contributions from our community. Check out our [Adaptors Wiki](https://github.com/OpenFn/adaptors/blob/main/wiki/index.md) for more information on how you can update Adaptors! +Thanks for asking! We are a fully Open Source Digital Public Good, and we +welcome contributions from our community. Check out our +[Adaptors Wiki](https://github.com/OpenFn/adaptors/blob/main/wiki/index.md) for +more information on how you can update Adaptors! -Or, you can always reach out to the Community through our [Community Forum here](https://community.openfn.org/). +Or, you can always reach out to the Community through our +[Community Forum here](https://community.openfn.org/). diff --git a/adaptors/common.md b/adaptors/common.md index 110109ccc779..bd446c5e1467 100644 --- a/adaptors/common.md +++ b/adaptors/common.md @@ -34,6 +34,10 @@ each( ### I've noticed a problem with this Adaptor, or something is out of date, what can I do? -Thanks for asking! We are a fully Open Source Digital Public Good, and we welcome contributions from our community. Check out our [Adaptors Wiki](https://github.com/OpenFn/adaptors/blob/main/wiki/index.md) for more information on how you can update Adaptors! +Thanks for asking! We are a fully Open Source Digital Public Good, and we +welcome contributions from our community. Check out our +[Adaptors Wiki](https://github.com/OpenFn/adaptors/blob/main/wiki/index.md) for +more information on how you can update Adaptors! -Or, you can always reach out to the Community through our [Community Forum here](https://community.openfn.org/). +Or, you can always reach out to the Community through our +[Community Forum here](https://community.openfn.org/). diff --git a/adaptors/dagu.md b/adaptors/dagu.md index 81ff48abd159..ffae72ec400c 100644 --- a/adaptors/dagu.md +++ b/adaptors/dagu.md @@ -3,23 +3,33 @@ title: Dagu Adaptor --- ## About Dagu -Dagu is an open source tool for managing supply chain functions at health facilities, incorporating inventory -and patient service management systems used in Ethiopia. It includes an inventory management system at the facility store level and a patient service management system at the dispensing unit level. It is designed to manage daily transactions incorporating the business process and operations at each health facility. + +Dagu is an open source tool for managing supply chain functions at health +facilities, incorporating inventory and patient service management systems used +in Ethiopia. It includes an inventory management system at the facility store +level and a patient service management system at the dispensing unit level. It +is designed to manage daily transactions incorporating the business process and +operations at each health facility. ## Integration Options -See [Dagu adaptor functions](/adaptors/packages/dagu-docs) for more on how to use this adaptor to work with the API. + +See [Dagu adaptor functions](/adaptors/packages/dagu-docs) for more on how to +use this adaptor to work with the API. ## Authentication -Users must specify a `baseUrl`, `username` and `password` to generate an `access_token`, which is then sent as `Bearer token` as part of the headers in every HTTP request. + +Users must specify a `baseUrl`, `username` and `password` to generate an +`access_token`, which is then sent as `Bearer token` as part of the headers in +every HTTP request. OpenFn users can use the `Dagu` credential type when [creating a credential](/documentation/manage-projects/manage-credentials). -See the adaptor's [configuration schema docs](/adaptors/packages/dagu-configuration-schema) +See the adaptor's +[configuration schema docs](/adaptors/packages/dagu-configuration-schema) -If working locally or -if using a `Raw JSON` credential type, then your configuration will look -something like this: +If working locally or if using a `Raw JSON` credential type, then your +configuration will look something like this: ```json { @@ -31,8 +41,10 @@ something like this: ### I've noticed a problem with this Adaptor, or something is out of date, what can I do? -Thanks for asking! We are a fully Open Source Digital Public Good, and we welcome contributions from our community. Check out our [Adaptors Wiki](https://github.com/OpenFn/adaptors/blob/main/wiki/index.md) for more information on how you can update Adaptors! - -Or, you can always reach out to the Community through our [Community Forum here](https://community.openfn.org/). - +Thanks for asking! We are a fully Open Source Digital Public Good, and we +welcome contributions from our community. Check out our +[Adaptors Wiki](https://github.com/OpenFn/adaptors/blob/main/wiki/index.md) for +more information on how you can update Adaptors! +Or, you can always reach out to the Community through our +[Community Forum here](https://community.openfn.org/). diff --git a/adaptors/dhis2.md b/adaptors/dhis2.md index 99e5846c0db0..d6ee32ec080d 100644 --- a/adaptors/dhis2.md +++ b/adaptors/dhis2.md @@ -136,10 +136,13 @@ useful. In the following sections, special systems will be described. 1. DHIS2 Demo Implementations: https://github.com/OpenFn/dhis2-demo 2. Lesotho Integration connecting two DHIS2 instances: https://github.com/OpenFn/lesotho-dhis2 - ### I've noticed a problem with this Adaptor, or something is out of date, what can I do? -Thanks for asking! We are a fully Open Source Digital Public Good, and we welcome contributions from our community. Check out our [Adaptors Wiki](https://github.com/OpenFn/adaptors/blob/main/wiki/index.md) for more information on how you can update Adaptors! +Thanks for asking! We are a fully Open Source Digital Public Good, and we +welcome contributions from our community. Check out our +[Adaptors Wiki](https://github.com/OpenFn/adaptors/blob/main/wiki/index.md) for +more information on how you can update Adaptors! -Or, you can always reach out to the Community through our [Community Forum here](https://community.openfn.org/). +Or, you can always reach out to the Community through our +[Community Forum here](https://community.openfn.org/). diff --git a/adaptors/divoc.md b/adaptors/divoc.md index 98acff78e9fa..e78121803e26 100644 --- a/adaptors/divoc.md +++ b/adaptors/divoc.md @@ -4,13 +4,27 @@ title: Divoc Adaptor ## About Divoc -DIVOC (Digital Infrastructure for Verifiable Open Credentialing) is an open-source platform designed for issuing and managing digital vaccination certificates. Developed by the eGovernments Foundation and used as the backbone for India's CoWIN platform, DIVOC has issued over 2 billion vaccination certificates across multiple countries including India, Sri Lanka, Philippines, Jamaica, and Indonesia. The platform provides WHO-compliant digital certificates that are accepted in over 120 countries worldwide. +DIVOC (Digital Infrastructure for Verifiable Open Credentialing) is an +open-source platform designed for issuing and managing digital vaccination +certificates. Developed by the eGovernments Foundation and used as the backbone +for India's CoWIN platform, DIVOC has issued over 2 billion vaccination +certificates across multiple countries including India, Sri Lanka, Philippines, +Jamaica, and Indonesia. The platform provides WHO-compliant digital certificates +that are accepted in over 120 countries worldwide. ## Integration Options DIVOC supports REST API integration with OpenFn: -**REST API**: DIVOC provides a comprehensive REST API that enables external services like OpenFn to interact with vaccination certificate management systems. This API allows you to create digital certificates, manage vaccination facilities, register beneficiaries, and generate vaccination reports programmatically. The integration is suited for scheduled certificate issuance, bulk vaccination data synchronization, and workflows that need to update DIVOC with external health system information. See [functions](/adaptors/packages/divoc-docs) for more on how to use this adaptor to work with the DIVOC API. +**REST API**: DIVOC provides a comprehensive REST API that enables external +services like OpenFn to interact with vaccination certificate management +systems. This API allows you to create digital certificates, manage vaccination +facilities, register beneficiaries, and generate vaccination reports +programmatically. The integration is suited for scheduled certificate issuance, +bulk vaccination data synchronization, and workflows that need to update DIVOC +with external health system information. See +[functions](/adaptors/packages/divoc-docs) for more on how to use this adaptor +to work with the DIVOC API. ## Authentication @@ -26,13 +40,15 @@ To connect to DIVOC, you need to provide authentication credentials: ``` **Required Fields:** + - `baseUrl`: The base URL of your DIVOC instance - `username`: Your DIVOC username (required) - `password`: Your DIVOC password (required) **Optional Fields:** -- `access_token`: Bearer token for API authentication (can be used instead of username/password) +- `access_token`: Bearer token for API authentication (can be used instead of + username/password) ## Helpful Links @@ -40,6 +56,10 @@ To connect to DIVOC, you need to provide authentication credentials: ### I've noticed a problem with this Adaptor, or something is out of date, what can I do? -Thanks for asking! We are a fully Open Source Digital Public Good, and we welcome contributions from our community. Check out our [Adaptors Wiki](https://github.com/OpenFn/adaptors/blob/main/wiki/index.md) for more information on how you can update Adaptors! +Thanks for asking! We are a fully Open Source Digital Public Good, and we +welcome contributions from our community. Check out our +[Adaptors Wiki](https://github.com/OpenFn/adaptors/blob/main/wiki/index.md) for +more information on how you can update Adaptors! -Or, you can always reach out to the Community through our [Community Forum here](https://community.openfn.org/). +Or, you can always reach out to the Community through our +[Community Forum here](https://community.openfn.org/). diff --git a/adaptors/dynamics.md b/adaptors/dynamics.md index 487c3e32650f..fd10ee3ebd3d 100644 --- a/adaptors/dynamics.md +++ b/adaptors/dynamics.md @@ -4,19 +4,37 @@ title: Dynamics Adaptor ## About Microsoft Dynamics -[Microsoft Dynamics](https://www.microsoft.com/en-us/dynamics-365) is a suite of enterprise resource planning (ERP) and customer relationship management (CRM) applications. It helps organizations manage sales, customer service, marketing, operations, and more. +[Microsoft Dynamics](https://www.microsoft.com/en-us/dynamics-365) is a suite of +enterprise resource planning (ERP) and customer relationship management (CRM) +applications. It helps organizations manage sales, customer service, marketing, +operations, and more. ## Integration Options -**1. Rest API:** Dynamics offers a REST API that enables external applications to interact with its database and perform bulk operations. This option is ideal for applications requiring scheduled or bulk synchronization with Dynamics. Refer to the Dynamics REST API [documentation](https://learn.microsoft.com/en-us/powerapps/developer/data-platform/webapi/overview) for detailed guidelines on endpoints and payload formats. +**1. Rest API:** Dynamics offers a REST API that enables external applications +to interact with its database and perform bulk operations. This option is ideal +for applications requiring scheduled or bulk synchronization with Dynamics. +Refer to the Dynamics REST API +[documentation](https://learn.microsoft.com/en-us/powerapps/developer/data-platform/webapi/overview) +for detailed guidelines on endpoints and payload formats. -**2. Webhook:** Webhook or Data Forwarding to push data from Dynamics to external systems (see [docs](https://learn.microsoft.com/en-us/dynamics365/customer-engagement/developer/webhooks)). This option is suited for real-time, event-based data integration. +**2. Webhook:** Webhook or Data Forwarding to push data from Dynamics to +external systems (see +[docs](https://learn.microsoft.com/en-us/dynamics365/customer-engagement/developer/webhooks)). +This option is suited for real-time, event-based data integration. ## Authentication -See [Microsoft docs](https://learn.microsoft.com/en-us/azure/active-directory/) for the latest on supported authentication methods. When integrating with Dynamics via OpenFn, **Access Token** is supported. See this adaptor's [Configuration docs](/adaptors/packages/dynamics-configuration-schema) for more on the required authentication parameters. +See [Microsoft docs](https://learn.microsoft.com/en-us/azure/active-directory/) +for the latest on supported authentication methods. When integrating with +Dynamics via OpenFn, **Access Token** is supported. See this adaptor's +[Configuration docs](/adaptors/packages/dynamics-configuration-schema) for more +on the required authentication parameters. -See platform docs on [managing credentials](/documentation/manage-projects/manage-credentials) for how to configure a credential in OpenFn. If working locally or if using a Raw JSON credential type, then your configuration will look something like this: +See platform docs on +[managing credentials](/documentation/manage-projects/manage-credentials) for +how to configure a credential in OpenFn. If working locally or if using a Raw +JSON credential type, then your configuration will look something like this: ``` { @@ -38,6 +56,10 @@ _Comming soon!_ ### I've noticed a problem with this Adaptor, or something is out of date, what can I do? -Thanks for asking! We are a fully Open Source Digital Public Good, and we welcome contributions from our community. Check out our [Adaptors Wiki](https://github.com/OpenFn/adaptors/blob/main/wiki/index.md) for more information on how you can update Adaptors! +Thanks for asking! We are a fully Open Source Digital Public Good, and we +welcome contributions from our community. Check out our +[Adaptors Wiki](https://github.com/OpenFn/adaptors/blob/main/wiki/index.md) for +more information on how you can update Adaptors! -Or, you can always reach out to the Community through our [Community Forum here](https://community.openfn.org/). +Or, you can always reach out to the Community through our +[Community Forum here](https://community.openfn.org/). diff --git a/adaptors/eapts.md b/adaptors/eapts.md index c02b6fed85bf..4f21ef9a4da9 100644 --- a/adaptors/eapts.md +++ b/adaptors/eapts.md @@ -4,25 +4,49 @@ title: EAPTS Adaptor ## About EAPTS -[EAPTS](https://dhpi.moh.gov.et/project/b7175989-30d8-42d6-a5ee-8d48cbad0c61) (Electronic Asset and Pharmaceutical Tracking System) is a comprehensive pharmaceutical management platform used across healthcare facilities in Ethiopia to monitor medicines, medical supplies, and equipment. EAPTS provides real-time visibility into inventory levels, prescription tracking, and dispensing unit performance to strengthen pharmaceutical logistics and health program oversight. +[EAPTS](https://dhpi.moh.gov.et/project/b7175989-30d8-42d6-a5ee-8d48cbad0c61) +(Electronic Asset and Pharmaceutical Tracking System) is a comprehensive +pharmaceutical management platform used across healthcare facilities in Ethiopia +to monitor medicines, medical supplies, and equipment. EAPTS provides real-time +visibility into inventory levels, prescription tracking, and dispensing unit +performance to strengthen pharmaceutical logistics and health program oversight. ## Integration Options -EAPTS supports integration through its REST API, which enables external services like OpenFn to: +EAPTS supports integration through its REST API, which enables external services +like OpenFn to: -1. **REST API**: Pull data from EAPTS or push data from external applications to EAPTS. This API allows you to synchronize stock and dispensing data, validate prescriptions and patient records, generate dashboards or analytics reports, and monitor supply chain performance programmatically. This option is suited for scheduled, bulk syncs, automated nightly stock level updates to national reporting systems, real-time prescription validations, or workflows that need to exchange data between EAPTS and other health information systems such as DHIS2, KoboToolbox, or Salesforce. See [functions](https://docs.openfn.org/adaptors/packages/eapts-docs) for more on how to use this adaptor to work with the API. +1. **REST API**: Pull data from EAPTS or push data from external applications to + EAPTS. This API allows you to synchronize stock and dispensing data, validate + prescriptions and patient records, generate dashboards or analytics reports, + and monitor supply chain performance programmatically. This option is suited + for scheduled, bulk syncs, automated nightly stock level updates to national + reporting systems, real-time prescription validations, or workflows that need + to exchange data between EAPTS and other health information systems such as + DHIS2, KoboToolbox, or Salesforce. See + [functions](https://docs.openfn.org/adaptors/packages/eapts-docs) for more on + how to use this adaptor to work with the API. -2. **Data Export**: Export pharmaceutical inventory, dispensing records, and stock reports for analysis and integration with external systems like DHIS2, national health databases, or reporting platforms. +2. **Data Export**: Export pharmaceutical inventory, dispensing records, and + stock reports for analysis and integration with external systems like DHIS2, + national health databases, or reporting platforms. ## Authentication -When integrating with EAPTS via OpenFn, the primary authentication method supported is: +When integrating with EAPTS via OpenFn, the primary authentication method +supported is: -**API Token Authentication**. See this adaptor's [Configuration docs](https://docs.openfn.org/adaptors/packages/eapts-configuration-schema) for more on required authentication parameters. +**API Token Authentication**. See this adaptor's +[Configuration docs](https://docs.openfn.org/adaptors/packages/eapts-configuration-schema) +for more on required authentication parameters. -See platform docs on [managing credentials](https://docs.openfn.org/documentation/manage-projects/manage-credentials) for how to configure a credential in OpenFn. +See platform docs on +[managing credentials](https://docs.openfn.org/documentation/manage-projects/manage-credentials) +for how to configure a credential in OpenFn. + +If working locally or if using a Raw JSON credential type, then your +configuration will look something like this: -If working locally or if using a Raw JSON credential type, then your configuration will look something like this: ```json { "baseUrl": "https://your-eapts-instance.example.com", @@ -31,6 +55,7 @@ If working locally or if using a Raw JSON credential type, then your configurati ``` **Required Fields:** + - `baseUrl`: The base URL of your EAPTS instance (e.g., `https://example.com`) - `apiToken`: The API token for authenticating requests to EAPTS @@ -42,6 +67,10 @@ If working locally or if using a Raw JSON credential type, then your configurati ### I've noticed a problem with this Adaptor, or something is out of date, what can I do? -Thanks for asking! We are a fully Open Source Digital Public Good, and we welcome contributions from our community. Check out our [Adaptors Wiki](https://github.com/OpenFn/adaptors/wiki) for more information on how you can update Adaptors! +Thanks for asking! We are a fully Open Source Digital Public Good, and we +welcome contributions from our community. Check out our +[Adaptors Wiki](https://github.com/OpenFn/adaptors/wiki) for more information on +how you can update Adaptors! -Or, you can always reach out to the Community through our [Community Forum here](https://community.openfn.org/). +Or, you can always reach out to the Community through our +[Community Forum here](https://community.openfn.org/). diff --git a/adaptors/et-mfr.md b/adaptors/et-mfr.md index 7f352ddd2e4d..9c3930e710ca 100644 --- a/adaptors/et-mfr.md +++ b/adaptors/et-mfr.md @@ -3,22 +3,34 @@ title: ET-MFR Adaptor --- ## About ET-MFR -The Ethiopia Master Facility Registry (MFR) is an open source tool developed and led by the Federal Ministry of Health (FMoH) to support the standardization of health facility information across the country. As a centralized and authoritative source, the MFR provides a comprehensive, up-to-date database of all public and private health facilities operating within Ethiopia’s health system. + +The Ethiopia Master Facility Registry (MFR) is an open source tool developed and +led by the Federal Ministry of Health (FMoH) to support the standardization of +health facility information across the country. As a centralized and +authoritative source, the MFR provides a comprehensive, up-to-date database of +all public and private health facilities operating within Ethiopia’s health +system. ## Integration Options -ET-MFR has an available [REST API](https://mfr.moh.gov.et/swagger/index.html). See [functions](/adaptors/packages/et-mfr-docs) for more on how to use this adaptor to work with the API. + +ET-MFR has an available [REST API](https://mfr.moh.gov.et/swagger/index.html). +See [functions](/adaptors/packages/et-mfr-docs) for more on how to use this +adaptor to work with the API. ## Authentication -Users may specify a `baseUrl`, `username` and `password`. The `username` and `password` are then encoded into a basic authentication header and sent as part of every HTTP request. + +Users may specify a `baseUrl`, `username` and `password`. The `username` and +`password` are then encoded into a basic authentication header and sent as part +of every HTTP request. OpenFn users can use the `iHRIS` credential type when [creating a credential](/documentation/manage-projects/manage-credentials). -See the adaptor's [configuration schema docs](/adaptors/packages/et-mfr-configuration-schema) +See the adaptor's +[configuration schema docs](/adaptors/packages/et-mfr-configuration-schema) -If working locally or -if using a `Raw JSON` credential type, then your configuration will look -something like this: +If working locally or if using a `Raw JSON` credential type, then your +configuration will look something like this: ```json { @@ -30,8 +42,10 @@ something like this: ### I've noticed a problem with this Adaptor, or something is out of date, what can I do? -Thanks for asking! We are a fully Open Source Digital Public Good, and we welcome contributions from our community. Check out our [Adaptors Wiki](https://github.com/OpenFn/adaptors/blob/main/wiki/index.md) for more information on how you can update Adaptors! - -Or, you can always reach out to the Community through our [Community Forum here](https://community.openfn.org/). - +Thanks for asking! We are a fully Open Source Digital Public Good, and we +welcome contributions from our community. Check out our +[Adaptors Wiki](https://github.com/OpenFn/adaptors/blob/main/wiki/index.md) for +more information on how you can update Adaptors! +Or, you can always reach out to the Community through our +[Community Forum here](https://community.openfn.org/). diff --git a/adaptors/facebook.md b/adaptors/facebook.md index 3ac2e3899074..3085b68edc29 100644 --- a/adaptors/facebook.md +++ b/adaptors/facebook.md @@ -4,13 +4,23 @@ title: Facebook Adaptor ## About Facebook -[Facebook](https://www.facebook.com/) is the world's largest social networking platform, connecting billions of people globally. Facebook provides various APIs and integration capabilities, particularly through Facebook Messenger, enabling businesses to create automated messaging experiences, customer service bots, and interactive communication workflows. +[Facebook](https://www.facebook.com/) is the world's largest social networking +platform, connecting billions of people globally. Facebook provides various APIs +and integration capabilities, particularly through Facebook Messenger, enabling +businesses to create automated messaging experiences, customer service bots, and +interactive communication workflows. -The Facebook Messenger platform is particularly valuable for businesses seeking to provide customer support, marketing automation, and interactive customer engagement through one of the world's most popular messaging platforms. +The Facebook Messenger platform is particularly valuable for businesses seeking +to provide customer support, marketing automation, and interactive customer +engagement through one of the world's most popular messaging platforms. ## Integration Options -**Messenger API**: Facebook provides the Messenger Platform API that enables businesses to send messages, create interactive experiences, and build chatbots. The API supports rich messaging features including text, images, quick replies, and structured templates for creating engaging user interactions through Facebook Messenger. +**Messenger API**: Facebook provides the Messenger Platform API that enables +businesses to send messages, create interactive experiences, and build chatbots. +The API supports rich messaging features including text, images, quick replies, +and structured templates for creating engaging user interactions through +Facebook Messenger. ## Authentication @@ -23,10 +33,13 @@ Facebook uses OAuth 2.0 access tokens for Messenger API authentication: ``` **Authentication Components:** -- **access_token**: Facebook API access token obtained through Facebook App configuration -Access tokens are generated through Facebook for Developers and provide access to send messages through Facebook Pages and Messenger conversations based on the app permissions and page access granted. +- **access_token**: Facebook API access token obtained through Facebook App + configuration +Access tokens are generated through Facebook for Developers and provide access +to send messages through Facebook Pages and Messenger conversations based on the +app permissions and page access granted. ## Helpful Links @@ -36,6 +49,10 @@ Access tokens are generated through Facebook for Developers and provide access t ### I've noticed a problem with this Adaptor, or something is out of date, what can I do? -Thanks for asking! We are a fully Open Source Digital Public Good, and we welcome contributions from our community. Check out our [Adaptors Wiki](https://github.com/OpenFn/adaptors/blob/main/wiki/index.md) for more information on how you can update Adaptors! +Thanks for asking! We are a fully Open Source Digital Public Good, and we +welcome contributions from our community. Check out our +[Adaptors Wiki](https://github.com/OpenFn/adaptors/blob/main/wiki/index.md) for +more information on how you can update Adaptors! -Or, you can always reach out to the Community through our [Community Forum here](https://community.openfn.org/). +Or, you can always reach out to the Community through our +[Community Forum here](https://community.openfn.org/). diff --git a/adaptors/fhir-fr.md b/adaptors/fhir-fr.md index dc8bc61dcb04..82c94bc28a31 100644 --- a/adaptors/fhir-fr.md +++ b/adaptors/fhir-fr.md @@ -3,19 +3,33 @@ title: FHIR-FR IG Adaptor --- ## Custom FHIR Adaptor: fhir-fr -Note❗: This is a custom adaptor generated from this France FHIR Implementation Guide: https://hl7.fr/ig/fhir/core/2.0.0/index.html -Custom FHIR adaptors generate a suite of helper functions specific to their source Implementation Guides. +Note❗: This is a custom adaptor generated from this France FHIR Implementation +Guide: https://hl7.fr/ig/fhir/core/2.0.0/index.html -See the generic [fhir adaptor](/adaptors/fhir) and our [docs on standards](/documentation/get-started/standards) for more general guidance on OpenFn + FHIR. +Custom FHIR adaptors generate a suite of helper functions specific to their +source Implementation Guides. + +See the generic [fhir adaptor](/adaptors/fhir) and our +[docs on standards](/documentation/get-started/standards) for more general +guidance on OpenFn + FHIR. ## Build your own FHIR Adaptor -See the [Adaptors Wiki](https://github.com/OpenFn/adaptors/wiki/Generating-Fhir-Adaptors) to build your own adaptor for _your_ implementation guide by trying out our fhir-adaptor-generator (which is a new tool still in testing). -Please share any questions or feedback on [community.openfn.org](https://community.openfn.org). +See the +[Adaptors Wiki](https://github.com/OpenFn/adaptors/wiki/Generating-Fhir-Adaptors) +to build your own adaptor for _your_ implementation guide by trying out our +fhir-adaptor-generator (which is a new tool still in testing). + +Please share any questions or feedback on +[community.openfn.org](https://community.openfn.org). ### I've noticed a problem with this Adaptor, or something is out of date, what can I do? -Thanks for asking! We are a fully Open Source Digital Public Good, and we welcome contributions from our community. Check out our [Adaptors Wiki](https://github.com/OpenFn/adaptors/wiki) for more information on how you can update Adaptors! +Thanks for asking! We are a fully Open Source Digital Public Good, and we +welcome contributions from our community. Check out our +[Adaptors Wiki](https://github.com/OpenFn/adaptors/wiki) for more information on +how you can update Adaptors! -Or, you can always reach out to the Community through our [Community Forum here](https://community.openfn.org/). +Or, you can always reach out to the Community through our +[Community Forum here](https://community.openfn.org/). diff --git a/adaptors/fhir-ndr-et.md b/adaptors/fhir-ndr-et.md index 98c7e3fa3134..c09f02eef2ef 100644 --- a/adaptors/fhir-ndr-et.md +++ b/adaptors/fhir-ndr-et.md @@ -3,19 +3,35 @@ title: FHIR-NDR-ET IG Adaptor --- ## Custom FHIR Adaptor: fhir-ndr-et -Note❗: This is a custom adaptor generated from this Implementation Guide `Ethiopia FHIR Implementation Guide - HIV Treatment & Care Services` authored by Jembi Health Systems: https://build.fhir.org/ig/jembi/ethiopia-hiv/branches/master/index.html -Custom FHIR adaptors generate a suite of helper functions specific to their source Implementation Guides. +Note❗: This is a custom adaptor generated from this Implementation Guide +`Ethiopia FHIR Implementation Guide - HIV Treatment & Care Services` authored by +Jembi Health Systems: +https://build.fhir.org/ig/jembi/ethiopia-hiv/branches/master/index.html -See the generic [fhir adaptor](/adaptors/fhir) and our [docs on standards](/documentation/get-started/standards) for more general guidance on OpenFn + FHIR. +Custom FHIR adaptors generate a suite of helper functions specific to their +source Implementation Guides. + +See the generic [fhir adaptor](/adaptors/fhir) and our +[docs on standards](/documentation/get-started/standards) for more general +guidance on OpenFn + FHIR. ## Build your own FHIR Adaptor -See the [Adaptors Wiki](https://github.com/OpenFn/adaptors/wiki/Generating-Fhir-Adaptors) to build your own adaptor for _your_ implementation guide by trying out our fhir-adaptor-generator (which is a new tool still in testing). -Please share any questions or feedback on [community.openfn.org](https://community.openfn.org). +See the +[Adaptors Wiki](https://github.com/OpenFn/adaptors/wiki/Generating-Fhir-Adaptors) +to build your own adaptor for _your_ implementation guide by trying out our +fhir-adaptor-generator (which is a new tool still in testing). + +Please share any questions or feedback on +[community.openfn.org](https://community.openfn.org). ### I've noticed a problem with this Adaptor, or something is out of date, what can I do? -Thanks for asking! We are a fully Open Source Digital Public Good, and we welcome contributions from our community. Check out our [Adaptors Wiki](https://github.com/OpenFn/adaptors/wiki) for more information on how you can update Adaptors! +Thanks for asking! We are a fully Open Source Digital Public Good, and we +welcome contributions from our community. Check out our +[Adaptors Wiki](https://github.com/OpenFn/adaptors/wiki) for more information on +how you can update Adaptors! -Or, you can always reach out to the Community through our [Community Forum here](https://community.openfn.org/). +Or, you can always reach out to the Community through our +[Community Forum here](https://community.openfn.org/). diff --git a/adaptors/fhir.md b/adaptors/fhir.md index 4c0b038154a4..4478636eadfb 100644 --- a/adaptors/fhir.md +++ b/adaptors/fhir.md @@ -4,30 +4,59 @@ title: FHIR Adaptor ## About FHIR -[FHIR](https://www.hl7.org/fhir/overview.html) stands for Fast Healthcare Interoperability Resources. It is a standard for representing and exchanging healthcare data electronically. +[FHIR](https://www.hl7.org/fhir/overview.html) stands for Fast Healthcare +Interoperability Resources. It is a standard for representing and exchanging +healthcare data electronically. +:::tip About this adaptor and features coming soon! -:::tip About this adaptor and features coming soon! +This adaptor is very basic and generic, used mostly to integrate demo FHIR +servers. It's a work-in-progress, so share questions and feedback on +[community.openfn.org](https://community.openfn.org). -This adaptor is very basic and generic, used mostly to integrate demo FHIR servers. It's a work-in-progress, so share questions and feedback on [community.openfn.org](https://community.openfn.org). - -**FHIR version-specific adaptors (e.g., `fhir-r4`) with enhanced functionality are coming soon** to fast-track integration setup with more helper functions, templates, and docs than this simple adaptor. See the [Adaptors Wiki](https://github.com/OpenFn/adaptors/wiki/Generating-Fhir-Adaptors) for how to build an adaptor specific to your FHIR Implementation Guide. +**FHIR version-specific adaptors (e.g., `fhir-r4`) with enhanced functionality +are coming soon** to fast-track integration setup with more helper functions, +templates, and docs than this simple adaptor. See the +[Adaptors Wiki](https://github.com/OpenFn/adaptors/wiki/Generating-Fhir-Adaptors) +for how to build an adaptor specific to your FHIR Implementation Guide. ::: ## Integration Options -**1. Rest API:** The FHIR specification includes a REST API that enables external services like OpenFn to pull data from the FHIR server, or push data from external apps to FHIR servers. This option is suited for scheduled, bulk syncs or workflows that must update data with external information. See [functions](/adaptors/packages/fhir-docs) for more on how to use this adaptor to work with the API. - -**2. Webhook:** The FHIR specification does not inherently define a webhook or data-forwarding mechanism. However, many FHIR implementations and platforms offer extensions or configurations that support similar functionality. This option is suited for real-time, event-based data integration. Check out the FHIR `Subscription` resource [documentation](https://build.fhir.org/subscription-definitions.html) to learn more about one way this might be implemented. +**1. Rest API:** The FHIR specification includes a REST API that enables +external services like OpenFn to pull data from the FHIR server, or push data +from external apps to FHIR servers. This option is suited for scheduled, bulk +syncs or workflows that must update data with external information. See +[functions](/adaptors/packages/fhir-docs) for more on how to use this adaptor to +work with the API. + +**2. Webhook:** The FHIR specification does not inherently define a webhook or +data-forwarding mechanism. However, many FHIR implementations and platforms +offer extensions or configurations that support similar functionality. This +option is suited for real-time, event-based data integration. Check out the FHIR +`Subscription` resource +[documentation](https://build.fhir.org/subscription-definitions.html) to learn +more about one way this might be implemented. ## Authentication -The FHIR standard does not directly prescribe authentication and authorization methods. Instead, it provides security guidelines and leaves the choice of implementation to the developers of FHIR servers and clients. See the FHIR [docs](https://www.hl7.org/fhir/security.html) for the latest security-related recommendations. Depending on the FHIR systems being integrated via OpenFn, you might employ a Basic Auth, API key, or OAuth authentication scheme. +The FHIR standard does not directly prescribe authentication and authorization +methods. Instead, it provides security guidelines and leaves the choice of +implementation to the developers of FHIR servers and clients. See the FHIR +[docs](https://www.hl7.org/fhir/security.html) for the latest security-related +recommendations. Depending on the FHIR systems being integrated via OpenFn, you +might employ a Basic Auth, API key, or OAuth authentication scheme. -See this adaptor's [Configuration docs](/adaptors/packages/fhir-configuration-schema) for more on the required authentication parameters. +See this adaptor's +[Configuration docs](/adaptors/packages/fhir-configuration-schema) for more on +the required authentication parameters. -See platform docs on [managing credentials](/documentation/manage-projects/manage-credentials) for how to configure a credential in OpenFn. If working locally or if using a Raw JSON credential type, then your configuration will look something like this to define your target endpoint and FHIR version: +See platform docs on +[managing credentials](/documentation/manage-projects/manage-credentials) for +how to configure a credential in OpenFn. If working locally or if using a Raw +JSON credential type, then your configuration will look something like this to +define your target endpoint and FHIR version: ``` { @@ -42,12 +71,18 @@ See platform docs on [managing credentials](/documentation/manage-projects/manag 2. [Digital Square on FHIR](https://digitalsquare.org/resourcesrepository/digital-square-on-fhir-4c78p) 3. [Basic guide to interacting with FHIR Server](https://smilecdr.com/docs/fhir_standard/fhir_introduction.html) 4. [Creating your first FHIR resource](https://medblocks.com/blog/fhir-101-creating-your-first-patient-resource-like-a-pro) -5. Google's [Open Health Stack](https://developers.google.com/open-health-stack) tooling for working with FHIR +5. Google's [Open Health Stack](https://developers.google.com/open-health-stack) + tooling for working with FHIR -Have resources or links to share? Submit a PR to edit this page or post on [community.openfn.org](https://community.openfn.org). +Have resources or links to share? Submit a PR to edit this page or post on +[community.openfn.org](https://community.openfn.org). ### I've noticed a problem with this Adaptor, or something is out of date, what can I do? -Thanks for asking! We are a fully Open Source Digital Public Good, and we welcome contributions from our community. Check out our [Adaptors Wiki](https://github.com/OpenFn/adaptors/wiki) for more information on how you can update Adaptors! +Thanks for asking! We are a fully Open Source Digital Public Good, and we +welcome contributions from our community. Check out our +[Adaptors Wiki](https://github.com/OpenFn/adaptors/wiki) for more information on +how you can update Adaptors! -Or, you can always reach out to the Community through our [Community Forum here](https://community.openfn.org/). +Or, you can always reach out to the Community through our +[Community Forum here](https://community.openfn.org/). diff --git a/adaptors/formsg.md b/adaptors/formsg.md index e0a283ef3c9e..ed7d76150871 100644 --- a/adaptors/formsg.md +++ b/adaptors/formsg.md @@ -4,21 +4,40 @@ title: FormSG Adaptor ## About FormSG -[FormSG](https://form.gov.sg/) is an open-source form builder developed by the Singapore Government's Open Government Products team to digitize paper processes for government agencies. It enables secure collection of up to Confidential (Cloud-Eligible) and Sensitive (High) data with end-to-end encryption. +[FormSG](https://form.gov.sg/) is an open-source form builder developed by the +Singapore Government's Open Government Products team to digitize paper processes +for government agencies. It enables secure collection of up to Confidential +(Cloud-Eligible) and Sensitive (High) data with end-to-end encryption. ## Integration Options FormSG supports webhook integration with OpenFn: -**Webhooks**: FormSG provides webhook functionality that enables real-time form submission data to be sent to external applications like OpenFn. Using the official FormSG JavaScript SDK, you can securely decrypt and process form submissions as they are received. This integration is suited for automated workflow triggers, real-time data processing, and applications that need immediate response to form submissions. The webhook system includes signature verification to ensure data authenticity and security. See [functions](/adaptors/packages/formsg-docs) for more on how to use this adaptor to work with FormSG webhooks. +**Webhooks**: FormSG provides webhook functionality that enables real-time form +submission data to be sent to external applications like OpenFn. Using the +official FormSG JavaScript SDK, you can securely decrypt and process form +submissions as they are received. This integration is suited for automated +workflow triggers, real-time data processing, and applications that need +immediate response to form submissions. The webhook system includes signature +verification to ensure data authenticity and security. See +[functions](/adaptors/packages/formsg-docs) for more on how to use this adaptor +to work with FormSG webhooks. ## Authentication -1. See [FormSG SDK documentation](https://github.com/opengovsg/formsg-sdk) for the latest on webhook authentication and signature verification methods. -2. When integrating with FormSG via OpenFn, you need a **Form Secret Key** which is generated when you create a form in FormSG. This key is used for decrypting submissions and verifying webhook signatures. -3. See this adaptor's [configuration docs](/adaptors/packages/formsg-configuration-schema) for more on the required authentication parameters. +1. See [FormSG SDK documentation](https://github.com/opengovsg/formsg-sdk) for + the latest on webhook authentication and signature verification methods. +2. When integrating with FormSG via OpenFn, you need a **Form Secret Key** which + is generated when you create a form in FormSG. This key is used for + decrypting submissions and verifying webhook signatures. +3. See this adaptor's + [configuration docs](/adaptors/packages/formsg-configuration-schema) for more + on the required authentication parameters. -See platform docs on [managing credentials](/documentation/manage-projects/manage-credentials) for how to configure a credential in OpenFn. If working locally or if using a Raw JSON credential type, then your configuration will look something like this: +See platform docs on +[managing credentials](/documentation/manage-projects/manage-credentials) for +how to configure a credential in OpenFn. If working locally or if using a Raw +JSON credential type, then your configuration will look something like this: ```json { @@ -28,13 +47,16 @@ See platform docs on [managing credentials](/documentation/manage-projects/manag } ``` - ### Implementation Examples _Coming soon!_ #### I've noticed a problem with this Adaptor, or something is out of date, what can I do? -Thanks for asking! We are a fully Open Source Digital Public Good, and we welcome contributions from our community. Check out our [Adaptors Wiki](https://github.com/OpenFn/adaptors/blob/main/wiki/index.md) for more information on how you can update Adaptors! +Thanks for asking! We are a fully Open Source Digital Public Good, and we +welcome contributions from our community. Check out our +[Adaptors Wiki](https://github.com/OpenFn/adaptors/blob/main/wiki/index.md) for +more information on how you can update Adaptors! -Or, you can always reach out to the Community through our [Community Forum here](https://community.openfn.org/). \ No newline at end of file +Or, you can always reach out to the Community through our +[Community Forum here](https://community.openfn.org/). diff --git a/adaptors/ghana-bdr.md b/adaptors/ghana-bdr.md index b8bbfadf1b48..f6d6ccfe2974 100644 --- a/adaptors/ghana-bdr.md +++ b/adaptors/ghana-bdr.md @@ -2,16 +2,25 @@ title: Ghana BDR (Births and Deaths Registry) Adaptor --- - ## About Ghana BDR -The Ghana Births and Deaths Registry (BDR) is the official government agency responsible for registering all births, deaths, and related vital events within Ghana's boundaries. Established under the Registration of Births and Deaths Act 1027 of 2020, the BDR maintains comprehensive records of vital statistics and provides certified documentation for citizens. The registry serves as the primary source for birth certificates, death certificates, adoption records, and other vital registration services essential for legal identification and government services in Ghana. +The Ghana Births and Deaths Registry (BDR) is the official government agency +responsible for registering all births, deaths, and related vital events within +Ghana's boundaries. Established under the Registration of Births and Deaths Act +1027 of 2020, the BDR maintains comprehensive records of vital statistics and +provides certified documentation for citizens. The registry serves as the +primary source for birth certificates, death certificates, adoption records, and +other vital registration services essential for legal identification and +government services in Ghana. ## Integration Options Ghana BDR supports REST API integration with OpenFn: -**REST API**: The Ghana BDR system provides API access for vital registration services, enabling external systems like OpenFn to interact with birth and death registration data. See [functions](/adaptors/packages/ghana-bdr-docs) for more on how to use this adaptor to work with the Ghana BDR API. +**REST API**: The Ghana BDR system provides API access for vital registration +services, enabling external systems like OpenFn to interact with birth and death +registration data. See [functions](/adaptors/packages/ghana-bdr-docs) for more +on how to use this adaptor to work with the Ghana BDR API. ## Authentication @@ -26,11 +35,11 @@ To connect to Ghana BDR, you need to provide authentication credentials: ``` **Required Fields:** + - `baseUrl`: The base URL of the Ghana BDR system - `username`: Your BDR system username (required) - `password`: Your BDR system password (required) - ## Helpful Links - [Ghana BDR Official Website](https://bdr.gov.gh/) @@ -38,6 +47,10 @@ To connect to Ghana BDR, you need to provide authentication credentials: ### I've noticed a problem with this Adaptor, or something is out of date, what can I do? -Thanks for asking! We are a fully Open Source Digital Public Good, and we welcome contributions from our community. Check out our [Adaptors Wiki](https://github.com/OpenFn/adaptors/blob/main/wiki/index.md) for more information on how you can update Adaptors! +Thanks for asking! We are a fully Open Source Digital Public Good, and we +welcome contributions from our community. Check out our +[Adaptors Wiki](https://github.com/OpenFn/adaptors/blob/main/wiki/index.md) for +more information on how you can update Adaptors! -Or, you can always reach out to the Community through our [Community Forum here](https://community.openfn.org/). +Or, you can always reach out to the Community through our +[Community Forum here](https://community.openfn.org/). diff --git a/adaptors/ghana-nia.md b/adaptors/ghana-nia.md index 319d43f95c36..5f59cddcb2a5 100644 --- a/adaptors/ghana-nia.md +++ b/adaptors/ghana-nia.md @@ -4,13 +4,25 @@ title: Ghana NIA (National Identification Authority) Adaptor ## About Ghana NIA -The Ghana National Identification Authority (NIA) is a statutory body established by the National Identification Authority Act, 2006 (Act 707) to create, maintain, provide and promote the use of national identity cards known as Ghana Cards. The NIA delivers exceptional identity services through a digitalized ecosystem for the promotion of safety, security, good governance and development in Ghana. The authority manages the National Identification System (NIS) that serves millions of Ghanaians and eligible foreigners, providing secure digital identity services for various government and private sector applications. +The Ghana National Identification Authority (NIA) is a statutory body +established by the National Identification Authority Act, 2006 (Act 707) to +create, maintain, provide and promote the use of national identity cards known +as Ghana Cards. The NIA delivers exceptional identity services through a +digitalized ecosystem for the promotion of safety, security, good governance and +development in Ghana. The authority manages the National Identification System +(NIS) that serves millions of Ghanaians and eligible foreigners, providing +secure digital identity services for various government and private sector +applications. ## Integration Options Ghana NIA supports REST API integration with OpenFn: -**REST API**: The Ghana NIA system provides API access for national identification services, enabling external systems like OpenFn to interact with identity verification, card issuance, and demographic data. See [functions](/adaptors/packages/ghana-nia-docs) for more on how to use this adaptor to work with the Ghana NIA API. +**REST API**: The Ghana NIA system provides API access for national +identification services, enabling external systems like OpenFn to interact with +identity verification, card issuance, and demographic data. See +[functions](/adaptors/packages/ghana-nia-docs) for more on how to use this +adaptor to work with the Ghana NIA API. ## Authentication @@ -24,6 +36,7 @@ To connect to Ghana NIA, you need to provide authentication credentials: ``` **Required Fields:** + - `baseUrl`: The base URL of the Ghana NIA system - `merchantKey`: Your NIA merchant key for API authentication (required) @@ -34,6 +47,10 @@ To connect to Ghana NIA, you need to provide authentication credentials: ### I've noticed a problem with this Adaptor, or something is out of date, what can I do? -Thanks for asking! We are a fully Open Source Digital Public Good, and we welcome contributions from our community. Check out our [Adaptors Wiki](https://github.com/OpenFn/adaptors/blob/main/wiki/index.md) for more information on how you can update Adaptors! +Thanks for asking! We are a fully Open Source Digital Public Good, and we +welcome contributions from our community. Check out our +[Adaptors Wiki](https://github.com/OpenFn/adaptors/blob/main/wiki/index.md) for +more information on how you can update Adaptors! -Or, you can always reach out to the Community through our [Community Forum here](https://community.openfn.org/). +Or, you can always reach out to the Community through our +[Community Forum here](https://community.openfn.org/). diff --git a/adaptors/gmail.md b/adaptors/gmail.md index 9ca0362b8b7d..63c9244319c5 100644 --- a/adaptors/gmail.md +++ b/adaptors/gmail.md @@ -4,23 +4,44 @@ title: Gmail Adaptor ## About Gmail -Gmail is a free email service developed by Google that supports email communication, collaboration, file sharing and integration with other Google services. +Gmail is a free email service developed by Google that supports email +communication, collaboration, file sharing and integration with other Google +services. ## Integration Options Gmail supports 2 primary integration options with OpenFn: -1. Rest API: Gmail has a REST API that enables external services like OpenFn to pull data from Gmail, or push data from external apps to Gmail. This option is suited for scheduled, bulk syncs or workflows that must update data in Gmail with external information. See [functions](/adaptors/packages/gmail-docs) for more on how to use this adaptor to work with the API. +1. Rest API: Gmail has a REST API that enables external services like OpenFn to + pull data from Gmail, or push data from external apps to Gmail. This option + is suited for scheduled, bulk syncs or workflows that must update data in + Gmail with external information. See + [functions](/adaptors/packages/gmail-docs) for more on how to use this + adaptor to work with the API. -2. Webhook: While Gmail does not natively support webhooks, you can implement webhook-like functionality to push data from Gmail to external systems. This option is suited for real-time, event-based data integration. Check out the Gmail [developer documentation](https://developers.google.com/gmail/api/guides/push) to learn how to set up push notifications on Gmail. +2. Webhook: While Gmail does not natively support webhooks, you can implement + webhook-like functionality to push data from Gmail to external systems. This + option is suited for real-time, event-based data integration. Check out the + Gmail + [developer documentation](https://developers.google.com/gmail/api/guides/push) + to learn how to set up push notifications on Gmail. ## Authentication -1. See [Gmail docs](https://developers.google.com/gmail/api/auth/scopes) for the latest on supported authentication methods. -2. When integrating with Gmail via OpenFn, there is one primary authentication method that is supported: **Access Token**. You can generate an access token from Gmail using these [instructions](https://developers.google.com/identity/protocols/oauth2). -3. See this adaptor's [Configuration docs](/adaptors/packages/gmail-configuration-schema) for more on the required authentication parameters. - -See platform docs on [managing credentials](/documentation/manage-projects/manage-credentials) for how to configure a credential in OpenFn. If working locally or if using a Raw JSON credential type, then your configuration will look something like this: +1. See [Gmail docs](https://developers.google.com/gmail/api/auth/scopes) for the + latest on supported authentication methods. +2. When integrating with Gmail via OpenFn, there is one primary authentication + method that is supported: **Access Token**. You can generate an access token + from Gmail using these + [instructions](https://developers.google.com/identity/protocols/oauth2). +3. See this adaptor's + [Configuration docs](/adaptors/packages/gmail-configuration-schema) for more + on the required authentication parameters. + +See platform docs on +[managing credentials](/documentation/manage-projects/manage-credentials) for +how to configure a credential in OpenFn. If working locally or if using a Raw +JSON credential type, then your configuration will look something like this: ``` { @@ -39,6 +60,10 @@ _Coming soon!_ ### I've noticed a problem with this Adaptor, or something is out of date, what can I do? -Thanks for asking! We are a fully Open Source Digital Public Good, and we welcome contributions from our community. Check out our [Adaptors Wiki](https://github.com/OpenFn/adaptors/blob/main/wiki/index.md) for more information on how you can update Adaptors! +Thanks for asking! We are a fully Open Source Digital Public Good, and we +welcome contributions from our community. Check out our +[Adaptors Wiki](https://github.com/OpenFn/adaptors/blob/main/wiki/index.md) for +more information on how you can update Adaptors! -Or, you can always reach out to the Community through our [Community Forum here](https://community.openfn.org/). +Or, you can always reach out to the Community through our +[Community Forum here](https://community.openfn.org/). diff --git a/adaptors/godata.md b/adaptors/godata.md index 67097b00a758..3ebacfc43714 100644 --- a/adaptors/godata.md +++ b/adaptors/godata.md @@ -4,26 +4,28 @@ title: Go.Data ## Overview -Go.Data ([https://www.who.int/godata](https://www.who.int/godata) is an outbreak investigation tool for field data collection during -public health emergencies. +Go.Data ([https://www.who.int/godata](https://www.who.int/godata) is an outbreak +investigation tool for field data collection during public health emergencies. ### Integration Use Cases -Check out the Go.Data `Interoperability Toolkit` docs for example OpenFn integrations and related documentation: https://worldhealthorganization.github.io/godata/interoperability/ +Check out the Go.Data `Interoperability Toolkit` docs for example OpenFn +integrations and related documentation: +https://worldhealthorganization.github.io/godata/interoperability/ ### Further Reading -1. Go.Data API docs - https://worldhealthorganization.github.io/godata/api-docs/ - -2. Go.Data Community - https://community-godata.who.int/login - +1. Go.Data API docs https://worldhealthorganization.github.io/godata/api-docs/ + +2. Go.Data Community https://community-godata.who.int/login + 3. Go.Data GitHub Repository – https://github.com/WorldHealthOrganization/godata ## Integration Options -Data integration via the Go.Data web API. Two-way integration can be achieved, but see all options here: https://worldhealthorganization.github.io/godata/options/ +Data integration via the Go.Data web API. Two-way integration can be achieved, +but see all options here: +https://worldhealthorganization.github.io/godata/options/ ## OpenFn Adaptor @@ -38,10 +40,15 @@ supported by `language-godata`. ## Implementation Examples -See Go.Data docs site: https://worldhealthorganization.github.io/godata/integration-scripts/ +See Go.Data docs site: +https://worldhealthorganization.github.io/godata/integration-scripts/ ### I've noticed a problem with this Adaptor, or something is out of date, what can I do? -Thanks for asking! We are a fully Open Source Digital Public Good, and we welcome contributions from our community. Check out our [Adaptors Wiki](https://github.com/OpenFn/adaptors/blob/main/wiki/index.md) for more information on how you can update Adaptors! +Thanks for asking! We are a fully Open Source Digital Public Good, and we +welcome contributions from our community. Check out our +[Adaptors Wiki](https://github.com/OpenFn/adaptors/blob/main/wiki/index.md) for +more information on how you can update Adaptors! -Or, you can always reach out to the Community through our [Community Forum here](https://community.openfn.org/). +Or, you can always reach out to the Community through our +[Community Forum here](https://community.openfn.org/). diff --git a/adaptors/googlehealthcare.md b/adaptors/googlehealthcare.md index 739258c623b3..c91a9864f758 100644 --- a/adaptors/googlehealthcare.md +++ b/adaptors/googlehealthcare.md @@ -4,20 +4,43 @@ title: Google Cloud Healthcare Adaptor ## About Google Cloud Healthcare -The [Google Cloud Healthcare API](https://cloud.google.com/healthcare-api) is a solution that enables the secure storage, management, and exchange of healthcare data on Google Cloud. It bridges existing care systems and applications hosted on Google Cloud, facilitating interoperability and integration with advanced analytics and machine learning tools. +The [Google Cloud Healthcare API](https://cloud.google.com/healthcare-api) is a +solution that enables the secure storage, management, and exchange of healthcare +data on Google Cloud. It bridges existing care systems and applications hosted +on Google Cloud, facilitating interoperability and integration with advanced +analytics and machine learning tools. ## Integration Options -**1. Rest API:** Google Cloud Healthcare offers a REST API that enables external applications to interact with its database and perform bulk operations. This option is ideal for applications requiring scheduled or bulk synchronization with Google Cloud Healthcare. The API supports the [HL7® FHIR®](https://www.hl7.org/fhir/overview.html) (Fast Healthcare Interoperability Resources) standard. See [functions](/adaptors/packages/googlehealthcare-docs) for more on how to use this adaptor to work with the API. +**1. Rest API:** Google Cloud Healthcare offers a REST API that enables external +applications to interact with its database and perform bulk operations. This +option is ideal for applications requiring scheduled or bulk synchronization +with Google Cloud Healthcare. The API supports the +[HL7® FHIR®](https://www.hl7.org/fhir/overview.html) (Fast Healthcare +Interoperability Resources) standard. See +[functions](/adaptors/packages/googlehealthcare-docs) for more on how to use +this adaptor to work with the API. -**2. Webhook:** The Google Cloud Healthcare API does not natively support webhooks as part of its core functionality. However, you can implement webhook-like behavior using other Google Cloud services and tools in combination with the Healthcare API. +**2. Webhook:** The Google Cloud Healthcare API does not natively support +webhooks as part of its core functionality. However, you can implement +webhook-like behavior using other Google Cloud services and tools in combination +with the Healthcare API. ## Authentication -1. See [Google Cloud Healthcare API docs](https://cloud.google.com/healthcare-api/docs/authentication#:~:text=You%20can%20authenticate%20to%20the,CLI%20credentials%20and%20ADC%20credentials.) for the latest on supported authentication methods. -2. When integrating with Google Cloud Healthcare via OpenFn, there is one primary authentication method that is supported: **Access Token**. See this adaptor's [Configuration docs](/adaptors/packages/googlehealthcare-configuration-schema) for more on the required authentication parameters. +1. See + [Google Cloud Healthcare API docs](https://cloud.google.com/healthcare-api/docs/authentication#:~:text=You%20can%20authenticate%20to%20the,CLI%20credentials%20and%20ADC%20credentials.) + for the latest on supported authentication methods. +2. When integrating with Google Cloud Healthcare via OpenFn, there is one + primary authentication method that is supported: **Access Token**. See this + adaptor's + [Configuration docs](/adaptors/packages/googlehealthcare-configuration-schema) + for more on the required authentication parameters. -See platform docs on [managing credentials](/documentation/manage-projects/manage-credentials) for how to configure a credential in OpenFn. If working locally or if using a Raw JSON credential type, then your configuration will look something like this: +See platform docs on +[managing credentials](/documentation/manage-projects/manage-credentials) for +how to configure a credential in OpenFn. If working locally or if using a Raw +JSON credential type, then your configuration will look something like this: ``` { @@ -45,7 +68,8 @@ When setting up a service account for Google Cloud Healthcare: - Generate a short-lived access token from the service account to use as your OpenFn credential, rather than a long-lived personal token. -See the [Credentials page](/documentation/build/credentials#creating-a-dedicated-integration-user-for-your-openfn-workflow) +See the +[Credentials page](/documentation/build/credentials#creating-a-dedicated-integration-user-for-your-openfn-workflow) for broader guidance on why dedicated integration users and service accounts are recommended for all OpenFn workflows. @@ -62,6 +86,10 @@ _Coming soon!_ ### I've noticed a problem with this Adaptor, or something is out of date, what can I do? -Thanks for asking! We are a fully Open Source Digital Public Good, and we welcome contributions from our community. Check out our [Adaptors Wiki](https://github.com/OpenFn/adaptors/blob/main/wiki/index.md) for more information on how you can update Adaptors! +Thanks for asking! We are a fully Open Source Digital Public Good, and we +welcome contributions from our community. Check out our +[Adaptors Wiki](https://github.com/OpenFn/adaptors/blob/main/wiki/index.md) for +more information on how you can update Adaptors! -Or, you can always reach out to the Community through our [Community Forum here](https://community.openfn.org/). +Or, you can always reach out to the Community through our +[Community Forum here](https://community.openfn.org/). diff --git a/adaptors/googlesheets.md b/adaptors/googlesheets.md index 580fe23afaeb..a9f53ede7ddf 100644 --- a/adaptors/googlesheets.md +++ b/adaptors/googlesheets.md @@ -60,15 +60,16 @@ consent flow, making them more reliable and auditable for integration workflows. When setting up a service account for Google Sheets: -- Grant only the scopes your workflow requires, following the principle of - least privilege. See +- Grant only the scopes your workflow requires, following the principle of least + privilege. See [Google's documentation on OAuth scopes](https://developers.google.com/identity/protocols/oauth2/scopes#sheets) for the available Sheets scopes. - Share the specific Google Sheet(s) with the service account's email address (e.g. `my-service-account@my-project.iam.gserviceaccount.com`) at the appropriate permission level (Viewer for read-only, Editor for write access). -See the [Credentials page](/documentation/build/credentials#creating-a-dedicated-integration-user-for-your-openfn-workflow) +See the +[Credentials page](/documentation/build/credentials#creating-a-dedicated-integration-user-for-your-openfn-workflow) for broader guidance on why dedicated integration users and service accounts are recommended for all OpenFn workflows. @@ -169,10 +170,13 @@ that shows us how to get data via a REST API and push it to Google Sheet. - [Google Sheets API Overview](https://developers.google.com/sheets/api/guides/concepts) - OpenFn Workflow Tutorial: [HTTP-to-GoogleSheets](https://docs.openfn.org/documentation/tutorials/http-to-googlesheets) - ### I've noticed a problem with this Adaptor, or something is out of date, what can I do? -Thanks for asking! We are a fully Open Source Digital Public Good, and we welcome contributions from our community. Check out our [Adaptors Wiki](https://github.com/OpenFn/adaptors/blob/main/wiki/index.md) for more information on how you can update Adaptors! +Thanks for asking! We are a fully Open Source Digital Public Good, and we +welcome contributions from our community. Check out our +[Adaptors Wiki](https://github.com/OpenFn/adaptors/blob/main/wiki/index.md) for +more information on how you can update Adaptors! -Or, you can always reach out to the Community through our [Community Forum here](https://community.openfn.org/). +Or, you can always reach out to the Community through our +[Community Forum here](https://community.openfn.org/). diff --git a/adaptors/hive.md b/adaptors/hive.md index 48a9032abe69..72d1907b7a18 100644 --- a/adaptors/hive.md +++ b/adaptors/hive.md @@ -4,18 +4,28 @@ title: Hive Adaptor ## About Apache Hive -[Apache Hive](https://hive.apache.org/) is a data warehouse software that facilitates reading, writing, and managing large datasets stored in distributed storage systems. +[Apache Hive](https://hive.apache.org/) is a data warehouse software that +facilitates reading, writing, and managing large datasets stored in distributed +storage systems. ## Integration Options -The `hive` adaptor provides direct database connections for accessing data and executing SQL and standard database operations. See [functions](/adaptors/packages/hive-docs) for more on how to use this adaptor. - +The `hive` adaptor provides direct database connections for accessing data and +executing SQL and standard database operations. See +[functions](/adaptors/packages/hive-docs) for more on how to use this adaptor. ## Authentication -See [Hive docs](https://hive.apache.org/docs/) for the latest on supported authentication methods. When integrating with a Hive database via OpenFn, you authenticate via SSH using authorized database credentials. See this adaptor's [Configuration docs](/adaptors/packages/hive-configuration-schema) for more on the required authentication parameters. +See [Hive docs](https://hive.apache.org/docs/) for the latest on supported +authentication methods. When integrating with a Hive database via OpenFn, you +authenticate via SSH using authorized database credentials. See this adaptor's +[Configuration docs](/adaptors/packages/hive-configuration-schema) for more on +the required authentication parameters. -See platform docs on [managing credentials](/documentation/manage-projects/manage-credentials) for how to configure a credential in OpenFn. If working locally or if using a Raw JSON credential type, then your configuration will look something like this: +See platform docs on +[managing credentials](/documentation/manage-projects/manage-credentials) for +how to configure a credential in OpenFn. If working locally or if using a Raw +JSON credential type, then your configuration will look something like this: ``` { @@ -30,13 +40,16 @@ See platform docs on [managing credentials](/documentation/manage-projects/manag 1. [Hive documentation](https://hive.apache.org/) - ### Implementation Examples _Coming soon!_ ### I've noticed a problem with this Adaptor, or something is out of date, what can I do? -Thanks for asking! We are a fully Open Source Digital Public Good, and we welcome contributions from our community. Check out our [Adaptors Wiki](https://github.com/OpenFn/adaptors/blob/main/wiki/index.md) for more information on how you can update Adaptors! +Thanks for asking! We are a fully Open Source Digital Public Good, and we +welcome contributions from our community. Check out our +[Adaptors Wiki](https://github.com/OpenFn/adaptors/blob/main/wiki/index.md) for +more information on how you can update Adaptors! -Or, you can always reach out to the Community through our [Community Forum here](https://community.openfn.org/). +Or, you can always reach out to the Community through our +[Community Forum here](https://community.openfn.org/). diff --git a/adaptors/http.md b/adaptors/http.md index efc36b906860..147295aa790e 100644 --- a/adaptors/http.md +++ b/adaptors/http.md @@ -4,20 +4,32 @@ title: HTTP Adaptor ## About the HTTP "universal" adaptor -Communicate with web apps using [HTTP (HyperText Transfer Protocol)](https://www.cloudflare.com/learning/ddos/glossary/hypertext-transfer-protocol-http/). -This adaptor enables out-of-box integration with any REST API! +Communicate with web apps using +[HTTP (HyperText Transfer Protocol)](https://www.cloudflare.com/learning/ddos/glossary/hypertext-transfer-protocol-http/). +This adaptor enables out-of-box integration with any REST API! ## Integration Options -Use this adaptor to communicate with **any REST API** or any other app that can communicate via HTTP. +Use this adaptor to communicate with **any REST API** or any other app that can +communicate via HTTP. -**Note that OpenFn also supports Webhooks, but that is a workflow trigger type ([see docs](/documentation/build/triggers#webhook-event-triggers)), not an adaptor.** +**Note that OpenFn also supports Webhooks, but that is a workflow trigger type +([see docs](/documentation/build/triggers#webhook-event-triggers)), not an +adaptor.** ## Authentication -HTTP itself does not enforce authentication, but many applications that use HTTP implement security mechanisms to control access. Common methods that can be used when integrating with OpenFn include Basic Authentication, API Keys and OAuth. See this adaptor's [Configuration docs](/adaptors/packages/http-configuration-schema) for more on the required authentication parameters. +HTTP itself does not enforce authentication, but many applications that use HTTP +implement security mechanisms to control access. Common methods that can be used +when integrating with OpenFn include Basic Authentication, API Keys and OAuth. +See this adaptor's +[Configuration docs](/adaptors/packages/http-configuration-schema) for more on +the required authentication parameters. -See platform docs on [managing credentials](/documentation/manage-projects/manage-credentials) for how to configure a credential in OpenFn. If working locally or if using a Raw JSON credential type, then your configuration will look something like this: +See platform docs on +[managing credentials](/documentation/manage-projects/manage-credentials) for +how to configure a credential in OpenFn. If working locally or if using a Raw +JSON credential type, then your configuration will look something like this: ``` { @@ -28,14 +40,19 @@ See platform docs on [managing credentials](/documentation/manage-projects/manag } ``` - ### Implementation Examples -1. UNICEF Primero - UNHCR Progres Interoperability: [https://github.com/OpenFn/primero-progres](https://github.com/OpenFn/primero-progres) -2. UNICEF Thailand Primero Interoperability: [https://openfn.github.io/primero-thailand/](https://openfn.github.io/primero-thailand/) +1. UNICEF Primero - UNHCR Progres Interoperability: + [https://github.com/OpenFn/primero-progres](https://github.com/OpenFn/primero-progres) +2. UNICEF Thailand Primero Interoperability: + [https://openfn.github.io/primero-thailand/](https://openfn.github.io/primero-thailand/) ### I've noticed a problem with this Adaptor, or something is out of date, what can I do? -Thanks for asking! We are a fully Open Source Digital Public Good, and we welcome contributions from our community. Check out our [Adaptors Wiki](https://github.com/OpenFn/adaptors/blob/main/wiki/index.md) for more information on how you can update Adaptors! +Thanks for asking! We are a fully Open Source Digital Public Good, and we +welcome contributions from our community. Check out our +[Adaptors Wiki](https://github.com/OpenFn/adaptors/blob/main/wiki/index.md) for +more information on how you can update Adaptors! -Or, you can always reach out to the Community through our [Community Forum here](https://community.openfn.org/). +Or, you can always reach out to the Community through our +[Community Forum here](https://community.openfn.org/). diff --git a/adaptors/hubtel.md b/adaptors/hubtel.md index 36e46d1c8b4d..acc53f808680 100644 --- a/adaptors/hubtel.md +++ b/adaptors/hubtel.md @@ -4,22 +4,39 @@ title: Hubtel Adaptor ## About Hubtel -[Hubtel](https://www.hubtel.com/) is a payment, messaging, and e-commerce platform that enables businesses to send SMS messages, process mobile money transactions, and manage digital commerce operations. Hubtel supports API integrations to facilitate seamless business automation. +[Hubtel](https://www.hubtel.com/) is a payment, messaging, and e-commerce +platform that enables businesses to send SMS messages, process mobile money +transactions, and manage digital commerce operations. Hubtel supports API +integrations to facilitate seamless business automation. ## Integration Options Hubtel supports two primary integration options with OpenFn: -**1. Rest API:** Hubtel offers a REST API that enables external applications to interact with its services. This option is ideal for applications requiring scheduled or bulk synchronization with Hubtel. Refer to the Hubtel REST API [documentation](https://api.hubtel.com/) for detailed guidelines on endpoints and payload formats. +**1. Rest API:** Hubtel offers a REST API that enables external applications to +interact with its services. This option is ideal for applications requiring +scheduled or bulk synchronization with Hubtel. Refer to the Hubtel REST API +[documentation](https://api.hubtel.com/) for detailed guidelines on endpoints +and payload formats. -**2. Webhook:** Webhook or Data Forwarding to push data from Hubtel to external systems ([see docs](https://developers.hubtel.com/docs/webhooks)). This option is suited for real-time, event-based data integration. +**2. Webhook:** Webhook or Data Forwarding to push data from Hubtel to external +systems ([see docs](https://developers.hubtel.com/docs/webhooks)). This option +is suited for real-time, event-based data integration. ## Authentication -1. See [Hubtel docs](https://developers.hubtel.com/docs/authentication) for the latest on supported authentication methods. -2. When integrating with Hubtel via OpenFn, authentication via **API Key** is supported. -3. See this adaptor's [Configuration docs](/adaptors/packages/hubtel-configuration-schema) for more on the required authentication parameters. -See platform docs on [managing credentials](/documentation/manage-projects/manage-credentials) for how to configure a credential in OpenFn. If working locally or if using a Raw JSON credential type, then your configuration will look something like this: +1. See [Hubtel docs](https://developers.hubtel.com/docs/authentication) for the + latest on supported authentication methods. +2. When integrating with Hubtel via OpenFn, authentication via **API Key** is + supported. +3. See this adaptor's + [Configuration docs](/adaptors/packages/hubtel-configuration-schema) for more + on the required authentication parameters. + +See platform docs on +[managing credentials](/documentation/manage-projects/manage-credentials) for +how to configure a credential in OpenFn. If working locally or if using a Raw +JSON credential type, then your configuration will look something like this: ``` { @@ -35,13 +52,16 @@ See platform docs on [managing credentials](/documentation/manage-projects/manag 2. [API Reference](https://developers.hubtel.com/docs/) 3. [Webhook Setup Guide](https://developers.hubtel.com/docs/webhooks) - ### Implementation Examples _Coming soon!_ ### I've noticed a problem with this Adaptor, or something is out of date, what can I do? -Thanks for asking! We are a fully Open Source Digital Public Good, and we welcome contributions from our community. Check out our [Adaptors Wiki](https://github.com/OpenFn/adaptors/blob/main/wiki/index.md) for more information on how you can update Adaptors! +Thanks for asking! We are a fully Open Source Digital Public Good, and we +welcome contributions from our community. Check out our +[Adaptors Wiki](https://github.com/OpenFn/adaptors/blob/main/wiki/index.md) for +more information on how you can update Adaptors! -Or, you can always reach out to the Community through our [Community Forum here](https://community.openfn.org/). +Or, you can always reach out to the Community through our +[Community Forum here](https://community.openfn.org/). diff --git a/adaptors/ihris.md b/adaptors/ihris.md index 47b93ea9d76e..b5e9d123e538 100644 --- a/adaptors/ihris.md +++ b/adaptors/ihris.md @@ -3,24 +3,35 @@ title: iHRIS Adaptor --- ## About iHRIS -iHRIS is IntraHealth International's free, open source software that helps countries around the world track and manage their health workforce data to improve access to services. Countries use it to capture and maintain high-quality information for health workforce planning, management, regulation, and training. + +iHRIS is IntraHealth International's free, open source software that helps +countries around the world track and manage their health workforce data to +improve access to services. Countries use it to capture and maintain +high-quality information for health workforce planning, management, regulation, +and training. ## Integration Options + iHRIS has an available [REST API](https://ihris.github.io/iHRIS/dev/fhir_http/). -See [functions](/adaptors/packages/ihris-docs) for more on how to use this adaptor to work with the API. -Visit the [iHRIS homepage](https://www.intrahealth.org/resources/ihris-software) for more details. +See [functions](/adaptors/packages/ihris-docs) for more on how to use this +adaptor to work with the API. Visit the +[iHRIS homepage](https://www.intrahealth.org/resources/ihris-software) for more +details. ## Authentication -Users must specify a `baseUrl`, `username` and `password` to login and get a `cookie` back. The cookie is then included as part of the headers in every HTTP request. + +Users must specify a `baseUrl`, `username` and `password` to login and get a +`cookie` back. The cookie is then included as part of the headers in every HTTP +request. OpenFn users can use the `iHRIS` credential type when [creating a credential](/documentation/manage-projects/manage-credentials). -See the adaptor's [configuration schema docs](/adaptors/packages/ihris-configuration-schema) +See the adaptor's +[configuration schema docs](/adaptors/packages/ihris-configuration-schema) -If working locally or -if using a `Raw JSON` credential type, then your configuration will look -something like this: +If working locally or if using a `Raw JSON` credential type, then your +configuration will look something like this: ```json { @@ -32,8 +43,10 @@ something like this: ### I've noticed a problem with this Adaptor, or something is out of date, what can I do? -Thanks for asking! We are a fully Open Source Digital Public Good, and we welcome contributions from our community. Check out our [Adaptors Wiki](https://github.com/OpenFn/adaptors/blob/main/wiki/index.md) for more information on how you can update Adaptors! - -Or, you can always reach out to the Community through our [Community Forum here](https://community.openfn.org/). - +Thanks for asking! We are a fully Open Source Digital Public Good, and we +welcome contributions from our community. Check out our +[Adaptors Wiki](https://github.com/OpenFn/adaptors/blob/main/wiki/index.md) for +more information on how you can update Adaptors! +Or, you can always reach out to the Community through our +[Community Forum here](https://community.openfn.org/). diff --git a/adaptors/inform.md b/adaptors/inform.md index a490815acd37..9d2b28cc8364 100644 --- a/adaptors/inform.md +++ b/adaptors/inform.md @@ -4,23 +4,40 @@ title: Inform Adaptor ## About Inform -[Inform](https://inform.unicef.org/) is UNICEF's platform for building forms and surveys, collecting field data (even offline), and viewing results in simple dashboards. Inform enables organizations to create digital forms, collect data in the field (with offline capabilities), and analyze results through intuitive dashboards and reporting tools. +[Inform](https://inform.unicef.org/) is UNICEF's platform for building forms and +surveys, collecting field data (even offline), and viewing results in simple +dashboards. Inform enables organizations to create digital forms, collect data +in the field (with offline capabilities), and analyze results through intuitive +dashboards and reporting tools. ## Integration Options -Inform supports integration through its REST API, which enables external services like OpenFn to: +Inform supports integration through its REST API, which enables external +services like OpenFn to: -1. **REST API**: Pull data from Inform or push data from external applications to Inform. This option is suited for scheduled, bulk syncs or workflows that need to update data in Inform with external information. See [functions](/adaptors/packages/inform-docs) for more on how to use this adaptor to work with the API. +1. **REST API**: Pull data from Inform or push data from external applications + to Inform. This option is suited for scheduled, bulk syncs or workflows that + need to update data in Inform with external information. See + [functions](/adaptors/packages/inform-docs) for more on how to use this + adaptor to work with the API. -2. **Data Export**: Export collected survey and form data for analysis and integration with external systems like DHIS2, databases, or reporting platforms. +2. **Data Export**: Export collected survey and form data for analysis and + integration with external systems like DHIS2, databases, or reporting + platforms. ## Authentication -When integrating with Inform via OpenFn, the primary authentication method supported is: **Access Token**. +When integrating with Inform via OpenFn, the primary authentication method +supported is: **Access Token**. -See this adaptor's [Configuration docs](/adaptors/packages/inform-configuration-schema) for more on required authentication parameters. +See this adaptor's +[Configuration docs](/adaptors/packages/inform-configuration-schema) for more on +required authentication parameters. -See platform docs on [managing credentials](/documentation/manage-projects/manage-credentials) for how to configure a credential in OpenFn. If working locally or if using a Raw JSON credential type, then your configuration will look something like this: +See platform docs on +[managing credentials](/documentation/manage-projects/manage-credentials) for +how to configure a credential in OpenFn. If working locally or if using a Raw +JSON credential type, then your configuration will look something like this: ```json { @@ -35,6 +52,10 @@ See platform docs on [managing credentials](/documentation/manage-projects/manag ### I've noticed a problem with this Adaptor, or something is out of date, what can I do? -Thanks for asking! We are a fully Open Source Digital Public Good, and we welcome contributions from our community. Check out our [Adaptors Wiki](https://github.com/OpenFn/adaptors/blob/main/wiki/index.md) for more information on how you can update Adaptors! +Thanks for asking! We are a fully Open Source Digital Public Good, and we +welcome contributions from our community. Check out our +[Adaptors Wiki](https://github.com/OpenFn/adaptors/blob/main/wiki/index.md) for +more information on how you can update Adaptors! -Or, you can always reach out to the Community through our [Community Forum here](https://community.openfn.org/). +Or, you can always reach out to the Community through our +[Community Forum here](https://community.openfn.org/). diff --git a/adaptors/intro.mdx b/adaptors/intro.mdx index c3c3fcb355e5..0894fff740f1 100644 --- a/adaptors/intro.mdx +++ b/adaptors/intro.mdx @@ -48,7 +48,15 @@ In short, _most_ adaptors follow the naming convention `@openfn/language-xyz`. Explore this YouTube playlist to gain a deeper understanding of OpenFn adaptors. - + ## Adaptors vs. Workflows @@ -100,20 +108,24 @@ Workflows, and to handle authenticatio. See the below diagram. > API docs - , p.name == a.module).changelogId }`} > changelog - , and + , and{' '} + p.name == a.module).readmeId }`} > developer readme - for {a.module} are available here. You can view the source - & documentation via these links: + {' '} + for {a.module} are available here. You can view the source & + documentation via these links: ) : (
@@ -168,8 +180,9 @@ Or build your own (see below)! ## Building and extending adaptors -See the [Github Adaptors wiki](https://github.com/OpenFn/adaptors/blob/main/wiki/index.md) for the -technical guide to developing adaptors. +See the +[Github Adaptors wiki](https://github.com/OpenFn/adaptors/blob/main/wiki/index.md) +for the technical guide to developing adaptors. Adaptors' source code and technical documentation for developing or extending existing adaptors can be found on this linked repository: diff --git a/adaptors/intuit.md b/adaptors/intuit.md index 5c22d22cca67..62acd5b9b47f 100644 --- a/adaptors/intuit.md +++ b/adaptors/intuit.md @@ -4,23 +4,44 @@ title: Intuit Adaptor (QuickBooks) ## About Intuit (QuickBooks) -[Intuit](https://www.intuit.com/) provides financial, accounting, and tax management solutions for businesses and individuals, including **QuickBooks**, **TurboTax**, and **Mint**. +[Intuit](https://www.intuit.com/) provides financial, accounting, and tax +management solutions for businesses and individuals, including **QuickBooks**, +**TurboTax**, and **Mint**. ## Integration Options Intuit supports 2 primary integration options: -1. **Rest API**: Intuit has an available [REST API](https://developer.intuit.com/app/developer/qbo/docs/api/accounting/all-entities/account#the-account-object) that enables external services like OpenFn to pull data from Intuit, or push data from external apps to Intuit. This option is suited for scheduled, bulk syncs or workflows that must update data in Intuit with external information. See [functions](/adaptors/packages/intuit-docs) for more on how to use this adaptor to work with the API. - -2. **Webhook**: Intuit also has a [Webhook or Data Forwarding](https://developer.intuit.com/app/developer/qbo/docs/api/webhooks) to push data from Intuit to external systems. This option is suited for real-time, event-based data integration. Check out the Intuit [developer documentation](https://developer.intuit.com/app/developer/qbo/docs/api/webhooks) to learn how to set up a webhook to push data to OpenFn. +1. **Rest API**: Intuit has an available + [REST API](https://developer.intuit.com/app/developer/qbo/docs/api/accounting/all-entities/account#the-account-object) + that enables external services like OpenFn to pull data from Intuit, or push + data from external apps to Intuit. This option is suited for scheduled, bulk + syncs or workflows that must update data in Intuit with external information. + See [functions](/adaptors/packages/intuit-docs) for more on how to use this + adaptor to work with the API. + +2. **Webhook**: Intuit also has a + [Webhook or Data Forwarding](https://developer.intuit.com/app/developer/qbo/docs/api/webhooks) + to push data from Intuit to external systems. This option is suited for + real-time, event-based data integration. Check out the Intuit + [developer documentation](https://developer.intuit.com/app/developer/qbo/docs/api/webhooks) + to learn how to set up a webhook to push data to OpenFn. ## Authentication -See [Intuit docs](https://developer.intuit.com/app/developer/qbo/docs/develop/authentication-and-authorization) for the latest on supported authentication methods. +See +[Intuit docs](https://developer.intuit.com/app/developer/qbo/docs/develop/authentication-and-authorization) +for the latest on supported authentication methods. -When integrating with Intuit via OpenFn, there is one primary authentication method supported: **Access Token**. See this adaptor's [Configuration docs](/adaptors/packages/intuit-configuration-schema) for more on the required authentication parameters. +When integrating with Intuit via OpenFn, there is one primary authentication +method supported: **Access Token**. See this adaptor's +[Configuration docs](/adaptors/packages/intuit-configuration-schema) for more on +the required authentication parameters. -See platform docs on [managing credentials](/documentation/manage-projects/manage-credentials) for how to configure a credential in OpenFn. If working locally or if using a Raw JSON credential type, then your configuration will look something like this: +See platform docs on +[managing credentials](/documentation/manage-projects/manage-credentials) for +how to configure a credential in OpenFn. If working locally or if using a Raw +JSON credential type, then your configuration will look something like this: ``` { @@ -36,6 +57,10 @@ See platform docs on [managing credentials](/documentation/manage-projects/manag ### I've noticed a problem with this Adaptor, or something is out of date, what can I do? -Thanks for asking! We are a fully Open Source Digital Public Good, and we welcome contributions from our community. Check out our [Adaptors Wiki](https://github.com/OpenFn/adaptors/blob/main/wiki/index.md) for more information on how you can update Adaptors! +Thanks for asking! We are a fully Open Source Digital Public Good, and we +welcome contributions from our community. Check out our +[Adaptors Wiki](https://github.com/OpenFn/adaptors/blob/main/wiki/index.md) for +more information on how you can update Adaptors! -Or, you can always reach out to the Community through our [Community Forum here](https://community.openfn.org/). +Or, you can always reach out to the Community through our +[Community Forum here](https://community.openfn.org/). diff --git a/adaptors/khanacademy.md b/adaptors/khanacademy.md index a923f7169d7a..fbf8eeec694c 100644 --- a/adaptors/khanacademy.md +++ b/adaptors/khanacademy.md @@ -4,17 +4,29 @@ title: Khan Academy Adaptor ## About Khan Academy -[Khan Academy](https://www.khanacademy.org/) is a nonprofit educational platform that provides a free, world-class education for anyone, anywhere. Founded with the mission to democratize learning, Khan Academy offers personalized learning experiences through interactive exercises, instructional videos, and comprehensive curriculum covering subjects from kindergarten through early college. +[Khan Academy](https://www.khanacademy.org/) is a nonprofit educational platform +that provides a free, world-class education for anyone, anywhere. Founded with +the mission to democratize learning, Khan Academy offers personalized learning +experiences through interactive exercises, instructional videos, and +comprehensive curriculum covering subjects from kindergarten through early +college. -Khan Academy serves millions of students worldwide, providing essential educational resources for K-12 education, college preparation, and lifelong learning. +Khan Academy serves millions of students worldwide, providing essential +educational resources for K-12 education, college preparation, and lifelong +learning. ## Integration Options -**REST API**: Khan Academy provides API access for educational data integration, enabling external applications to retrieve user progress, learning analytics, and curriculum information. The API supports OAuth-based authentication and provides access to student performance data and content metadata for educational technology integrations. +**REST API**: Khan Academy provides API access for educational data integration, +enabling external applications to retrieve user progress, learning analytics, +and curriculum information. The API supports OAuth-based authentication and +provides access to student performance data and content metadata for educational +technology integrations. ## Authentication -Khan Academy uses OAuth-based authentication with multiple credential components: +Khan Academy uses OAuth-based authentication with multiple credential +components: ```json { @@ -26,13 +38,14 @@ Khan Academy uses OAuth-based authentication with multiple credential components ``` **Authentication Components:** + - **email**: Your Khan Academy account email address - **password**: Your Khan Academy account password - **consumerKey**: OAuth consumer key for API access - **secretKey**: OAuth secret key for request signing -OAuth credentials enable secure access to Khan Academy's educational data while maintaining user privacy and data protection. - +OAuth credentials enable secure access to Khan Academy's educational data while +maintaining user privacy and data protection. ## Helpful Links @@ -42,6 +55,10 @@ OAuth credentials enable secure access to Khan Academy's educational data while ### I've noticed a problem with this Adaptor, or something is out of date, what can I do? -Thanks for asking! We are a fully Open Source Digital Public Good, and we welcome contributions from our community. Check out our [Adaptors Wiki](https://github.com/OpenFn/adaptors/blob/main/wiki/index.md) for more information on how you can update Adaptors! +Thanks for asking! We are a fully Open Source Digital Public Good, and we +welcome contributions from our community. Check out our +[Adaptors Wiki](https://github.com/OpenFn/adaptors/blob/main/wiki/index.md) for +more information on how you can update Adaptors! -Or, you can always reach out to the Community through our [Community Forum here](https://community.openfn.org/). +Or, you can always reach out to the Community through our +[Community Forum here](https://community.openfn.org/). diff --git a/adaptors/kobotoolbox.md b/adaptors/kobotoolbox.md index 707e89a68a84..b744c8113b8d 100644 --- a/adaptors/kobotoolbox.md +++ b/adaptors/kobotoolbox.md @@ -231,6 +231,10 @@ https://github.com/OpenFn/consosci ### I've noticed a problem with this Adaptor, or something is out of date, what can I do? -Thanks for asking! We are a fully Open Source Digital Public Good, and we welcome contributions from our community. Check out our [Adaptors Wiki](https://github.com/OpenFn/adaptors/blob/main/wiki/index.md) for more information on how you can update Adaptors! +Thanks for asking! We are a fully Open Source Digital Public Good, and we +welcome contributions from our community. Check out our +[Adaptors Wiki](https://github.com/OpenFn/adaptors/blob/main/wiki/index.md) for +more information on how you can update Adaptors! -Or, you can always reach out to the Community through our [Community Forum here](https://community.openfn.org/). +Or, you can always reach out to the Community through our +[Community Forum here](https://community.openfn.org/). diff --git a/adaptors/library-intro.md b/adaptors/library-intro.md index 1616a7ad18a7..31e0de61903d 100644 --- a/adaptors/library-intro.md +++ b/adaptors/library-intro.md @@ -81,6 +81,10 @@ touch if you're interested in helping out! ### I've noticed a problem with this Adaptor, or something is out of date, what can I do? -Thanks for asking! We are a fully Open Source Digital Public Good, and we welcome contributions from our community. Check out our [Adaptors Wiki](https://github.com/OpenFn/adaptors/blob/main/wiki/index.md) for more information on how you can update Adaptors! +Thanks for asking! We are a fully Open Source Digital Public Good, and we +welcome contributions from our community. Check out our +[Adaptors Wiki](https://github.com/OpenFn/adaptors/blob/main/wiki/index.md) for +more information on how you can update Adaptors! -Or, you can always reach out to the Community through our [Community Forum here](https://community.openfn.org/). +Or, you can always reach out to the Community through our +[Community Forum here](https://community.openfn.org/). diff --git a/adaptors/magpi.md b/adaptors/magpi.md index 05a1a8f85832..e6f34d69d693 100644 --- a/adaptors/magpi.md +++ b/adaptors/magpi.md @@ -18,6 +18,10 @@ Every time this job runs it will only fetch new data, by default. ### I've noticed a problem with this Adaptor, or something is out of date, what can I do? -Thanks for asking! We are a fully Open Source Digital Public Good, and we welcome contributions from our community. Check out our [Adaptors Wiki](https://github.com/OpenFn/adaptors/blob/main/wiki/index.md) for more information on how you can update Adaptors! +Thanks for asking! We are a fully Open Source Digital Public Good, and we +welcome contributions from our community. Check out our +[Adaptors Wiki](https://github.com/OpenFn/adaptors/blob/main/wiki/index.md) for +more information on how you can update Adaptors! -Or, you can always reach out to the Community through our [Community Forum here](https://community.openfn.org/). +Or, you can always reach out to the Community through our +[Community Forum here](https://community.openfn.org/). diff --git a/adaptors/mailchimp.md b/adaptors/mailchimp.md index 2d7ee4fb0428..f4388672ce21 100644 --- a/adaptors/mailchimp.md +++ b/adaptors/mailchimp.md @@ -4,21 +4,39 @@ title: MailChimp Adaptor ## About Mailchimp -[Mailchimp](https://mailchimp.com/) is a marketing automation platform that allows businesses to design, send, and manage email campaigns. It also provides tools for audience management, analytics, and integrations with other platforms to support marketing efforts. +[Mailchimp](https://mailchimp.com/) is a marketing automation platform that +allows businesses to design, send, and manage email campaigns. It also provides +tools for audience management, analytics, and integrations with other platforms +to support marketing efforts. ## Integration Options Mailchimp supports two primary integration options: -**1. Rest API:** Mailchimp offers a REST API that enables external applications to interact with its services. This option is ideal for applications requiring scheduled or bulk synchronization with Mailchimp. Refer to the Mailchimp REST API [documentation](https://mailchimp.com/developer/marketing/api/) for detailed guidelines on endpoints and payload formats. +**1. Rest API:** Mailchimp offers a REST API that enables external applications +to interact with its services. This option is ideal for applications requiring +scheduled or bulk synchronization with Mailchimp. Refer to the Mailchimp REST +API [documentation](https://mailchimp.com/developer/marketing/api/) for detailed +guidelines on endpoints and payload formats. -**2. Webhook:** Webhook or Data Forwarding to push data from MailChimp to external systems ([see docs](https://mailchimp.com/developer/transactional/docs/webhooks/)). This option is suited for real-time, event-based data integration. +**2. Webhook:** Webhook or Data Forwarding to push data from MailChimp to +external systems +([see docs](https://mailchimp.com/developer/transactional/docs/webhooks/)). This +option is suited for real-time, event-based data integration. ## Authentication -When integrating with Mailchimp via OpenFn, authentication via **API Key** is supported ([see MC docs](https://mailchimp.com/developer/marketing/docs/fundamentals/#connecting-to-the-api). See this adaptor's [Configuration docs](/adaptors/packages/mailchimp-configuration-schema) for more on the required authentication parameters. +When integrating with Mailchimp via OpenFn, authentication via **API Key** is +supported +([see MC docs](https://mailchimp.com/developer/marketing/docs/fundamentals/#connecting-to-the-api). +See this adaptor's +[Configuration docs](/adaptors/packages/mailchimp-configuration-schema) for more +on the required authentication parameters. -See platform docs on [managing credentials](/documentation/manage-projects/manage-credentials) for how to configure a credential in OpenFn. If working locally or if using a Raw JSON credential type, then your configuration will look something like this: +See platform docs on +[managing credentials](/documentation/manage-projects/manage-credentials) for +how to configure a credential in OpenFn. If working locally or if using a Raw +JSON credential type, then your configuration will look something like this: ``` { @@ -28,16 +46,22 @@ See platform docs on [managing credentials](/documentation/manage-projects/manag ``` ### Helpful Links + 1. [Developer Portal](https://mailchimp.com/developer/) 2. [API Reference](https://mailchimp.com/developer/marketing/) 3. [Webhook Setup Guide](https://mailchimp.com/developer/marketing/guides/set-up-webhooks/) ### Implementation Examples -1. GIFE Project - Mailchimp -> Salesforce sync: [https://github.com/OpenFn/gife](https://github.com/OpenFn/gife) +1. GIFE Project - Mailchimp -> Salesforce sync: + [https://github.com/OpenFn/gife](https://github.com/OpenFn/gife) ### I've noticed a problem with this Adaptor, or something is out of date, what can I do? -Thanks for asking! We are a fully Open Source Digital Public Good, and we welcome contributions from our community. Check out our [Adaptors Wiki](https://github.com/OpenFn/adaptors/blob/main/wiki/index.md) for more information on how you can update Adaptors! +Thanks for asking! We are a fully Open Source Digital Public Good, and we +welcome contributions from our community. Check out our +[Adaptors Wiki](https://github.com/OpenFn/adaptors/blob/main/wiki/index.md) for +more information on how you can update Adaptors! -Or, you can always reach out to the Community through our [Community Forum here](https://community.openfn.org/). +Or, you can always reach out to the Community through our +[Community Forum here](https://community.openfn.org/). diff --git a/adaptors/mailgun.md b/adaptors/mailgun.md index ccf8c916a539..c3866220b70e 100644 --- a/adaptors/mailgun.md +++ b/adaptors/mailgun.md @@ -4,22 +4,38 @@ title: Mailgun Adaptor ## About Mailgun -[Mailgun](https://www.mailgun.com/) is an email delivery service designed for developers and provides APIs for sending, receiving, and tracking emails. +[Mailgun](https://www.mailgun.com/) is an email delivery service designed for +developers and provides APIs for sending, receiving, and tracking emails. ## Integration Options Mailgun supports 2 primary integration options with OpenFn: -1. **Rest API:** Mailgun has a REST API that enables external services like OpenFn to pull data from Mailgun, or push data from external apps to Mailgun. This option is suited for scheduled, bulk syncs or workflows that must update data in Mailgun with external information. See [functions](/adaptors/packages/mailgun-docs) for more on how to use this adaptor to work with the API. +1. **Rest API:** Mailgun has a REST API that enables external services like + OpenFn to pull data from Mailgun, or push data from external apps to Mailgun. + This option is suited for scheduled, bulk syncs or workflows that must update + data in Mailgun with external information. See + [functions](/adaptors/packages/mailgun-docs) for more on how to use this + adaptor to work with the API. -2. **Webhook:** Webhook or Data Forwarding to push data from Mailgun to external systems (see [docs](https://documentation.mailgun.com/docs/mailgun/user-manual/tracking-messages/#webhooks)). This option is suited for real-time, event-based data integration. +2. **Webhook:** Webhook or Data Forwarding to push data from Mailgun to external + systems (see + [docs](https://documentation.mailgun.com/docs/mailgun/user-manual/tracking-messages/#webhooks)). + This option is suited for real-time, event-based data integration. ## Authentication -1. See [Mailgun docs](https://developers.google.com/gmail/api/auth/scopes) for the latest on supported authentication methods. -2. When integrating with Mailgun via OpenFn, there is one primary authentication method that is supported: **API Key**. See this adaptor's [Configuration docs](/adaptors/packages/mailgun-configuration-schema) for more on the required authentication parameters. +1. See [Mailgun docs](https://developers.google.com/gmail/api/auth/scopes) for + the latest on supported authentication methods. +2. When integrating with Mailgun via OpenFn, there is one primary authentication + method that is supported: **API Key**. See this adaptor's + [Configuration docs](/adaptors/packages/mailgun-configuration-schema) for + more on the required authentication parameters. -See platform docs on [managing credentials](/documentation/manage-projects/manage-credentials) for how to configure a credential in OpenFn. If working locally or if using a Raw JSON credential type, then your configuration will look something like this: +See platform docs on +[managing credentials](/documentation/manage-projects/manage-credentials) for +how to configure a credential in OpenFn. If working locally or if using a Raw +JSON credential type, then your configuration will look something like this: ``` { @@ -36,6 +52,10 @@ See platform docs on [managing credentials](/documentation/manage-projects/manag ### I've noticed a problem with this Adaptor, or something is out of date, what can I do? -Thanks for asking! We are a fully Open Source Digital Public Good, and we welcome contributions from our community. Check out our [Adaptors Wiki](https://github.com/OpenFn/adaptors/blob/main/wiki/index.md) for more information on how you can update Adaptors! +Thanks for asking! We are a fully Open Source Digital Public Good, and we +welcome contributions from our community. Check out our +[Adaptors Wiki](https://github.com/OpenFn/adaptors/blob/main/wiki/index.md) for +more information on how you can update Adaptors! -Or, you can always reach out to the Community through our [Community Forum here](https://community.openfn.org/). +Or, you can always reach out to the Community through our +[Community Forum here](https://community.openfn.org/). diff --git a/adaptors/maximo.md b/adaptors/maximo.md index 6ba4becaf74b..2cb053396019 100644 --- a/adaptors/maximo.md +++ b/adaptors/maximo.md @@ -4,13 +4,24 @@ title: Maximo Adaptor ## About Maximo -[IBM Maximo Application Suite](https://www.ibm.com/products/maximo) is the industry-leading Enterprise Asset Management (EAM) solution designed to manage critical assets, reduce downtime, and improve operational efficiency. Built on decades of industry expertise, Maximo provides end-to-end management of assets from procurement and maintenance to decommissioning, ensuring optimal performance throughout the entire asset lifecycle. +[IBM Maximo Application Suite](https://www.ibm.com/products/maximo) is the +industry-leading Enterprise Asset Management (EAM) solution designed to manage +critical assets, reduce downtime, and improve operational efficiency. Built on +decades of industry expertise, Maximo provides end-to-end management of assets +from procurement and maintenance to decommissioning, ensuring optimal +performance throughout the entire asset lifecycle. -Maximo is essential for organizations managing critical infrastructure, manufacturing equipment, facilities, and transportation assets across industries including energy, utilities, manufacturing, government, and transportation. +Maximo is essential for organizations managing critical infrastructure, +manufacturing equipment, facilities, and transportation assets across industries +including energy, utilities, manufacturing, government, and transportation. ## Integration Options -**REST API**: IBM Maximo provides comprehensive REST API access through the Maximo REST API, enabling external applications to interact with asset data, work orders, inventory, and maintenance schedules. The API supports full CRUD operations and integrates with Maximo's workflow engine for automated business processes. +**REST API**: IBM Maximo provides comprehensive REST API access through the +Maximo REST API, enabling external applications to interact with asset data, +work orders, inventory, and maintenance schedules. The API supports full CRUD +operations and integrates with Maximo's workflow engine for automated business +processes. ## Authentication @@ -25,12 +36,11 @@ Maximo uses HTTP basic authentication for API access: ``` **Authentication Components:** + - **baseUrl**: Your Maximo instance base URL - **username**: Maximo user account with appropriate API permissions - **password**: User account password - - ## Helpful Links - [OpenFn Maximo Adaptor Configuration](https://docs.openfn.org/adaptors/packages/maximo-configuration-schema) @@ -38,6 +48,10 @@ Maximo uses HTTP basic authentication for API access: ### I've noticed a problem with this Adaptor, or something is out of date, what can I do? -Thanks for asking! We are a fully Open Source Digital Public Good, and we welcome contributions from our community. Check out our [Adaptors Wiki](https://github.com/OpenFn/adaptors/blob/main/wiki/index.md) for more information on how you can update Adaptors! +Thanks for asking! We are a fully Open Source Digital Public Good, and we +welcome contributions from our community. Check out our +[Adaptors Wiki](https://github.com/OpenFn/adaptors/blob/main/wiki/index.md) for +more information on how you can update Adaptors! -Or, you can always reach out to the Community through our [Community Forum here](https://community.openfn.org/). +Or, you can always reach out to the Community through our +[Community Forum here](https://community.openfn.org/). diff --git a/adaptors/medicmobile.md b/adaptors/medicmobile.md index c3aee67c9195..0129796ef38f 100644 --- a/adaptors/medicmobile.md +++ b/adaptors/medicmobile.md @@ -4,32 +4,48 @@ title: Medicmobile Adaptor ## About Medicmobile -[Medicmobile](https://medic.org/about/) is a nonprofit that builds the open-source Community Health Toolkit (CHT) and partners with governments and NGOs to equip community health workers, often in hard-to-reach areas with offline-first tools for case management, decision support, and health analytics. +[Medicmobile](https://medic.org/about/) is a nonprofit that builds the +open-source Community Health Toolkit (CHT) and partners with governments and +NGOs to equip community health workers, often in hard-to-reach areas with +offline-first tools for case management, decision support, and health analytics. ## Integration Options -Rest API: Medicmobile has a REST API that enables external services like OpenFn to pull data from Medicmobile, or push data from external apps to Medicmobile. This option is suited for scheduled, bulk syncs or workflows that must update data in Medicmobile with external information. See [functions](/adaptors/packages/medicmobile-docs) for more on how to use this adaptor to work with the API. +Rest API: Medicmobile has a REST API that enables external services like OpenFn +to pull data from Medicmobile, or push data from external apps to Medicmobile. +This option is suited for scheduled, bulk syncs or workflows that must update +data in Medicmobile with external information. See +[functions](/adaptors/packages/medicmobile-docs) for more on how to use this +adaptor to work with the API. ## Authentication -See [Medicmobile docs](https://docs.communityhealthtoolkit.org/building/reference/api/#replication-limit) for the latest on supported authentication methods. -[See our configuration docs](/adaptors/packages/medicmobile-configuration-schema) to learn more. +See +[Medicmobile docs](https://docs.communityhealthtoolkit.org/building/reference/api/#replication-limit) +for the latest on supported authentication methods. +[See our configuration docs](/adaptors/packages/medicmobile-configuration-schema) +to learn more. -See platform docs on [managing credentials](/documentation/manage-projects/manage-credentials) for how to configure a credential in OpenFn. If working locally or if using a Raw JSON credential type, then your configuration will look something like this: +See platform docs on +[managing credentials](/documentation/manage-projects/manage-credentials) for +how to configure a credential in OpenFn. If working locally or if using a Raw +JSON credential type, then your configuration will look something like this: ```json - { "server": "https://standard.app.medicmobile.org", "username": "admin", "password": "@super(!)Secret", "db": "medic" } - ``` ### I've noticed a problem with this Adaptor, or something is out of date, what can I do? -Thanks for asking! We are a fully Open Source Digital Public Good, and we welcome contributions from our community. Check out our [Adaptors Wiki](https://github.com/OpenFn/adaptors/blob/main/wiki/index.md) for more information on how you can update Adaptors! +Thanks for asking! We are a fully Open Source Digital Public Good, and we +welcome contributions from our community. Check out our +[Adaptors Wiki](https://github.com/OpenFn/adaptors/blob/main/wiki/index.md) for +more information on how you can update Adaptors! -Or, you can always reach out to the Community through our [Community Forum here](https://community.openfn.org/). +Or, you can always reach out to the Community through our +[Community Forum here](https://community.openfn.org/). diff --git a/adaptors/memento.md b/adaptors/memento.md index 29ef18f74e6c..9e70086aa8e0 100644 --- a/adaptors/memento.md +++ b/adaptors/memento.md @@ -4,20 +4,31 @@ title: Memento Database Adaptor ## About Memento Database -[Memento Database](https://mementodatabase.com/) is a powerful, customizable database application that enables users to organize any type of data with a no-code approach. +[Memento Database](https://mementodatabase.com/) is a powerful, customizable +database application that enables users to organize any type of data with a +no-code approach. ## Integration Options Memento Database supports REST API integration with OpenFn: -**REST API**: Memento Database provides a Cloud API that enables external services like OpenFn to interact with libraries (databases), entries (records), and files. This API allows you to create, read, update, and delete records, manage database structures, and synchronize data programmatically. +**REST API**: Memento Database provides a Cloud API that enables external +services like OpenFn to interact with libraries (databases), entries (records), +and files. This API allows you to create, read, update, and delete records, +manage database structures, and synchronize data programmatically. ## Authentication -1. See [Memento Database API docs](https://mementodatabase.docs.apiary.io/) for the latest on supported authentication methods. -2. When integrating with Memento Database via OpenFn, the primary authentication method is **API Key**. You can generate an API key from your Memento Database account settings. +1. See [Memento Database API docs](https://mementodatabase.docs.apiary.io/) for + the latest on supported authentication methods. +2. When integrating with Memento Database via OpenFn, the primary authentication + method is **API Key**. You can generate an API key from your Memento Database + account settings. -See platform docs on [managing credentials](/documentation/manage-projects/manage-credentials) for how to configure a credential in OpenFn. If working locally or if using a Raw JSON credential type, then your configuration will look something like this: +See platform docs on +[managing credentials](/documentation/manage-projects/manage-credentials) for +how to configure a credential in OpenFn. If working locally or if using a Raw +JSON credential type, then your configuration will look something like this: ```json { @@ -31,13 +42,16 @@ See platform docs on [managing credentials](/documentation/manage-projects/manag 1. [Memento Cloud API Documentation](https://mementodatabase.docs.apiary.io/) 2. [Memento Database Official Website](https://mementodatabase.com/) - ### Implementation Examples _Coming soon!_ #### I've noticed a problem with this Adaptor, or something is out of date, what can I do? -Thanks for asking! We are a fully Open Source Digital Public Good, and we welcome contributions from our community. Check out our [Adaptors Wiki](https://github.com/OpenFn/adaptors/blob/main/wiki/index.md) for more information on how you can update Adaptors! +Thanks for asking! We are a fully Open Source Digital Public Good, and we +welcome contributions from our community. Check out our +[Adaptors Wiki](https://github.com/OpenFn/adaptors/blob/main/wiki/index.md) for +more information on how you can update Adaptors! -Or, you can always reach out to the Community through our [Community Forum here](https://community.openfn.org/). \ No newline at end of file +Or, you can always reach out to the Community through our +[Community Forum here](https://community.openfn.org/). diff --git a/adaptors/mogli.md b/adaptors/mogli.md index 0928dc8dd78c..5d7743acbf53 100644 --- a/adaptors/mogli.md +++ b/adaptors/mogli.md @@ -4,14 +4,23 @@ title: Mogli Adaptor ## About Mogli -Mogli is a mobile messaging platform that enables SMS communication and management through its API. The platform provides capabilities for sending, receiving, and managing SMS messages, making it suitable for organizations that need reliable mobile messaging integration for notifications, alerts, and two-way communication workflows. +Mogli is a mobile messaging platform that enables SMS communication and +management through its API. The platform provides capabilities for sending, +receiving, and managing SMS messages, making it suitable for organizations that +need reliable mobile messaging integration for notifications, alerts, and +two-way communication workflows. - -Mogli is particularly useful for organizations needing mobile engagement capabilities, emergency notifications, field communication, and customer outreach via SMS. +Mogli is particularly useful for organizations needing mobile engagement +capabilities, emergency notifications, field communication, and customer +outreach via SMS. ## Integration Options -**REST API**: Mogli provides a REST API that enables external applications to send SMS messages, receive inbound messages, and manage communication workflows. The API supports authentication through multiple security layers including username/password, security tokens, and API secrets for comprehensive access control. +**REST API**: Mogli provides a REST API that enables external applications to +send SMS messages, receive inbound messages, and manage communication workflows. +The API supports authentication through multiple security layers including +username/password, security tokens, and API secrets for comprehensive access +control. ## Authentication @@ -28,14 +37,15 @@ Mogli uses multiple authentication components for secure API access: ``` **Authentication Components:** + - **loginUrl**: The Mogli API endpoint URL - **username**: Your Mogli account username - **password**: Your Mogli account password - **securityToken**: Base64-encoded security token for API access - **secret**: Additional secret key for enhanced security -All API requests require this multi-layer authentication approach to ensure secure message transmission. - +All API requests require this multi-layer authentication approach to ensure +secure message transmission. ## Helpful Links @@ -44,6 +54,10 @@ All API requests require this multi-layer authentication approach to ensure secu ### I've noticed a problem with this Adaptor, or something is out of date, what can I do? -Thanks for asking! We are a fully Open Source Digital Public Good, and we welcome contributions from our community. Check out our [Adaptors Wiki](https://github.com/OpenFn/adaptors/blob/main/wiki/index.md) for more information on how you can update Adaptors! +Thanks for asking! We are a fully Open Source Digital Public Good, and we +welcome contributions from our community. Check out our +[Adaptors Wiki](https://github.com/OpenFn/adaptors/blob/main/wiki/index.md) for +more information on how you can update Adaptors! -Or, you can always reach out to the Community through our [Community Forum here](https://community.openfn.org/). +Or, you can always reach out to the Community through our +[Community Forum here](https://community.openfn.org/). diff --git a/adaptors/mojatax.md b/adaptors/mojatax.md index bd11f800c9cf..48406052cab2 100644 --- a/adaptors/mojatax.md +++ b/adaptors/mojatax.md @@ -48,10 +48,13 @@ something like this: - Mojatax API documentation on Postman: https://documenter.getpostman.com/view/5385860/2s93RMVao6#intro - ### I've noticed a problem with this Adaptor, or something is out of date, what can I do? -Thanks for asking! We are a fully Open Source Digital Public Good, and we welcome contributions from our community. Check out our [Adaptors Wiki](https://github.com/OpenFn/adaptors/blob/main/wiki/index.md) for more information on how you can update Adaptors! +Thanks for asking! We are a fully Open Source Digital Public Good, and we +welcome contributions from our community. Check out our +[Adaptors Wiki](https://github.com/OpenFn/adaptors/blob/main/wiki/index.md) for +more information on how you can update Adaptors! -Or, you can always reach out to the Community through our [Community Forum here](https://community.openfn.org/). +Or, you can always reach out to the Community through our +[Community Forum here](https://community.openfn.org/). diff --git a/adaptors/mongodb.md b/adaptors/mongodb.md index ec839f92c3e5..ca883d3b564f 100644 --- a/adaptors/mongodb.md +++ b/adaptors/mongodb.md @@ -4,18 +4,29 @@ title: MongoDB Adaptor ## About MongoDB -[MongoDB](https://www.mongodb.com/) is a NoSQL, document-oriented database that stores data in BSON (Binary JSON) format, enabling easy storage and retrieval of complex and hierarchical data structures +[MongoDB](https://www.mongodb.com/) is a NoSQL, document-oriented database that +stores data in BSON (Binary JSON) format, enabling easy storage and retrieval of +complex and hierarchical data structures ## Integration Options -The `mongodb` adaptor provides direct database connections for accessing data and executing SQL and standard database operations. See [functions](/adaptors/packages/mongodb-docs) for more on how to use this adaptor. - +The `mongodb` adaptor provides direct database connections for accessing data +and executing SQL and standard database operations. See +[functions](/adaptors/packages/mongodb-docs) for more on how to use this +adaptor. ## Authentication -See the [MongoDB docs](https://www.mongodb.com/docs/) for the latest on supported authentication methods. When integrating with a MongoDB database via OpenFn, you authenticate via SSH using authorized database credentials. See this adaptor's [configuration docs](/adaptors/packages/mongodb-configuration-schema) for more on the required authentication parameters. +See the [MongoDB docs](https://www.mongodb.com/docs/) for the latest on +supported authentication methods. When integrating with a MongoDB database via +OpenFn, you authenticate via SSH using authorized database credentials. See this +adaptor's [configuration docs](/adaptors/packages/mongodb-configuration-schema) +for more on the required authentication parameters. -See platform docs on [managing credentials](/documentation/manage-projects/manage-credentials) for how to configure a credential in OpenFn. If working locally or if using a Raw JSON credential type, then your configuration will look something like this: +See platform docs on +[managing credentials](/documentation/manage-projects/manage-credentials) for +how to configure a credential in OpenFn. If working locally or if using a Raw +JSON credential type, then your configuration will look something like this: ``` { @@ -31,6 +42,10 @@ See platform docs on [managing credentials](/documentation/manage-projects/manag ### I've noticed a problem with this Adaptor, or something is out of date, what can I do? -Thanks for asking! We are a fully Open Source Digital Public Good, and we welcome contributions from our community. Check out our [Adaptors Wiki](https://github.com/OpenFn/adaptors/blob/main/wiki/index.md) for more information on how you can update Adaptors! +Thanks for asking! We are a fully Open Source Digital Public Good, and we +welcome contributions from our community. Check out our +[Adaptors Wiki](https://github.com/OpenFn/adaptors/blob/main/wiki/index.md) for +more information on how you can update Adaptors! -Or, you can always reach out to the Community through our [Community Forum here](https://community.openfn.org/). +Or, you can always reach out to the Community through our +[Community Forum here](https://community.openfn.org/). diff --git a/adaptors/moodle.md b/adaptors/moodle.md index d1b7c585d8c9..0445cd9867e9 100644 --- a/adaptors/moodle.md +++ b/adaptors/moodle.md @@ -118,6 +118,10 @@ fn(state => { ### I've noticed a problem with this Adaptor, or something is out of date, what can I do? -Thanks for asking! We are a fully Open Source Digital Public Good, and we welcome contributions from our community. Check out our [Adaptors Wiki](https://github.com/OpenFn/adaptors/blob/main/wiki/index.md) for more information on how you can update Adaptors! +Thanks for asking! We are a fully Open Source Digital Public Good, and we +welcome contributions from our community. Check out our +[Adaptors Wiki](https://github.com/OpenFn/adaptors/blob/main/wiki/index.md) for +more information on how you can update Adaptors! -Or, you can always reach out to the Community through our [Community Forum here](https://community.openfn.org/). +Or, you can always reach out to the Community through our +[Community Forum here](https://community.openfn.org/). diff --git a/adaptors/motherduck.md b/adaptors/motherduck.md index 636bdd38ea06..a7887804cf01 100644 --- a/adaptors/motherduck.md +++ b/adaptors/motherduck.md @@ -4,21 +4,36 @@ title: MotherDuck Adaptor ## About MotherDuck -[MotherDuck](https://motherduck.com) is a serverless cloud data warehouse built on DuckDB that makes big data feel small. It combines the power of DuckDB's analytical engine with cloud scalability, offering ultra-fast analytics without the operational complexity of traditional data warehouses. +[MotherDuck](https://motherduck.com) is a serverless cloud data warehouse built +on DuckDB that makes big data feel small. It combines the power of DuckDB's +analytical engine with cloud scalability, offering ultra-fast analytics without +the operational complexity of traditional data warehouses. ## Integration Options MotherDuck supports REST API integration with OpenFn: -**REST API**: MotherDuck provides API access that enables external services like OpenFn to interact with cloud databases, execute SQL queries, and manage data warehousing operations. See [functions](/adaptors/packages/motherduck-docs) for more on how to use this adaptor to work with the MotherDuck API. +**REST API**: MotherDuck provides API access that enables external services like +OpenFn to interact with cloud databases, execute SQL queries, and manage data +warehousing operations. See [functions](/adaptors/packages/motherduck-docs) for +more on how to use this adaptor to work with the MotherDuck API. ## Authentication -1. See [MotherDuck docs](https://motherduck.com/docs/getting-started/interfaces/client-apis/connect-query-from-python/installation-authentication/) for the latest on supported authentication methods. -2. When integrating with MotherDuck via OpenFn, the primary authentication method is **Token**. You can generate a token from your MotherDuck account settings. -3. See this adaptor's [Configuration docs](/adaptors/packages/motherduck-configuration-schema) for more on the required authentication parameters. - -See platform docs on [managing credentials](/documentation/manage-projects/manage-credentials) for how to configure a credential in OpenFn. If working locally or if using a Raw JSON credential type, then your configuration will look something like this: +1. See + [MotherDuck docs](https://motherduck.com/docs/getting-started/interfaces/client-apis/connect-query-from-python/installation-authentication/) + for the latest on supported authentication methods. +2. When integrating with MotherDuck via OpenFn, the primary authentication + method is **Token**. You can generate a token from your MotherDuck account + settings. +3. See this adaptor's + [Configuration docs](/adaptors/packages/motherduck-configuration-schema) for + more on the required authentication parameters. + +See platform docs on +[managing credentials](/documentation/manage-projects/manage-credentials) for +how to configure a credential in OpenFn. If working locally or if using a Raw +JSON credential type, then your configuration will look something like this: ```json { @@ -39,6 +54,10 @@ _Coming soon!_ #### I've noticed a problem with this Adaptor, or something is out of date, what can I do? -Thanks for asking! We are a fully Open Source Digital Public Good, and we welcome contributions from our community. Check out our [Adaptors Wiki](https://github.com/OpenFn/adaptors/blob/main/wiki/index.md) for more information on how you can update Adaptors! +Thanks for asking! We are a fully Open Source Digital Public Good, and we +welcome contributions from our community. Check out our +[Adaptors Wiki](https://github.com/OpenFn/adaptors/blob/main/wiki/index.md) for +more information on how you can update Adaptors! -Or, you can always reach out to the Community through our [Community Forum here](https://community.openfn.org/). \ No newline at end of file +Or, you can always reach out to the Community through our +[Community Forum here](https://community.openfn.org/). diff --git a/adaptors/mpesa.md b/adaptors/mpesa.md index c28b64dd1161..de0ff2200b11 100644 --- a/adaptors/mpesa.md +++ b/adaptors/mpesa.md @@ -4,27 +4,37 @@ title: Mpesa Adaptor ## About Mpesa -[Mpesa](https://developer.safaricom.co.ke/Documentation) is a mobile money transfer service in Kenya that allows users to store and transfer money through their mobile phones. +[Mpesa](https://developer.safaricom.co.ke/Documentation) is a mobile money +transfer service in Kenya that allows users to store and transfer money through +their mobile phones. ## Integration Options -**Rest API:** Mpesa offers a REST API that enables external applications to interact with its services. This option is ideal for applications requiring scheduled or bulk synchronization with Mpesa. Refer to the Mpesa REST API [documentation](https://developer.safaricom.co.ke/Documentation) for detailed guidelines on endpoints and payload formats. +**Rest API:** Mpesa offers a REST API that enables external applications to +interact with its services. This option is ideal for applications requiring +scheduled or bulk synchronization with Mpesa. Refer to the Mpesa REST API +[documentation](https://developer.safaricom.co.ke/Documentation) for detailed +guidelines on endpoints and payload formats. ## Authentication -See [Mpesa docs](https://developer.safaricom.co.ke/Documentation) for the latest on supported authentication methods. -[See our configuration docs](/adaptors/packages/mpesa-configuration-schema) to learn more. -See platform docs on [managing credentials](/documentation/manage-projects/manage-credentials) for how to configure a credential in OpenFn. If working locally or if using a Raw JSON credential type, then your configuration will look something like this: +See [Mpesa docs](https://developer.safaricom.co.ke/Documentation) for the latest +on supported authentication methods. +[See our configuration docs](/adaptors/packages/mpesa-configuration-schema) to +learn more. -```json +See platform docs on +[managing credentials](/documentation/manage-projects/manage-credentials) for +how to configure a credential in OpenFn. If working locally or if using a Raw +JSON credential type, then your configuration will look something like this: +```json { "short_code": "654321", "pass_key": "bfb279f9aa9bdbcf158e97dd71a467cd2e0c893059b10f78e6b72ada1ed2c919", "consumer_key": "GA2PNftcXvv2uC2VdgNjxXyvF8eZ4td6iBsL7N7N2ZFnXzf3", "consumer_secret": "zKjr2j0jjihCtzIwzGtgnV0YgP82jZf1hY9RW6HygntWG6AGuf4tAUe3E5tPtiyA" } - ``` ### Helpful Links @@ -33,6 +43,10 @@ See platform docs on [managing credentials](/documentation/manage-projects/manag ### I've noticed a problem with this Adaptor, or something is out of date, what can I do? -Thanks for asking! We are a fully Open Source Digital Public Good, and we welcome contributions from our community. Check out our [Adaptors Wiki](https://github.com/OpenFn/adaptors/blob/main/wiki/index.md) for more information on how you can update Adaptors! +Thanks for asking! We are a fully Open Source Digital Public Good, and we +welcome contributions from our community. Check out our +[Adaptors Wiki](https://github.com/OpenFn/adaptors/blob/main/wiki/index.md) for +more information on how you can update Adaptors! -Or, you can always reach out to the Community through our [Community Forum here](https://community.openfn.org/). +Or, you can always reach out to the Community through our +[Community Forum here](https://community.openfn.org/). diff --git a/adaptors/msgraph.md b/adaptors/msgraph.md index d19b09b999ee..ace10938b7c1 100644 --- a/adaptors/msgraph.md +++ b/adaptors/msgraph.md @@ -99,6 +99,10 @@ and/or consult with your system administrator.** ### I've noticed a problem with this Adaptor, or something is out of date, what can I do? -Thanks for asking! We are a fully Open Source Digital Public Good, and we welcome contributions from our community. Check out our [Adaptors Wiki](https://github.com/OpenFn/adaptors/blob/main/wiki/index.md) for more information on how you can update Adaptors! +Thanks for asking! We are a fully Open Source Digital Public Good, and we +welcome contributions from our community. Check out our +[Adaptors Wiki](https://github.com/OpenFn/adaptors/blob/main/wiki/index.md) for +more information on how you can update Adaptors! -Or, you can always reach out to the Community through our [Community Forum here](https://community.openfn.org/). +Or, you can always reach out to the Community through our +[Community Forum here](https://community.openfn.org/). diff --git a/adaptors/mssql.md b/adaptors/mssql.md index 9cd4b160eff4..8ad0208fd0d2 100644 --- a/adaptors/mssql.md +++ b/adaptors/mssql.md @@ -4,18 +4,31 @@ title: MSSQL Adaptor ## About MSSQL -[Microsoft SQL Server](https://learn.microsoft.com/en-us/sql/?view=sql-server-ver16) (MSSQL) is a relational database management system (RDBMS) developed by Microsoft. It supports a wide variety of applications, including data warehousing, transaction processing, and business intelligence. It can be accessed and manipulated using SQL to extract or load data. +[Microsoft SQL Server](https://learn.microsoft.com/en-us/sql/?view=sql-server-ver16) +(MSSQL) is a relational database management system (RDBMS) developed by +Microsoft. It supports a wide variety of applications, including data +warehousing, transaction processing, and business intelligence. It can be +accessed and manipulated using SQL to extract or load data. ## Integration Options -The `mssql` adaptor provides direct database connections for accessing data and executing SQL and standard database operations. See [functions](/adaptors/packages/mssql-docs) for more on how to use this adaptor. - +The `mssql` adaptor provides direct database connections for accessing data and +executing SQL and standard database operations. See +[functions](/adaptors/packages/mssql-docs) for more on how to use this adaptor. ## Authentication -See [MSSQL docs](https://learn.microsoft.com/en-us/sql/?view=sql-server-ver16) for the latest on supported authentication methods. When integrating with an MSSQL database via OpenFn, you authenticate via SSH using authorized database credentials. See this adaptor's [Configuration docs](/adaptors/packages/mssql-configuration-schema) for more on the required authentication parameters. +See [MSSQL docs](https://learn.microsoft.com/en-us/sql/?view=sql-server-ver16) +for the latest on supported authentication methods. When integrating with an +MSSQL database via OpenFn, you authenticate via SSH using authorized database +credentials. See this adaptor's +[Configuration docs](/adaptors/packages/mssql-configuration-schema) for more on +the required authentication parameters. -See platform docs on [managing credentials](/documentation/manage-projects/manage-credentials) for how to configure a credential in OpenFn. If working locally or if using a Raw JSON credential type, then your configuration will look something like this: +See platform docs on +[managing credentials](/documentation/manage-projects/manage-credentials) for +how to configure a credential in OpenFn. If working locally or if using a Raw +JSON credential type, then your configuration will look something like this: ``` { @@ -32,6 +45,10 @@ See platform docs on [managing credentials](/documentation/manage-projects/manag ### I've noticed a problem with this Adaptor, or something is out of date, what can I do? -Thanks for asking! We are a fully Open Source Digital Public Good, and we welcome contributions from our community. Check out our [Adaptors Wiki](https://github.com/OpenFn/adaptors/blob/main/wiki/index.md) for more information on how you can update Adaptors! +Thanks for asking! We are a fully Open Source Digital Public Good, and we +welcome contributions from our community. Check out our +[Adaptors Wiki](https://github.com/OpenFn/adaptors/blob/main/wiki/index.md) for +more information on how you can update Adaptors! -Or, you can always reach out to the Community through our [Community Forum here](https://community.openfn.org/). +Or, you can always reach out to the Community through our +[Community Forum here](https://community.openfn.org/). diff --git a/adaptors/msupply.md b/adaptors/msupply.md index 5a9b2e2fe742..8138ea241f09 100644 --- a/adaptors/msupply.md +++ b/adaptors/msupply.md @@ -4,27 +4,35 @@ title: Msupply Adaptor ## About Msupply -Msupply is an open source software that is used to automate pharmaceutical supply chain systems. +Msupply is an open source software that is used to automate pharmaceutical +supply chain systems. ## Integration Options -GraphQL API: Msupply has a GraphQL API that enables external services like OpenFn to pull data from Msupply, or push data from external apps to Msupply. Refer to the Msupply GRraphQL API [documentation](https://docs.msupply.foundation/docs/developer/graphql/) for detailed guidelines on endpoints and payload formats. +GraphQL API: Msupply has a GraphQL API that enables external services like +OpenFn to pull data from Msupply, or push data from external apps to Msupply. +Refer to the Msupply GRraphQL API +[documentation](https://docs.msupply.foundation/docs/developer/graphql/) for +detailed guidelines on endpoints and payload formats. ## Authentication -See [Msupply docs](https://docs.msupply.foundation/docs/developer/graphql/) for the latest on supported authentication methods. -[See our configuration docs](/adaptors/packages/msupply-configuration-schema) to learn more. +See [Msupply docs](https://docs.msupply.foundation/docs/developer/graphql/) for +the latest on supported authentication methods. +[See our configuration docs](/adaptors/packages/msupply-configuration-schema) to +learn more. -See platform docs on [managing credentials](/documentation/manage-projects/manage-credentials) for how to configure a credential in OpenFn. If working locally or if using a Raw JSON credential type, then your configuration will look something like this: +See platform docs on +[managing credentials](/documentation/manage-projects/manage-credentials) for +how to configure a credential in OpenFn. If working locally or if using a Raw +JSON credential type, then your configuration will look something like this: ```json - { "password": "@some(!)Str0ngp4ss0w0rd", "username": "test@openfn.org", "baseUrl": "https://example.com" } - ``` ### Helpful Links @@ -33,6 +41,10 @@ See platform docs on [managing credentials](/documentation/manage-projects/manag ### I've noticed a problem with this Adaptor, or something is out of date, what can I do? -Thanks for asking! We are a fully Open Source Digital Public Good, and we welcome contributions from our community. Check out our [Adaptors Wiki](https://github.com/OpenFn/adaptors/blob/main/wiki/index.md) for more information on how you can update Adaptors! +Thanks for asking! We are a fully Open Source Digital Public Good, and we +welcome contributions from our community. Check out our +[Adaptors Wiki](https://github.com/OpenFn/adaptors/blob/main/wiki/index.md) for +more information on how you can update Adaptors! -Or, you can always reach out to the Community through our [Community Forum here](https://community.openfn.org/). +Or, you can always reach out to the Community through our +[Community Forum here](https://community.openfn.org/). diff --git a/adaptors/mtn-momo.md b/adaptors/mtn-momo.md index a4e7b66647e0..0b511f4cb1c6 100644 --- a/adaptors/mtn-momo.md +++ b/adaptors/mtn-momo.md @@ -4,16 +4,24 @@ title: MTN-Momo Adaptor ## About Mtn-Momo -[Mtn-Momo](https://momodeveloper.mtn.com/api-documentation/api-description) is a mobile money transfer service in Kenya that allows users to store and transfer money through their mobile phones. +[Mtn-Momo](https://momodeveloper.mtn.com/api-documentation/api-description) is a +mobile money transfer service in Kenya that allows users to store and transfer +money through their mobile phones. ## Integration Options -**Rest API:** Mtn-Momo offers a REST API that enables external applications to interact with its services. Refer to the Mtn-Momo REST API [documentation](https://momodeveloper.mtn.com/api-documentation/getting-started) for detailed guidelines on endpoints and payload formats. +**Rest API:** Mtn-Momo offers a REST API that enables external applications to +interact with its services. Refer to the Mtn-Momo REST API +[documentation](https://momodeveloper.mtn.com/api-documentation/getting-started) +for detailed guidelines on endpoints and payload formats. ## Authentication -See [Mtn-Momo docs](https://momodeveloper.mtn.com/api-documentation/api-description) for the latest on supported authentication methods. -[See our configuration docs](/adaptors/packages/mtn-momo-configuration-schema) to learn more. +See +[Mtn-Momo docs](https://momodeveloper.mtn.com/api-documentation/api-description) +for the latest on supported authentication methods. +[See our configuration docs](/adaptors/packages/mtn-momo-configuration-schema) +to learn more. Mtn-Momo supports two primary authentication methods: @@ -21,17 +29,18 @@ Mtn-Momo supports two primary authentication methods: 2. **API User and API Key** -See platform docs on [managing credentials](/documentation/manage-projects/manage-credentials) for how to configure a credential in OpenFn. If working locally or if using a Raw JSON credential type, then your configuration will look something like this: +See platform docs on +[managing credentials](/documentation/manage-projects/manage-credentials) for +how to configure a credential in OpenFn. If working locally or if using a Raw +JSON credential type, then your configuration will look something like this: ```json - { "api_key": "630ee209443d787927b08b3c57902", "api_user": "630ee209443d787927b08b3c57902", "subscription_key": "630ee209443d787927b08b3c57902", "baseUrl": "https://sandbox.momodeveloper.mtn.com/" } - ``` ### Helpful Links @@ -40,6 +49,10 @@ See platform docs on [managing credentials](/documentation/manage-projects/manag ### I've noticed a problem with this Adaptor, or something is out of date, what can I do? -Thanks for asking! We are a fully Open Source Digital Public Good, and we welcome contributions from our community. Check out our [Adaptors Wiki](https://github.com/OpenFn/adaptors/blob/main/wiki/index.md) for more information on how you can update Adaptors! +Thanks for asking! We are a fully Open Source Digital Public Good, and we +welcome contributions from our community. Check out our +[Adaptors Wiki](https://github.com/OpenFn/adaptors/blob/main/wiki/index.md) for +more information on how you can update Adaptors! -Or, you can always reach out to the Community through our [Community Forum here](https://community.openfn.org/). +Or, you can always reach out to the Community through our +[Community Forum here](https://community.openfn.org/). diff --git a/adaptors/mysql.md b/adaptors/mysql.md index b3fddf9632db..014ca8c137ec 100644 --- a/adaptors/mysql.md +++ b/adaptors/mysql.md @@ -4,18 +4,27 @@ title: MySQL Adaptor ## About MySQL -MySQL is a free and open-source relational database management system. It can be accessed and manipulated using SQL to extract or load data. +MySQL is a free and open-source relational database management system. It can be +accessed and manipulated using SQL to extract or load data. ## Integration Options -The `mysql` adaptor provides direct database connections for accessing data and executing SQL and standard database operations. See [functions](/adaptors/packages/mysql-docs) for more on how to use this adaptor. - +The `mysql` adaptor provides direct database connections for accessing data and +executing SQL and standard database operations. See +[functions](/adaptors/packages/mysql-docs) for more on how to use this adaptor. ## Authentication -See the [MySQL docs](https://dev.mysql.com/doc/) for the latest on supported authentication methods. When integrating with a MySQL database via OpenFn, you authenticate via SSH using authorized database credentials. See this adaptor's [configuration docs](/adaptors/packages/mysql-configuration-schema) for more on the required authentication parameters. +See the [MySQL docs](https://dev.mysql.com/doc/) for the latest on supported +authentication methods. When integrating with a MySQL database via OpenFn, you +authenticate via SSH using authorized database credentials. See this adaptor's +[configuration docs](/adaptors/packages/mysql-configuration-schema) for more on +the required authentication parameters. -See platform docs on [managing credentials](/documentation/manage-projects/manage-credentials) for how to configure a credential in OpenFn. If working locally or if using a Raw JSON credential type, then your configuration will look something like this: +See platform docs on +[managing credentials](/documentation/manage-projects/manage-credentials) for +how to configure a credential in OpenFn. If working locally or if using a Raw +JSON credential type, then your configuration will look something like this: ``` { @@ -32,6 +41,10 @@ See platform docs on [managing credentials](/documentation/manage-projects/manag ### I've noticed a problem with this Adaptor, or something is out of date, what can I do? -Thanks for asking! We are a fully Open Source Digital Public Good, and we welcome contributions from our community. Check out our [Adaptors Wiki](https://github.com/OpenFn/adaptors/blob/main/wiki/index.md) for more information on how you can update Adaptors! +Thanks for asking! We are a fully Open Source Digital Public Good, and we +welcome contributions from our community. Check out our +[Adaptors Wiki](https://github.com/OpenFn/adaptors/blob/main/wiki/index.md) for +more information on how you can update Adaptors! -Or, you can always reach out to the Community through our [Community Forum here](https://community.openfn.org/). +Or, you can always reach out to the Community through our +[Community Forum here](https://community.openfn.org/). diff --git a/adaptors/nexmo.md b/adaptors/nexmo.md index b2166cbaf33b..23b2e61a6884 100644 --- a/adaptors/nexmo.md +++ b/adaptors/nexmo.md @@ -4,17 +4,28 @@ title: Nexmo Adaptor ## About Nexmo -[Nexmo](https://www.vonage.com/) (now part of Vonage) is a leading cloud communications platform that provides APIs for SMS, voice, video, and messaging services. Vonage's Communication APIs enable developers to embed real-time communications capabilities into applications, websites, and business workflows with global reach and enterprise-grade reliability. +[Nexmo](https://www.vonage.com/) (now part of Vonage) is a leading cloud +communications platform that provides APIs for SMS, voice, video, and messaging +services. Vonage's Communication APIs enable developers to embed real-time +communications capabilities into applications, websites, and business workflows +with global reach and enterprise-grade reliability. -Nexmo/Vonage is particularly valuable for businesses needing reliable global communications, customer engagement platforms, authentication systems, and omnichannel messaging solutions. +Nexmo/Vonage is particularly valuable for businesses needing reliable global +communications, customer engagement platforms, authentication systems, and +omnichannel messaging solutions. ## Integration Options -**REST API**: Nexmo provides comprehensive REST APIs for all communication services, enabling developers to send SMS messages, make voice calls, verify phone numbers, and access detailed analytics. The APIs support multiple authentication methods and provide real-time delivery status and detailed reporting. +**REST API**: Nexmo provides comprehensive REST APIs for all communication +services, enabling developers to send SMS messages, make voice calls, verify +phone numbers, and access detailed analytics. The APIs support multiple +authentication methods and provide real-time delivery status and detailed +reporting. ## Authentication -Nexmo uses API key and secret-based authentication for accessing communication services: +Nexmo uses API key and secret-based authentication for accessing communication +services: ```json { @@ -24,10 +35,12 @@ Nexmo uses API key and secret-based authentication for accessing communication s ``` **Authentication Components:** + - **apiKey**: Your Nexmo API key for identifying your account - **apiSecret**: Your Nexmo API secret for authenticating requests -API credentials can be obtained from the Vonage Dashboard and provide access to all Nexmo communication services. +API credentials can be obtained from the Vonage Dashboard and provide access to +all Nexmo communication services. ## Helpful Links @@ -38,6 +51,10 @@ API credentials can be obtained from the Vonage Dashboard and provide access to ### I've noticed a problem with this Adaptor, or something is out of date, what can I do? -Thanks for asking! We are a fully Open Source Digital Public Good, and we welcome contributions from our community. Check out our [Adaptors Wiki](https://github.com/OpenFn/adaptors/blob/main/wiki/index.md) for more information on how you can update Adaptors! +Thanks for asking! We are a fully Open Source Digital Public Good, and we +welcome contributions from our community. Check out our +[Adaptors Wiki](https://github.com/OpenFn/adaptors/blob/main/wiki/index.md) for +more information on how you can update Adaptors! -Or, you can always reach out to the Community through our [Community Forum here](https://community.openfn.org/). +Or, you can always reach out to the Community through our +[Community Forum here](https://community.openfn.org/). diff --git a/adaptors/ocl.md b/adaptors/ocl.md index 23847510d391..7d3b702958c4 100644 --- a/adaptors/ocl.md +++ b/adaptors/ocl.md @@ -4,21 +4,46 @@ title: OCL Adaptor ## About OCL -[OCL (Open Concept Lab)](https://openconceptlab.org/) is an open-source platform that provides a collaborative environment for creating, managing, and sharing standardized healthcare terminologies, dictionaries, and value sets. +[OCL (Open Concept Lab)](https://openconceptlab.org/) is an open-source platform +that provides a collaborative environment for creating, managing, and sharing +standardized healthcare terminologies, dictionaries, and value sets. -Relationships between concepts are defined in OCL as `mappings`. The API supports searching and editing concepts and mappings, building `sources`, and logically grouping concepts and mappings into `collections`. [See OCL docs](https://docs.openconceptlab.org/en/latest/oclapi/overview.html#overview) to learn more, access the [Swagger API](https://api.openconceptlab.org/swagger/), and to learn more about the cloud instance available at [https://openconceptlab.org](https://openconceptlab.org). +Relationships between concepts are defined in OCL as `mappings`. The API +supports searching and editing concepts and mappings, building `sources`, and +logically grouping concepts and mappings into `collections`. +[See OCL docs](https://docs.openconceptlab.org/en/latest/oclapi/overview.html#overview) +to learn more, access the +[Swagger API](https://api.openconceptlab.org/swagger/), and to learn more about +the cloud instance available at +[https://openconceptlab.org](https://openconceptlab.org). ## Integration Options -**1. Rest API:** OCL offers a REST API that allows systems to interact with its concept dictionaries and value sets. With the API, you can: -This option is suited for scheduled synchronization or workflows requiring regular updates to or from OCL. Refer to the [OCL REST API documentation](https://docs.openconceptlab.org/en/latest/oclapi/overview.html) for endpoint details and usage examples. +**1. Rest API:** OCL offers a REST API that allows systems to interact with its +concept dictionaries and value sets. With the API, you can: This option is +suited for scheduled synchronization or workflows requiring regular updates to +or from OCL. Refer to the +[OCL REST API documentation](https://docs.openconceptlab.org/en/latest/oclapi/overview.html) +for endpoint details and usage examples. -**2. Bulk Export and Import**: OCL supports exporting and importing concept dictionaries and value sets in various formats (e.g., JSON, CSV). This allows for manual or automated bulk data integration. Use this option for one-time data transfer or systems without direct API connectivity. +**2. Bulk Export and Import**: OCL supports exporting and importing concept +dictionaries and value sets in various formats (e.g., JSON, CSV). This allows +for manual or automated bulk data integration. Use this option for one-time data +transfer or systems without direct API connectivity. ## Authentication -When integrating with OCL via OpenFn, you must provide a username and password to generate an authorization token ([see OCL docs](https://docs.openconceptlab.org/en/latest/oclapi/overview.html#authentication-and-authorization)). See this adaptor's [Configuration docs](/adaptors/packages/ocl-configuration-schema) for more on the required authentication parameters. -See platform docs on [managing credentials](/documentation/manage-projects/manage-credentials) for how to configure a credential in OpenFn. If working locally or if using a Raw JSON credential type, then your configuration will look something like this: +When integrating with OCL via OpenFn, you must provide a username and password +to generate an authorization token +([see OCL docs](https://docs.openconceptlab.org/en/latest/oclapi/overview.html#authentication-and-authorization)). +See this adaptor's +[Configuration docs](/adaptors/packages/ocl-configuration-schema) for more on +the required authentication parameters. + +See platform docs on +[managing credentials](/documentation/manage-projects/manage-credentials) for +how to configure a credential in OpenFn. If working locally or if using a Raw +JSON credential type, then your configuration will look something like this: ``` { @@ -27,18 +52,25 @@ See platform docs on [managing credentials](/documentation/manage-projects/manag "password": "supersecretpassword" } ``` + ## Helpful Links + 1. [OCL Developer Guide](https://docs.openconceptlab.org/) 2. [OCL API Reference](https://docs.openconceptlab.org/en/latest/oclapi/apireference/index.html) 3. [OCL Community Support](https://openconceptlab.org/category/community/) 4. [OCL GitHub Repository](https://github.com/OpenConceptLab) - ## Implementation Examples -1. OpenFn Prototype for Médecins Sans Frontières (MSF) LIME Project - OpenMRS -> OCL -> DHIS2 sync: https://github.com/OpenFn/openfn-lime + +1. OpenFn Prototype for Médecins Sans Frontières (MSF) LIME Project - OpenMRS -> + OCL -> DHIS2 sync: https://github.com/OpenFn/openfn-lime ### I've noticed a problem with this Adaptor, or something is out of date, what can I do? -Thanks for asking! We are a fully Open Source Digital Public Good, and we welcome contributions from our community. Check out our [Adaptors Wiki](https://github.com/OpenFn/adaptors/blob/main/wiki/index.md) for more information on how you can update Adaptors! +Thanks for asking! We are a fully Open Source Digital Public Good, and we +welcome contributions from our community. Check out our +[Adaptors Wiki](https://github.com/OpenFn/adaptors/blob/main/wiki/index.md) for +more information on how you can update Adaptors! -Or, you can always reach out to the Community through our [Community Forum here](https://community.openfn.org/). +Or, you can always reach out to the Community through our +[Community Forum here](https://community.openfn.org/). diff --git a/adaptors/odk.md b/adaptors/odk.md index 03175cb5eac5..4313497f262a 100644 --- a/adaptors/odk.md +++ b/adaptors/odk.md @@ -42,14 +42,16 @@ Every time this job runs it will get of all submissions and write them to "name": "Alice" } ], - "response": { - /* ODK response headers, code and context*/ - } + "response": {/* ODK response headers, code and context*/} } ``` ### I've noticed a problem with this Adaptor, or something is out of date, what can I do? -Thanks for asking! We are a fully Open Source Digital Public Good, and we welcome contributions from our community. Check out our [Adaptors Wiki](https://github.com/OpenFn/adaptors/blob/main/wiki/index.md) for more information on how you can update Adaptors! +Thanks for asking! We are a fully Open Source Digital Public Good, and we +welcome contributions from our community. Check out our +[Adaptors Wiki](https://github.com/OpenFn/adaptors/blob/main/wiki/index.md) for +more information on how you can update Adaptors! -Or, you can always reach out to the Community through our [Community Forum here](https://community.openfn.org/). +Or, you can always reach out to the Community through our +[Community Forum here](https://community.openfn.org/). diff --git a/adaptors/odoo.md b/adaptors/odoo.md index 836b8ffafa83..cc0ae201e253 100644 --- a/adaptors/odoo.md +++ b/adaptors/odoo.md @@ -4,24 +4,45 @@ title: Odoo Adaptor ## About Odoo -[Odoo](https://odoo.com/) is a marketing automation platform that allows businesses to design, send, and manage email campaigns. It also provides tools for audience management, analytics, and integrations with other platforms to support marketing efforts. +[Odoo](https://odoo.com/) is a marketing automation platform that allows +businesses to design, send, and manage email campaigns. It also provides tools +for audience management, analytics, and integrations with other platforms to +support marketing efforts. ## Integration Options Odoo supports two primary integration options with OpenFn: -**1. Direct DB Connection:** This is what _this_ adaptor supports to directly connect to your Odoo database. +**1. Direct DB Connection:** This is what _this_ adaptor supports to directly +connect to your Odoo database. -**2. Rest API:** Odoo offers a REST API that enables external applications to interact with its services, but this is a *paid option/may require an additional plugin*. This option is ideal for applications requiring scheduled or bulk synchronization with Odoo. Refer to the Odoo REST API [documentation](https://www.odoo.com/documentation/16.0/developer/api/external_api.html) for detailed guidelines on endpoints and payload formats. +**2. Rest API:** Odoo offers a REST API that enables external applications to +interact with its services, but this is a _paid option/may require an additional +plugin_. This option is ideal for applications requiring scheduled or bulk +synchronization with Odoo. Refer to the Odoo REST API +[documentation](https://www.odoo.com/documentation/16.0/developer/api/external_api.html) +for detailed guidelines on endpoints and payload formats. -**3. Webhook:** Webhook or Data Forwarding to push data from Odoo to external systems ([see docs](https://www.odoo.com/documentation/16.0/developer/reference/webhooks.html)). This option is suited for real-time, event-based data integration. +**3. Webhook:** Webhook or Data Forwarding to push data from Odoo to external +systems +([see docs](https://www.odoo.com/documentation/16.0/developer/reference/webhooks.html)). +This option is suited for real-time, event-based data integration. ## Authentication -1. See [Odoo docs](https://www.odoo.com/documentation/16.0/developer/misc/api/odoo.html) for the latest on supported authentication methods. -2. When integrating with Odoo via OpenFn, authentication via **User Credentials** is supported. -3. See this adaptor's [Configuration docs](/adaptors/packages/odoo-configuration-schema) for more on the required authentication parameters. -See platform docs on [managing credentials](/documentation/manage-projects/manage-credentials) for how to configure a credential in OpenFn. If working locally or if using a Raw JSON credential type, then your configuration will look something like this: +1. See + [Odoo docs](https://www.odoo.com/documentation/16.0/developer/misc/api/odoo.html) + for the latest on supported authentication methods. +2. When integrating with Odoo via OpenFn, authentication via **User + Credentials** is supported. +3. See this adaptor's + [Configuration docs](/adaptors/packages/odoo-configuration-schema) for more + on the required authentication parameters. + +See platform docs on +[managing credentials](/documentation/manage-projects/manage-credentials) for +how to configure a credential in OpenFn. If working locally or if using a Raw +JSON credential type, then your configuration will look something like this: ``` { @@ -33,16 +54,21 @@ See platform docs on [managing credentials](/documentation/manage-projects/manag ``` ### Helpful Links + 1. [Odoo Developer Portal](https://www.odoo.com/documentation) 2. [API Reference](https://www.odoo.com/documentation/16.0/developer/api/external_api.html) 3. [Webhook Setup Guide](https://www.odoo.com/documentation/16.0/developer/reference/webhooks.html) - + ### Implementation Examples _Coming soon!_ ### I've noticed a problem with this Adaptor, or something is out of date, what can I do? -Thanks for asking! We are a fully Open Source Digital Public Good, and we welcome contributions from our community. Check out our [Adaptors Wiki](https://github.com/OpenFn/adaptors/blob/main/wiki/index.md) for more information on how you can update Adaptors! +Thanks for asking! We are a fully Open Source Digital Public Good, and we +welcome contributions from our community. Check out our +[Adaptors Wiki](https://github.com/OpenFn/adaptors/blob/main/wiki/index.md) for +more information on how you can update Adaptors! -Or, you can always reach out to the Community through our [Community Forum here](https://community.openfn.org/). +Or, you can always reach out to the Community through our +[Community Forum here](https://community.openfn.org/). diff --git a/adaptors/ona.md b/adaptors/ona.md index 2a4a62aac281..7fb4ac1c8db3 100644 --- a/adaptors/ona.md +++ b/adaptors/ona.md @@ -17,10 +17,13 @@ that walks users through webhook creation. will forward data as JSON. 6. Check to see that, once a form is submitted, it is forwarded to your OpenFn inbox. - ### I've noticed a problem with this Adaptor, or something is out of date, what can I do? -Thanks for asking! We are a fully Open Source Digital Public Good, and we welcome contributions from our community. Check out our [Adaptors Wiki](https://github.com/OpenFn/adaptors/blob/main/wiki/index.md) for more information on how you can update Adaptors! +Thanks for asking! We are a fully Open Source Digital Public Good, and we +welcome contributions from our community. Check out our +[Adaptors Wiki](https://github.com/OpenFn/adaptors/blob/main/wiki/index.md) for +more information on how you can update Adaptors! -Or, you can always reach out to the Community through our [Community Forum here](https://community.openfn.org/). +Or, you can always reach out to the Community through our +[Community Forum here](https://community.openfn.org/). diff --git a/adaptors/openboxes.md b/adaptors/openboxes.md index 80f2d8c371b2..077775706b41 100644 --- a/adaptors/openboxes.md +++ b/adaptors/openboxes.md @@ -4,27 +4,38 @@ title: OpenBoxes Adaptor ## About OpenBoxes -[OpenBoxes](https://openboxes.com/about/) is an open-source supply chain and inventory management system, born after the 2010 Haiti earthquak. Built for low-resource healthcare and disaster-relief settings, with features like inventory, lot/expiry and shipment tracking, purchase orders, requisitions, and customizable reports. +[OpenBoxes](https://openboxes.com/about/) is an open-source supply chain and +inventory management system, born after the 2010 Haiti earthquak. Built for +low-resource healthcare and disaster-relief settings, with features like +inventory, lot/expiry and shipment tracking, purchase orders, requisitions, and +customizable reports. ## Integration Options -**Rest API:** OpenBoxes offers a REST API that enables external applications to interact with its services. Refer to the OpenBoxes REST API [documentation](https://docs.openboxes.com/en/develop/api-guide/getting-started/) for detailed guidelines on endpoints and payload formats. +**Rest API:** OpenBoxes offers a REST API that enables external applications to +interact with its services. Refer to the OpenBoxes REST API +[documentation](https://docs.openboxes.com/en/develop/api-guide/getting-started/) +for detailed guidelines on endpoints and payload formats. ## Authentication -See [OpenBoxes docs](https://docs.openboxes.com/en/develop/api-guide/getting-started/) for the latest on supported authentication methods. -[See our configuration docs](/adaptors/packages/openboxes-configuration-schema) to learn more. +See +[OpenBoxes docs](https://docs.openboxes.com/en/develop/api-guide/getting-started/) +for the latest on supported authentication methods. +[See our configuration docs](/adaptors/packages/openboxes-configuration-schema) +to learn more. -See platform docs on [managing credentials](/documentation/manage-projects/manage-credentials) for how to configure a credential in OpenFn. If working locally or if using a Raw JSON credential type, then your configuration will look something like this: +See platform docs on +[managing credentials](/documentation/manage-projects/manage-credentials) for +how to configure a credential in OpenFn. If working locally or if using a Raw +JSON credential type, then your configuration will look something like this: ```json - { "password": "@some(!)Str0ngp4ss0w0rd", "username": "test@openfn.org", "baseUrl": "https://demo.openboxes.com/openboxes/api" } - ``` ### Helpful Links @@ -33,6 +44,10 @@ See platform docs on [managing credentials](/documentation/manage-projects/manag ### I've noticed a problem with this Adaptor, or something is out of date, what can I do? -Thanks for asking! We are a fully Open Source Digital Public Good, and we welcome contributions from our community. Check out our [Adaptors Wiki](https://github.com/OpenFn/adaptors/blob/main/wiki/index.md) for more information on how you can update Adaptors! +Thanks for asking! We are a fully Open Source Digital Public Good, and we +welcome contributions from our community. Check out our +[Adaptors Wiki](https://github.com/OpenFn/adaptors/blob/main/wiki/index.md) for +more information on how you can update Adaptors! -Or, you can always reach out to the Community through our [Community Forum here](https://community.openfn.org/). +Or, you can always reach out to the Community through our +[Community Forum here](https://community.openfn.org/). diff --git a/adaptors/opencrvs.md b/adaptors/opencrvs.md index e2f81e87923f..e4921e655542 100644 --- a/adaptors/opencrvs.md +++ b/adaptors/opencrvs.md @@ -63,6 +63,10 @@ JSON credential type, then your configuration will look something like this: ### I've noticed a problem with this Adaptor, or something is out of date, what can I do? -Thanks for asking! We are a fully Open Source Digital Public Good, and we welcome contributions from our community. Check out our [Adaptors Wiki](https://github.com/OpenFn/adaptors/blob/main/wiki/index.md) for more information on how you can update Adaptors! +Thanks for asking! We are a fully Open Source Digital Public Good, and we +welcome contributions from our community. Check out our +[Adaptors Wiki](https://github.com/OpenFn/adaptors/blob/main/wiki/index.md) for +more information on how you can update Adaptors! -Or, you can always reach out to the Community through our [Community Forum here](https://community.openfn.org/). +Or, you can always reach out to the Community through our +[Community Forum here](https://community.openfn.org/). diff --git a/adaptors/openelis.md b/adaptors/openelis.md index 6863f4daca42..a7affda94553 100644 --- a/adaptors/openelis.md +++ b/adaptors/openelis.md @@ -3,24 +3,34 @@ title: OpenELIS Adaptor --- ## About OpenELIS -OpenELIS (Open Enterprise Laboratory Information System) Global is an open-source, web-based software designed to manage laboratory workflows, specifically tailored for public health and reference laboratories in low- and middle-income countries. It automates laboratory processes—from sample tracking to reporting—supporting ISO and SLIPTA quality standards. + +OpenELIS (Open Enterprise Laboratory Information System) Global is an +open-source, web-based software designed to manage laboratory workflows, +specifically tailored for public health and reference laboratories in low- and +middle-income countries. It automates laboratory processes—from sample tracking +to reporting—supporting ISO and SLIPTA quality standards. ## Integration Options -OpenELIS has an available REST API. See [functions](/adaptors/packages/openelis-docs) for more on how to use this adaptor to work with the API. -Visit the [OpenELIS homepage](https://openelis.org/) for more details. +OpenELIS has an available REST API. See +[functions](/adaptors/packages/openelis-docs) for more on how to use this +adaptor to work with the API. Visit the +[OpenELIS homepage](https://openelis.org/) for more details. ## Authentication -Users must specify a `baseUrl`, `username` and `password`. The `username` and `password` are then encoded into a basic authentication header and sent as part of every HTTP request. + +Users must specify a `baseUrl`, `username` and `password`. The `username` and +`password` are then encoded into a basic authentication header and sent as part +of every HTTP request. OpenFn users can use the `OpenELIS` credential type when [creating a credential](/documentation/manage-projects/manage-credentials). -See the adaptor's [configuration schema docs](/adaptors/packages/openelis-configuration-schema) +See the adaptor's +[configuration schema docs](/adaptors/packages/openelis-configuration-schema) -If working locally or -if using a `Raw JSON` credential type, then your configuration will look -something like this: +If working locally or if using a `Raw JSON` credential type, then your +configuration will look something like this: ```json { @@ -32,8 +42,10 @@ something like this: ### I've noticed a problem with this Adaptor, or something is out of date, what can I do? -Thanks for asking! We are a fully Open Source Digital Public Good, and we welcome contributions from our community. Check out our [Adaptors Wiki](https://github.com/OpenFn/adaptors/blob/main/wiki/index.md) for more information on how you can update Adaptors! - -Or, you can always reach out to the Community through our [Community Forum here](https://community.openfn.org/). - +Thanks for asking! We are a fully Open Source Digital Public Good, and we +welcome contributions from our community. Check out our +[Adaptors Wiki](https://github.com/OpenFn/adaptors/blob/main/wiki/index.md) for +more information on how you can update Adaptors! +Or, you can always reach out to the Community through our +[Community Forum here](https://community.openfn.org/). diff --git a/adaptors/openfn.md b/adaptors/openfn.md index 3cbc12f0027b..b21e12bd6330 100644 --- a/adaptors/openfn.md +++ b/adaptors/openfn.md @@ -4,12 +4,19 @@ title: OpenFn Adaptor ## About OpenFn -[OpenFn](https://www.openfn.org/) is an open-source data integration platform designed to automate workflows and connect health and humanitarian systems. The platform enables organizations to build, deploy, and monitor automated data pipelines that sync data between different systems, trigger workflows based on incoming data, and transform information across various formats and standards. - +[OpenFn](https://www.openfn.org/) is an open-source data integration platform +designed to automate workflows and connect health and humanitarian systems. The +platform enables organizations to build, deploy, and monitor automated data +pipelines that sync data between different systems, trigger workflows based on +incoming data, and transform information across various formats and standards. ## Integration Options -**REST API**: The OpenFn adaptor provides access to OpenFn's v1 API, enabling programmatic management of jobs, triggers, credentials, and workflow executions. This allows for automation of OpenFn platform operations, monitoring workflow performance, and integrating OpenFn capabilities into external applications and dashboards. +**REST API**: The OpenFn adaptor provides access to OpenFn's v1 API, enabling +programmatic management of jobs, triggers, credentials, and workflow executions. +This allows for automation of OpenFn platform operations, monitoring workflow +performance, and integrating OpenFn capabilities into external applications and +dashboards. ## Authentication @@ -23,10 +30,12 @@ The OpenFn adaptor uses API token authentication to access the OpenFn platform: ``` **Authentication Components:** + - **baseUrl**: The OpenFn platform URL (defaults to https://app.openfn.org) - **access_token**: Your OpenFn API token for authentication -API tokens can be generated from your OpenFn account settings and provide programmatic access to your projects and workflows. +API tokens can be generated from your OpenFn account settings and provide +programmatic access to your projects and workflows. ### Making API Requests @@ -41,17 +50,20 @@ request({ }); // Create a new job -request({ - method: 'post', - path: 'jobs', - data: { - trigger_id: 1, - expression: 'steps()', +request( + { + method: 'post', + path: 'jobs', + data: { + trigger_id: 1, + expression: 'steps()', + }, }, -}, state => { - console.log('Job created successfully!'); - return state; -}); + state => { + console.log('Job created successfully!'); + return state; + } +); ``` ## Helpful Links @@ -61,6 +73,10 @@ request({ ### I've noticed a problem with this Adaptor, or something is out of date, what can I do? -Thanks for asking! We are a fully Open Source Digital Public Good, and we welcome contributions from our community. Check out our [Adaptors Wiki](https://github.com/OpenFn/adaptors/blob/main/wiki/index.md) for more information on how you can update Adaptors! +Thanks for asking! We are a fully Open Source Digital Public Good, and we +welcome contributions from our community. Check out our +[Adaptors Wiki](https://github.com/OpenFn/adaptors/blob/main/wiki/index.md) for +more information on how you can update Adaptors! -Or, you can always reach out to the Community through our [Community Forum here](https://community.openfn.org/). +Or, you can always reach out to the Community through our +[Community Forum here](https://community.openfn.org/). diff --git a/adaptors/openhim.md b/adaptors/openhim.md index 1e6d9fd3d6f1..30d2f97190c6 100644 --- a/adaptors/openhim.md +++ b/adaptors/openhim.md @@ -4,22 +4,39 @@ title: OpenHIM Adaptor ## About OpenHIM -[OpenHIM (Open Health Information Mediator)](https://openhim.org/) is an open-source, middleware solution designed to facilitate interoperability between health information systems. It acts as a mediator, handling data transformation, validation, and routing between various systems. +[OpenHIM (Open Health Information Mediator)](https://openhim.org/) is an +open-source, middleware solution designed to facilitate interoperability between +health information systems. It acts as a mediator, handling data transformation, +validation, and routing between various systems. ## Integration Options OpenHIM supports 2 primary integration options with OpenFn: -1. **Rest API:** OpenHIM has a REST API that enables external services like OpenFn to pull data from OpenHIM, or push data from external apps to OpenHIM. This option is suited for scheduled, bulk syncs or workflows that must update data in OpenHIM with external information. See [functions](/adaptors/packages/openhim-docs) for more on how to use this adaptor to work with the API. +1. **Rest API:** OpenHIM has a REST API that enables external services like + OpenFn to pull data from OpenHIM, or push data from external apps to OpenHIM. + This option is suited for scheduled, bulk syncs or workflows that must update + data in OpenHIM with external information. See + [functions](/adaptors/packages/openhim-docs) for more on how to use this + adaptor to work with the API. -2. **Webhook:** Webhook or Data Forwarding to push data from OpenHIM to external systems (see [docs](https://openhim.org/docs/user-guide/alerting-reports/)). This option is suited for real-time, event-based data integration. +2. **Webhook:** Webhook or Data Forwarding to push data from OpenHIM to external + systems (see [docs](https://openhim.org/docs/user-guide/alerting-reports/)). + This option is suited for real-time, event-based data integration. ## Authentication -1. See [OpenHIM docs](https://openhim.org/documentation) for the latest on supported authentication methods. -2. When integrating with OpenHIM via OpenFn, there is one primary authentication method that is supported: **Basic Authentication**. See this adaptor's [Configuration docs](/adaptors/packages/openhim-configuration-schema) for more on the required authentication parameters. +1. See [OpenHIM docs](https://openhim.org/documentation) for the latest on + supported authentication methods. +2. When integrating with OpenHIM via OpenFn, there is one primary authentication + method that is supported: **Basic Authentication**. See this adaptor's + [Configuration docs](/adaptors/packages/openhim-configuration-schema) for + more on the required authentication parameters. -See platform docs on [managing credentials](/documentation/manage-projects/manage-credentials) for how to configure a credential in OpenFn. If working locally or if using a Raw JSON credential type, then your configuration will look something like this: +See platform docs on +[managing credentials](/documentation/manage-projects/manage-credentials) for +how to configure a credential in OpenFn. If working locally or if using a Raw +JSON credential type, then your configuration will look something like this: ``` { @@ -38,6 +55,10 @@ _Coming soon!_ ### I've noticed a problem with this Adaptor, or something is out of date, what can I do? -Thanks for asking! We are a fully Open Source Digital Public Good, and we welcome contributions from our community. Check out our [Adaptors Wiki](https://github.com/OpenFn/adaptors/blob/main/wiki/index.md) for more information on how you can update Adaptors! +Thanks for asking! We are a fully Open Source Digital Public Good, and we +welcome contributions from our community. Check out our +[Adaptors Wiki](https://github.com/OpenFn/adaptors/blob/main/wiki/index.md) for +more information on how you can update Adaptors! -Or, you can always reach out to the Community through our [Community Forum here](https://community.openfn.org/). +Or, you can always reach out to the Community through our +[Community Forum here](https://community.openfn.org/). diff --git a/adaptors/openimis.md b/adaptors/openimis.md index f1f10877c75c..66d4efd37e49 100644 --- a/adaptors/openimis.md +++ b/adaptors/openimis.md @@ -4,22 +4,42 @@ title: OpenIMIS Adaptor ## About OpenIMIS -[OpenIMIS (Open Insurance Management Information System)](https://openimis.org/) is an open-source software solution designed to manage health financing schemes such as health insurance, results-based financing, and universal health coverage. +[OpenIMIS (Open Insurance Management Information System)](https://openimis.org/) +is an open-source software solution designed to manage health financing schemes +such as health insurance, results-based financing, and universal health +coverage. ## Integration Options OpenIMIS supports 2 primary integration options with OpenFn: -1. **Rest API:** OpenIMIS has a REST API that enables external services like OpenFn to pull data from OpenIMIS, or push data from external apps to OpenIMIS. This option is suited for scheduled, bulk syncs or workflows that must update data in OpenIMIS with external information. See [functions](/adaptors/packages/openimis-docs) for more on how to use this adaptor to work with the API. +1. **Rest API:** OpenIMIS has a REST API that enables external services like + OpenFn to pull data from OpenIMIS, or push data from external apps to + OpenIMIS. This option is suited for scheduled, bulk syncs or workflows that + must update data in OpenIMIS with external information. See + [functions](/adaptors/packages/openimis-docs) for more on how to use this + adaptor to work with the API. -2. **Webhook:** OpenIMIS does not natively support webhooks as a standard feature. However, integrations and custom implementations can enable webhook-like behavior. More details can be found on the OpenMRS [documentation page​](https://wiki.openmrs.org/). +2. **Webhook:** OpenIMIS does not natively support webhooks as a standard + feature. However, integrations and custom implementations can enable + webhook-like behavior. More details can be found on the OpenMRS + [documentation page​](https://wiki.openmrs.org/). ## Authentication -1. See [OpenIMIS docs](https://docs.openimis.org/en/latest/user_manual/user_login/login.html) for the latest on supported authentication methods. -2. When integrating with OpenIMIS via OpenFn, there is one primary authentication method that is supported: **Basic Authentication**. See this adaptor's [Configuration docs](/adaptors/packages/openimis-configuration-schema) for more on the required authentication parameters. +1. See + [OpenIMIS docs](https://docs.openimis.org/en/latest/user_manual/user_login/login.html) + for the latest on supported authentication methods. +2. When integrating with OpenIMIS via OpenFn, there is one primary + authentication method that is supported: **Basic Authentication**. See this + adaptor's + [Configuration docs](/adaptors/packages/openimis-configuration-schema) for + more on the required authentication parameters. -See platform docs on [managing credentials](/documentation/manage-projects/manage-credentials) for how to configure a credential in OpenFn. If working locally or if using a Raw JSON credential type, then your configuration will look something like this: +See platform docs on +[managing credentials](/documentation/manage-projects/manage-credentials) for +how to configure a credential in OpenFn. If working locally or if using a Raw +JSON credential type, then your configuration will look something like this: ``` { @@ -35,13 +55,16 @@ See platform docs on [managing credentials](/documentation/manage-projects/manag 2. [API Reference (REST & GraphQL)](https://openimis.org/api) 3. [Integration Guide](https://openimis.org/integration) - ### Implementation Examples _Coming soon!_ ### I've noticed a problem with this Adaptor, or something is out of date, what can I do? -Thanks for asking! We are a fully Open Source Digital Public Good, and we welcome contributions from our community. Check out our [Adaptors Wiki](https://github.com/OpenFn/adaptors/blob/main/wiki/index.md) for more information on how you can update Adaptors! +Thanks for asking! We are a fully Open Source Digital Public Good, and we +welcome contributions from our community. Check out our +[Adaptors Wiki](https://github.com/OpenFn/adaptors/blob/main/wiki/index.md) for +more information on how you can update Adaptors! -Or, you can always reach out to the Community through our [Community Forum here](https://community.openfn.org/). +Or, you can always reach out to the Community through our +[Community Forum here](https://community.openfn.org/). diff --git a/adaptors/openlmis.md b/adaptors/openlmis.md index d4a0f7475953..a1ddef893a30 100644 --- a/adaptors/openlmis.md +++ b/adaptors/openlmis.md @@ -4,22 +4,46 @@ title: OpenLMIS Adaptor ## About OpenLMIS -[OpenLMIS (Open Logistics Management Information System)](https://openlmis.org/) is an open-source, electronic logistics management information system designed to improve the management and distribution of health commodities. It enables supply chain management, providing visibility and accuracy in inventory tracking, order management, and reporting. - +[OpenLMIS (Open Logistics Management Information System)](https://openlmis.org/) +is an open-source, electronic logistics management information system designed +to improve the management and distribution of health commodities. It enables +supply chain management, providing visibility and accuracy in inventory +tracking, order management, and reporting. ## Integration Options -OpenLMIS v3 uses a micro-services architecture with different services each providing different APIs - [see docs](https://docs.openlmis.org/en/latest/components/). - -**Rest API:** OpenLMIS has a REST API that enables external services like OpenFn to pull data from OpenLMIS, or push data from external apps to OpenLMIS. This option is suited for scheduled, bulk syncs or workflows that must update data in OpenLMIS with external information. See [functions](/adaptors/packages/openlmis-docs) for more on how to use this adaptor to work with the API. -## Authentication +OpenLMIS v3 uses a micro-services architecture with different services each +providing different APIs - +[see docs](https://docs.openlmis.org/en/latest/components/). -1. See [OpenLMIS docs](https://openlmis.github.io/openlmis-api/) for the latest on supported authentication methods. -2. The [Auth Service](https://docs.openlmis.org/en/latest/components/authServiceDesign.html0) in OpenLMIS v3 is a stand-alone micro-service that implements **OAuth 2**. See this adaptor's [Configuration docs](/adaptors/packages/openlmis-configuration-schema) for more on the required authentication parameters. +**Rest API:** OpenLMIS has a REST API that enables external services like OpenFn +to pull data from OpenLMIS, or push data from external apps to OpenLMIS. This +option is suited for scheduled, bulk syncs or workflows that must update data in +OpenLMIS with external information. See +[functions](/adaptors/packages/openlmis-docs) for more on how to use this +adaptor to work with the API. -When configuring your credential, `clientId` and `clientSecret` are required inputs for the authentication. If working with a demo environment, OpenLMIS provides default values for these inputs, which should be changed for any production system. In the below example, we have included these default values available. +## Authentication -See platform docs on [managing credentials](/documentation/manage-projects/manage-credentials) for how to configure a credential in OpenFn. If working locally or if using a Raw JSON credential type, then your configuration will look something like this: +1. See [OpenLMIS docs](https://openlmis.github.io/openlmis-api/) for the latest + on supported authentication methods. +2. The + [Auth Service](https://docs.openlmis.org/en/latest/components/authServiceDesign.html0) + in OpenLMIS v3 is a stand-alone micro-service that implements **OAuth 2**. + See this adaptor's + [Configuration docs](/adaptors/packages/openlmis-configuration-schema) for + more on the required authentication parameters. + +When configuring your credential, `clientId` and `clientSecret` are required +inputs for the authentication. If working with a demo environment, OpenLMIS +provides default values for these inputs, which should be changed for any +production system. In the below example, we have included these default values +available. + +See platform docs on +[managing credentials](/documentation/manage-projects/manage-credentials) for +how to configure a credential in OpenFn. If working locally or if using a Raw +JSON credential type, then your configuration will look something like this: ``` { @@ -33,7 +57,7 @@ See platform docs on [managing credentials](/documentation/manage-projects/manag ### Helpful Links -1. [OpenLMIS Documentation](https://openlmis.org/documentation/) +1. [OpenLMIS Documentation](https://openlmis.org/documentation/) 2. [OpenLMIS API Guide](https://openlmis.github.io/openlmis-api/) 3. [Integration Guide](https://openlmis.org/integration/) @@ -43,6 +67,10 @@ _Coming soon!_ ### I've noticed a problem with this Adaptor, or something is out of date, what can I do? -Thanks for asking! We are a fully Open Source Digital Public Good, and we welcome contributions from our community. Check out our [Adaptors Wiki](https://github.com/OpenFn/adaptors/blob/main/wiki/index.md) for more information on how you can update Adaptors! +Thanks for asking! We are a fully Open Source Digital Public Good, and we +welcome contributions from our community. Check out our +[Adaptors Wiki](https://github.com/OpenFn/adaptors/blob/main/wiki/index.md) for +more information on how you can update Adaptors! -Or, you can always reach out to the Community through our [Community Forum here](https://community.openfn.org/). +Or, you can always reach out to the Community through our +[Community Forum here](https://community.openfn.org/). diff --git a/adaptors/openmrs.md b/adaptors/openmrs.md index a9d3a2844906..75b5f1686ba8 100644 --- a/adaptors/openmrs.md +++ b/adaptors/openmrs.md @@ -179,9 +179,13 @@ fhir.get('Encounter', { 1. OpenFn Prototype for Médecins Sans Frontières (MSF) LIME Project - OpenMRS -> DHIS2 sync: [https://github.com/OpenFn/openfn-lime](https://github.com/OpenFn/openfn-lime) - + ### I've noticed a problem with this Adaptor, or something is out of date, what can I do? -Thanks for asking! We are a fully Open Source Digital Public Good, and we welcome contributions from our community. Check out our [Adaptors Wiki](https://github.com/OpenFn/adaptors/blob/main/wiki/index.md) for more information on how you can update Adaptors! +Thanks for asking! We are a fully Open Source Digital Public Good, and we +welcome contributions from our community. Check out our +[Adaptors Wiki](https://github.com/OpenFn/adaptors/blob/main/wiki/index.md) for +more information on how you can update Adaptors! -Or, you can always reach out to the Community through our [Community Forum here](https://community.openfn.org/). +Or, you can always reach out to the Community through our +[Community Forum here](https://community.openfn.org/). diff --git a/adaptors/openspp.md b/adaptors/openspp.md index 6c46c37a972d..c8d5a66886b5 100644 --- a/adaptors/openspp.md +++ b/adaptors/openspp.md @@ -59,6 +59,10 @@ _Coming soon!_ ### I've noticed a problem with this Adaptor, or something is out of date, what can I do? -Thanks for asking! We are a fully Open Source Digital Public Good, and we welcome contributions from our community. Check out our [Adaptors Wiki](https://github.com/OpenFn/adaptors/blob/main/wiki/index.md) for more information on how you can update Adaptors! +Thanks for asking! We are a fully Open Source Digital Public Good, and we +welcome contributions from our community. Check out our +[Adaptors Wiki](https://github.com/OpenFn/adaptors/blob/main/wiki/index.md) for +more information on how you can update Adaptors! -Or, you can always reach out to the Community through our [Community Forum here](https://community.openfn.org/). +Or, you can always reach out to the Community through our +[Community Forum here](https://community.openfn.org/). diff --git a/adaptors/pdfshift.md b/adaptors/pdfshift.md index 58830057013b..c914f8faa2f1 100644 --- a/adaptors/pdfshift.md +++ b/adaptors/pdfshift.md @@ -42,6 +42,10 @@ JSON credential type, then your configuration will look something like this: ### I've noticed a problem with this Adaptor, or something is out of date, what can I do? -Thanks for asking! We are a fully Open Source Digital Public Good, and we welcome contributions from our community. Check out our [Adaptors Wiki](https://github.com/OpenFn/adaptors/blob/main/wiki/index.md) for more information on how you can update Adaptors! +Thanks for asking! We are a fully Open Source Digital Public Good, and we +welcome contributions from our community. Check out our +[Adaptors Wiki](https://github.com/OpenFn/adaptors/blob/main/wiki/index.md) for +more information on how you can update Adaptors! -Or, you can always reach out to the Community through our [Community Forum here](https://community.openfn.org/). +Or, you can always reach out to the Community through our +[Community Forum here](https://community.openfn.org/). diff --git a/adaptors/pesapal.md b/adaptors/pesapal.md index 56092d6f0eee..8cee1f608de2 100644 --- a/adaptors/pesapal.md +++ b/adaptors/pesapal.md @@ -4,30 +4,46 @@ title: Pesapal Adaptor ## About Pesapal -[Pesapal](https://www.pesapal.com/) is a leading payment gateway service provider in East Africa, enabling businesses to accept payments from customers using various payment methods including mobile money, cards, and bank transfers. Pesapal supports payments in multiple currencies and provides secure, PCI/DSS compliant payment processing for e-commerce platforms, mobile applications, and other digital services. +[Pesapal](https://www.pesapal.com/) is a leading payment gateway service +provider in East Africa, enabling businesses to accept payments from customers +using various payment methods including mobile money, cards, and bank transfers. +Pesapal supports payments in multiple currencies and provides secure, PCI/DSS +compliant payment processing for e-commerce platforms, mobile applications, and +other digital services. ## Integration Options -Pesapal supports integration through its REST API, which enables external services like OpenFn to: +Pesapal supports integration through its REST API, which enables external +services like OpenFn to: -1. **REST API**: Submit payment orders, query transaction status, and manage payment workflows. This option is suited for e-commerce integrations, automated billing systems, or workflows that need to process payments and track their status. See [functions](/adaptors/packages/pesapal-docs) for more on how to use this adaptor to work with the API. +1. **REST API**: Submit payment orders, query transaction status, and manage + payment workflows. This option is suited for e-commerce integrations, + automated billing systems, or workflows that need to process payments and + track their status. See [functions](/adaptors/packages/pesapal-docs) for more + on how to use this adaptor to work with the API. -2. **IPN (Instant Payment Notification)**: Receive real-time notifications when payment status changes. This option is suited for event-based workflows that need immediate updates on payment completion or failure. +2. **IPN (Instant Payment Notification)**: Receive real-time notifications when + payment status changes. This option is suited for event-based workflows that + need immediate updates on payment completion or failure. ## API Versions Pesapal offers multiple API versions: -- **API 3.0 (JSON)**: The current version using JSON REST APIs with Bearer token authentication -- **API 2.0 (XML)**: Legacy version using XML and OAuth 1.0 authentication (deprecated) +- **API 3.0 (JSON)**: The current version using JSON REST APIs with Bearer token + authentication +- **API 2.0 (XML)**: Legacy version using XML and OAuth 1.0 authentication + (deprecated) -This adaptor supports both versions, with API 3.0 being recommended for new integrations. +This adaptor supports both versions, with API 3.0 being recommended for new +integrations. ## Authentication ### API 3.0 Authentication -When integrating with Pesapal API 3.0 via OpenFn, the authentication method uses **Consumer Key and Consumer Secret** to generate a Bearer token: +When integrating with Pesapal API 3.0 via OpenFn, the authentication method uses +**Consumer Key and Consumer Secret** to generate a Bearer token: ```json { @@ -38,10 +54,11 @@ When integrating with Pesapal API 3.0 via OpenFn, the authentication method uses ``` For testing/sandbox environment: + ```json { "baseUrl": "https://cybqa.pesapal.com/pesapalv3", - "consumer_key": "your-sandbox-consumer-key", + "consumer_key": "your-sandbox-consumer-key", "consumer_secret": "your-sandbox-consumer-secret" } ``` @@ -58,17 +75,20 @@ For legacy integrations using API 2.0: } ``` -See this adaptor's [Configuration docs](/adaptors/packages/pesapal-configuration-schema) for more on required authentication parameters. - -See platform docs on [managing credentials](/documentation/manage-projects/manage-credentials) for how to configure a credential in OpenFn. +See this adaptor's +[Configuration docs](/adaptors/packages/pesapal-configuration-schema) for more +on required authentication parameters. +See platform docs on +[managing credentials](/documentation/manage-projects/manage-credentials) for +how to configure a credential in OpenFn. ### Helpful Links 1. [Pesapal API 3.0 Documentation](https://developer.pesapal.com/how-to-integrate/e-commerce/api-30-json/api-reference) -3. [Pesapal Postman Collection](https://documenter.getpostman.com/view/6715320/UyxepTv1) -4. [Test Credentials](https://developer.pesapal.com/api3-demo-keys.txt) -5. [Merchant Registration](https://www.pesapal.com/dashboard/account/register) +2. [Pesapal Postman Collection](https://documenter.getpostman.com/view/6715320/UyxepTv1) +3. [Test Credentials](https://developer.pesapal.com/api3-demo-keys.txt) +4. [Merchant Registration](https://www.pesapal.com/dashboard/account/register) ### Implementation Examples @@ -76,6 +96,10 @@ _Coming soon!_ ### I've noticed a problem with this Adaptor, or something is out of date, what can I do? -Thanks for asking! We are a fully Open Source Digital Public Good, and we welcome contributions from our community. Check out our [Adaptors Wiki](https://github.com/OpenFn/adaptors/blob/main/wiki/index.md) for more information on how you can update Adaptors! +Thanks for asking! We are a fully Open Source Digital Public Good, and we +welcome contributions from our community. Check out our +[Adaptors Wiki](https://github.com/OpenFn/adaptors/blob/main/wiki/index.md) for +more information on how you can update Adaptors! -Or, you can always reach out to the Community through our [Community Forum here](https://community.openfn.org/). +Or, you can always reach out to the Community through our +[Community Forum here](https://community.openfn.org/). diff --git a/adaptors/postgresql.md b/adaptors/postgresql.md index 9c7c2c5116bc..c52a7b87a9b4 100644 --- a/adaptors/postgresql.md +++ b/adaptors/postgresql.md @@ -120,10 +120,13 @@ OpenFn implementations can leverage the https://github.com/OpenFn/consosci 2. Cambodia Primero < > ONA Database: https://github.com/OpenFn/primero-ona-dashboard - ### I've noticed a problem with this Adaptor, or something is out of date, what can I do? -Thanks for asking! We are a fully Open Source Digital Public Good, and we welcome contributions from our community. Check out our [Adaptors Wiki](https://github.com/OpenFn/adaptors/blob/main/wiki/index.md) for more information on how you can update Adaptors! +Thanks for asking! We are a fully Open Source Digital Public Good, and we +welcome contributions from our community. Check out our +[Adaptors Wiki](https://github.com/OpenFn/adaptors/blob/main/wiki/index.md) for +more information on how you can update Adaptors! -Or, you can always reach out to the Community through our [Community Forum here](https://community.openfn.org/). +Or, you can always reach out to the Community through our +[Community Forum here](https://community.openfn.org/). diff --git a/adaptors/powerbi.md b/adaptors/powerbi.md index 2068b6eab51a..c32b7cf1e150 100644 --- a/adaptors/powerbi.md +++ b/adaptors/powerbi.md @@ -6,12 +6,14 @@ title: Power BI ## Overview -[Power BI](https://powerbi.microsoft.com/en-us/) is a business analytics service by Microsoft. It provides interactive -visualizations and business intelligence capabilities with an interface simple -enough for end users to create their own reports and dashboards. +[Power BI](https://powerbi.microsoft.com/en-us/) is a business analytics service +by Microsoft. It provides interactive visualizations and business intelligence +capabilities with an interface simple enough for end users to create their own +reports and dashboards. Note that Power BI does not have a built-in database, rather it connects to many -different data sources (files, databases, etc). For a full list of available data sources, see +different data sources (files, databases, etc). For a full list of available +data sources, see [Power BI data sources](https://docs.microsoft.com/en-us/power-bi/connect-data/power-bi-data-sources). OpenFn has experience setting up databases structured in a way that Power BI can @@ -21,9 +23,9 @@ pull from. An iNGO uses CommCare, Kobo Toolbox and Survey CTO for different maternal health projects in several different geographies. This iNGO would like to use a -business intelligence tool, like Power BI, to create data visualisations for it's -projects' key indicators. To accomplish this, the iNGO uses OpenFn to take the -survey data from CommCare, Kobo Toolbox and Survey CTO and then create a +business intelligence tool, like Power BI, to create data visualisations for +it's projects' key indicators. To accomplish this, the iNGO uses OpenFn to take +the survey data from CommCare, Kobo Toolbox and Survey CTO and then create a structured database from it using MySQL. Once the structured database is established, OpenFn assists the iNGO with connecting this data to Power BI. @@ -36,6 +38,10 @@ above use case. ### I've noticed a problem with this Adaptor, or something is out of date, what can I do? -Thanks for asking! We are a fully Open Source Digital Public Good, and we welcome contributions from our community. Check out our [Adaptors Wiki](https://github.com/OpenFn/adaptors/blob/main/wiki/index.md) for more information on how you can update Adaptors! +Thanks for asking! We are a fully Open Source Digital Public Good, and we +welcome contributions from our community. Check out our +[Adaptors Wiki](https://github.com/OpenFn/adaptors/blob/main/wiki/index.md) for +more information on how you can update Adaptors! -Or, you can always reach out to the Community through our [Community Forum here](https://community.openfn.org/). +Or, you can always reach out to the Community through our +[Community Forum here](https://community.openfn.org/). diff --git a/adaptors/primero.md b/adaptors/primero.md index 8e349ba2bdbe..69733c9bd7e2 100644 --- a/adaptors/primero.md +++ b/adaptors/primero.md @@ -21,7 +21,8 @@ Primero data is primarily stored in **cases**, **services** and **referrals**. Learn more about Primero records using the user guides at the Primero documentation site: https://support.primero.org/documentation -**[See Primero admin guide](https://support.primero.org/assets/books-v2/1sP6VhT70WHhi5ZPbio6EszX-i4jZsBkO/#h.r1lefowgvf0n) for guidance on unique identifiers.** +**[See Primero admin guide](https://support.primero.org/assets/books-v2/1sP6VhT70WHhi5ZPbio6EszX-i4jZsBkO/#h.r1lefowgvf0n) +for guidance on unique identifiers.** ## Integration Use Cases @@ -63,10 +64,11 @@ See the examples section more sample Primero jobs. ### Integration tips - Data forwarding can be enabled in Primero. There is a webhook that can forward - case information to a designated URL endpoint (e.g., OpenFn Inbox). This feature requires a backend configuration update that the Primero support team can help with. The data - forwarding can happen automatically on insert of a new case, as well as - on-demand when a user clicks the `Sync` button (which may be added to the page - layout if this feature is in use). + case information to a designated URL endpoint (e.g., OpenFn Inbox). This + feature requires a backend configuration update that the Primero support team + can help with. The data forwarding can happen automatically on insert of a new + case, as well as on-demand when a user clicks the `Sync` button (which may be + added to the page layout if this feature is in use). - Each Primero `case` has a `case_id` which can be used as an external identifier in the destination system. - Each Primero case also has a `record_id` which is the id in the URL for each @@ -107,9 +109,12 @@ Primero API V1 (to be deprecated). 4. Thailand: UNICEF Primero < > MoPH HIS: https://github.com/OpenFn/primero-thailand - ### I've noticed a problem with this Adaptor, or something is out of date, what can I do? -Thanks for asking! We are a fully Open Source Digital Public Good, and we welcome contributions from our community. Check out our [Adaptors Wiki](https://github.com/OpenFn/adaptors/blob/main/wiki/index.md) for more information on how you can update Adaptors! +Thanks for asking! We are a fully Open Source Digital Public Good, and we +welcome contributions from our community. Check out our +[Adaptors Wiki](https://github.com/OpenFn/adaptors/blob/main/wiki/index.md) for +more information on how you can update Adaptors! -Or, you can always reach out to the Community through our [Community Forum here](https://community.openfn.org/). +Or, you can always reach out to the Community through our +[Community Forum here](https://community.openfn.org/). diff --git a/adaptors/progres.md b/adaptors/progres.md index c56991c6d5e4..dbf56ee480af 100644 --- a/adaptors/progres.md +++ b/adaptors/progres.md @@ -4,17 +4,28 @@ title: ProGres Adaptor ## About ProGres -[ProGres](https://www.unhcr.org/) (Protection Registration and Case Management System) is UNHCR's flagship registration and case management system used globally to manage refugee and person of concern data. ProGres v4 is designed to support UNHCR's protection mandate by facilitating the registration, documentation, and case management of refugees, asylum-seekers, internally displaced persons (IDPs), stateless persons, and other persons of concern. +[ProGres](https://www.unhcr.org/) (Protection Registration and Case Management +System) is UNHCR's flagship registration and case management system used +globally to manage refugee and person of concern data. ProGres v4 is designed to +support UNHCR's protection mandate by facilitating the registration, +documentation, and case management of refugees, asylum-seekers, internally +displaced persons (IDPs), stateless persons, and other persons of concern. -ProGres is essential for UNHCR operations worldwide, serving as the primary system for managing the protection and assistance of displaced populations. +ProGres is essential for UNHCR operations worldwide, serving as the primary +system for managing the protection and assistance of displaced populations. ## Integration Options -**REST API via DTP**: ProGres integrations operate through UNHCR's Data Transfer Platform (DTP), a middleware layer that provides secure API access to ProGres data. The DTP acts as a protective gateway, ensuring data security and compliance with UNHCR's strict data protection protocols. Integration requires SSL certificate-based authentication and API tokens for secure communication. +**REST API via DTP**: ProGres integrations operate through UNHCR's Data Transfer +Platform (DTP), a middleware layer that provides secure API access to ProGres +data. The DTP acts as a protective gateway, ensuring data security and +compliance with UNHCR's strict data protection protocols. Integration requires +SSL certificate-based authentication and API tokens for secure communication. ## Authentication -ProGres integration requires multiple authentication components for secure access through the DTP: +ProGres integration requires multiple authentication components for secure +access through the DTP: ```json { @@ -26,12 +37,14 @@ ProGres integration requires multiple authentication components for secure acces ``` **Authentication Components:** + - **URL**: The DTP endpoint URL for your ProGres instance - **Private Key**: SSL private key for certificate-based authentication - **Certificate**: SSL certificate for secure communication - **Token**: API subscription key for request authorization -All requests must include the subscription key in headers and use SSL certificate authentication for secure data transfer. +All requests must include the subscription key in headers and use SSL +certificate authentication for secure data transfer. ## Helpful Links @@ -40,6 +53,10 @@ All requests must include the subscription key in headers and use SSL certificat ### I've noticed a problem with this Adaptor, or something is out of date, what can I do? -Thanks for asking! We are a fully Open Source Digital Public Good, and we welcome contributions from our community. Check out our [Adaptors Wiki](https://github.com/OpenFn/adaptors/blob/main/wiki/index.md) for more information on how you can update Adaptors! +Thanks for asking! We are a fully Open Source Digital Public Good, and we +welcome contributions from our community. Check out our +[Adaptors Wiki](https://github.com/OpenFn/adaptors/blob/main/wiki/index.md) for +more information on how you can update Adaptors! -Or, you can always reach out to the Community through our [Community Forum here](https://community.openfn.org/). +Or, you can always reach out to the Community through our +[Community Forum here](https://community.openfn.org/). diff --git a/adaptors/rapidpro.md b/adaptors/rapidpro.md index eb3177897c7d..7085ebdd958b 100644 --- a/adaptors/rapidpro.md +++ b/adaptors/rapidpro.md @@ -4,22 +4,39 @@ title: RapidPro Adaptor ## About RapidPro -[RapidPro](https://app.rapidpro.io/) is an open-source platform for building scalable, automated messaging workflows. It is widely used in development and humanitarian contexts for managing communication via SMS, social media, and other messaging channels. - +[RapidPro](https://app.rapidpro.io/) is an open-source platform for building +scalable, automated messaging workflows. It is widely used in development and +humanitarian contexts for managing communication via SMS, social media, and +other messaging channels. ## Integration Options **RapidPro supports two primary integration options:** -**1. Rest API:** RapidPro has an available REST API that enables external services like OpenFn to pull data RapidPro, or push data from external apps to RapidPro. This option suits scheduled, bulk syncs or workflows that must update data in RapidPro with external information. See [functions](/adaptors/packages/rapidpro-docs) for more on how to use this adaptor to work with the API. +**1. Rest API:** RapidPro has an available REST API that enables external +services like OpenFn to pull data RapidPro, or push data from external apps to +RapidPro. This option suits scheduled, bulk syncs or workflows that must update +data in RapidPro with external information. See +[functions](/adaptors/packages/rapidpro-docs) for more on how to use this +adaptor to work with the API. -**2. Webhook:** RapidPro also has a Webhook or Data Forwarding to push data from Rapidpro to external systems. This option is suited for real-time, event-based data integration. Check out the RapidPro [developer documentation](https://docs.rapidpro.io/webhooks/) to learn how to set up a webhook to push data to OpenFn. +**2. Webhook:** RapidPro also has a Webhook or Data Forwarding to push data from +Rapidpro to external systems. This option is suited for real-time, event-based +data integration. Check out the RapidPro +[developer documentation](https://docs.rapidpro.io/webhooks/) to learn how to +set up a webhook to push data to OpenFn. ## Authentication -When integrating with RapidPro via OpenFn, one primary authentication method is supported: **Personal Access Token (PAT)**. See this adaptor's [Configuration docs](/adaptors/packages/rapidpro-configuration-schema) for more on required authentication parameters. +When integrating with RapidPro via OpenFn, one primary authentication method is +supported: **Personal Access Token (PAT)**. See this adaptor's +[Configuration docs](/adaptors/packages/rapidpro-configuration-schema) for more +on required authentication parameters. -See platform docs on [managing credentials](/documentation/manage-projects/manage-credentials) for how to configure a credential in OpenFn. If working locally or if using a Raw JSON credential type, then your configuration will look something like this: +See platform docs on +[managing credentials](/documentation/manage-projects/manage-credentials) for +how to configure a credential in OpenFn. If working locally or if using a Raw +JSON credential type, then your configuration will look something like this: ``` { @@ -35,10 +52,15 @@ See platform docs on [managing credentials](/documentation/manage-projects/manag ### Implementation Examples -1. Sample RapidPro -> DHIS2 sync: [https://github.com/OpenFn/rapidpro-dhis2](https://github.com/OpenFn/rapidpro-dhis2) +1. Sample RapidPro -> DHIS2 sync: + [https://github.com/OpenFn/rapidpro-dhis2](https://github.com/OpenFn/rapidpro-dhis2) ### I've noticed a problem with this Adaptor, or something is out of date, what can I do? -Thanks for asking! We are a fully Open Source Digital Public Good, and we welcome contributions from our community. Check out our [Adaptors Wiki](https://github.com/OpenFn/adaptors/blob/main/wiki/index.md) for more information on how you can update Adaptors! +Thanks for asking! We are a fully Open Source Digital Public Good, and we +welcome contributions from our community. Check out our +[Adaptors Wiki](https://github.com/OpenFn/adaptors/blob/main/wiki/index.md) for +more information on how you can update Adaptors! -Or, you can always reach out to the Community through our [Community Forum here](https://community.openfn.org/). +Or, you can always reach out to the Community through our +[Community Forum here](https://community.openfn.org/). diff --git a/adaptors/redis.md b/adaptors/redis.md index 0a5e75f1a061..2b9dc7427b5f 100644 --- a/adaptors/redis.md +++ b/adaptors/redis.md @@ -4,19 +4,29 @@ title: Redis Adaptor ## About Redis -[Redis (Remote Dictionary Server)](https://redis.io/) is an open-source, in-memory data store used as a database, cache, and message broker. It is commonly used for caching, real-time analytics, session management, and pub/sub messaging. - +[Redis (Remote Dictionary Server)](https://redis.io/) is an open-source, +in-memory data store used as a database, cache, and message broker. It is +commonly used for caching, real-time analytics, session management, and pub/sub +messaging. ## Integration Options -The `redis` adaptor provides direct database connections for accessing data and executing NoSQL and standard database operations. See [functions](/adaptors/packages/redis-docs) for more on how to use this adaptor. - +The `redis` adaptor provides direct database connections for accessing data and +executing NoSQL and standard database operations. See +[functions](/adaptors/packages/redis-docs) for more on how to use this adaptor. ## Authentication -See [Redis](https://redis.io/docs/latest/) for the latest on supported authentication methods. When integrating with a NoSQL database via OpenFn, you authenticate via SSH using authorized database credentials. See this adaptor's [Configuration docs](/adaptors/packages/redis-configuration-schema) for more on the required authentication parameters. +See [Redis](https://redis.io/docs/latest/) for the latest on supported +authentication methods. When integrating with a NoSQL database via OpenFn, you +authenticate via SSH using authorized database credentials. See this adaptor's +[Configuration docs](/adaptors/packages/redis-configuration-schema) for more on +the required authentication parameters. -See platform docs on [managing credentials](/documentation/manage-projects/manage-credentials) for how to configure a credential in OpenFn. If working locally or if using a Raw JSON credential type, then your configuration will look something like this: +See platform docs on +[managing credentials](/documentation/manage-projects/manage-credentials) for +how to configure a credential in OpenFn. If working locally or if using a Raw +JSON credential type, then your configuration will look something like this: ``` { @@ -30,13 +40,16 @@ See platform docs on [managing credentials](/documentation/manage-projects/manag 1. [Redis Documentation](https://redis.io/documentation) - ### Implementation Examples _Coming soon!_ ### I've noticed a problem with this Adaptor, or something is out of date, what can I do? -Thanks for asking! We are a fully Open Source Digital Public Good, and we welcome contributions from our community. Check out our [Adaptors Wiki](https://github.com/OpenFn/adaptors/blob/main/wiki/index.md) for more information on how you can update Adaptors! +Thanks for asking! We are a fully Open Source Digital Public Good, and we +welcome contributions from our community. Check out our +[Adaptors Wiki](https://github.com/OpenFn/adaptors/blob/main/wiki/index.md) for +more information on how you can update Adaptors! -Or, you can always reach out to the Community through our [Community Forum here](https://community.openfn.org/). +Or, you can always reach out to the Community through our +[Community Forum here](https://community.openfn.org/). diff --git a/adaptors/resourcemap.md b/adaptors/resourcemap.md index 96844a416895..a5ce575b0779 100644 --- a/adaptors/resourcemap.md +++ b/adaptors/resourcemap.md @@ -4,17 +4,30 @@ title: ResourceMap Adaptor ## About ResourceMap -[ResourceMap](http://resourcemap.instedd.org/) is a free, open-source collaborative mapping platform developed by InSTEDD that helps organizations track their work, resources, and results geographically. It enables teams to collaboratively record, track, and analyze resources using interactive maps with real-time data updates. +[ResourceMap](http://resourcemap.instedd.org/) is a free, open-source +collaborative mapping platform developed by InSTEDD that helps organizations +track their work, resources, and results geographically. It enables teams to +collaboratively record, track, and analyze resources using interactive maps with +real-time data updates. -ResourceMap is particularly useful for humanitarian organizations, healthcare systems, supply chain management, and field operations requiring location-based resource tracking and analysis. +ResourceMap is particularly useful for humanitarian organizations, healthcare +systems, supply chain management, and field operations requiring location-based +resource tracking and analysis. ## Integration Options -**REST API:** ResourceMap offers a comprehensive REST API that enables external applications to interact with its mapping and data collection services. The API supports multiple data formats (JSON, CSV, GeoJSON, RSS) and provides endpoints for managing collections, sites, layers, and user permissions. Refer to the ResourceMap REST API [documentation](https://github.com/instedd/resourcemap/wiki/REST_API) for detailed guidelines on endpoints and payload formats. +**REST API:** ResourceMap offers a comprehensive REST API that enables external +applications to interact with its mapping and data collection services. The API +supports multiple data formats (JSON, CSV, GeoJSON, RSS) and provides endpoints +for managing collections, sites, layers, and user permissions. Refer to the +ResourceMap REST API +[documentation](https://github.com/instedd/resourcemap/wiki/REST_API) for +detailed guidelines on endpoints and payload formats. ## Authentication -The ResourceMap adaptor uses HTTP basic authentication or can work with publicly accessible collections: +The ResourceMap adaptor uses HTTP basic authentication or can work with publicly +accessible collections: ```json { @@ -26,7 +39,6 @@ The ResourceMap adaptor uses HTTP basic authentication or can work with publicly For public collections, only the `baseUrl` is required. - ## Helpful Links - [ResourceMap GitHub Repository](https://github.com/instedd/resourcemap) @@ -36,6 +48,10 @@ For public collections, only the `baseUrl` is required. ### I've noticed a problem with this Adaptor, or something is out of date, what can I do? -Thanks for asking! We are a fully Open Source Digital Public Good, and we welcome contributions from our community. Check out our [Adaptors Wiki](https://github.com/OpenFn/adaptors/blob/main/wiki/index.md) for more information on how you can update Adaptors! +Thanks for asking! We are a fully Open Source Digital Public Good, and we +welcome contributions from our community. Check out our +[Adaptors Wiki](https://github.com/OpenFn/adaptors/blob/main/wiki/index.md) for +more information on how you can update Adaptors! -Or, you can always reach out to the Community through our [Community Forum here](https://community.openfn.org/). +Or, you can always reach out to the Community through our +[Community Forum here](https://community.openfn.org/). diff --git a/adaptors/salesforce.md b/adaptors/salesforce.md index 35bdc376508a..405d29daf27e 100644 --- a/adaptors/salesforce.md +++ b/adaptors/salesforce.md @@ -278,6 +278,10 @@ accessing the Salesforce bulk API. ### I've noticed a problem with this Adaptor, or something is out of date, what can I do? -Thanks for asking! We are a fully Open Source Digital Public Good, and we welcome contributions from our community. Check out our [Adaptors Wiki](https://github.com/OpenFn/adaptors/blob/main/wiki/index.md) for more information on how you can update Adaptors! +Thanks for asking! We are a fully Open Source Digital Public Good, and we +welcome contributions from our community. Check out our +[Adaptors Wiki](https://github.com/OpenFn/adaptors/blob/main/wiki/index.md) for +more information on how you can update Adaptors! -Or, you can always reach out to the Community through our [Community Forum here](https://community.openfn.org/). +Or, you can always reach out to the Community through our +[Community Forum here](https://community.openfn.org/). diff --git a/adaptors/satusehat.md b/adaptors/satusehat.md index 1db7112a38e4..3a3d478afb0d 100644 --- a/adaptors/satusehat.md +++ b/adaptors/satusehat.md @@ -185,6 +185,10 @@ this: ### I've noticed a problem with this Adaptor, or something is out of date, what can I do? -Thanks for asking! We are a fully Open Source Digital Public Good, and we welcome contributions from our community. Check out our [Adaptors Wiki](https://github.com/OpenFn/adaptors/blob/main/wiki/index.md) for more information on how you can update Adaptors! +Thanks for asking! We are a fully Open Source Digital Public Good, and we +welcome contributions from our community. Check out our +[Adaptors Wiki](https://github.com/OpenFn/adaptors/blob/main/wiki/index.md) for +more information on how you can update Adaptors! -Or, you can always reach out to the Community through our [Community Forum here](https://community.openfn.org/). +Or, you can always reach out to the Community through our +[Community Forum here](https://community.openfn.org/). diff --git a/adaptors/senaite.md b/adaptors/senaite.md index 0fc5b4aa4df7..d33040c01271 100644 --- a/adaptors/senaite.md +++ b/adaptors/senaite.md @@ -4,18 +4,25 @@ title: Senaite Adaptor ## About Senaite -[Senaite](https://www.senaite.com/) is an Enterprise Open Source Laboratory Information Management System (LIMS) designed for laboratory environments. Built on the Plone CMS, Senaite provides comprehensive sample management, workflow automation, quality control, and reporting capabilities for analytical laboratories. +[Senaite](https://www.senaite.com/) is an Enterprise Open Source Laboratory +Information Management System (LIMS) designed for laboratory environments. Built +on the Plone CMS, Senaite provides comprehensive sample management, workflow +automation, quality control, and reporting capabilities for analytical +laboratories. -Senaite is particularly suited for analytical laboratories requiring ISO/IEC 17025 compliance and serves industries including environmental testing, food safety, pharmaceuticals, and clinical diagnostics. +Senaite is particularly suited for analytical laboratories requiring ISO/IEC +17025 compliance and serves industries including environmental testing, food +safety, pharmaceuticals, and clinical diagnostics. ## Authentication -The Senaite adaptor uses HTTP basic authentication with the following configuration: +The Senaite adaptor uses HTTP basic authentication with the following +configuration: ```json { "username": "your_senaite_username", - "password": "your_senaite_password", + "password": "your_senaite_password", "baseUrl": "https://your-senaite-instance.com" } ``` @@ -27,13 +34,12 @@ The Senaite adaptor uses HTTP basic authentication with the following configurat Make authenticated HTTP requests to Senaite's REST API: ```js -request("GET", "catalogs", { - query: { portal_type: "Sample" }, - headers: { "Accept": "application/json" } +request('GET', 'catalogs', { + query: { portal_type: 'Sample' }, + headers: { Accept: 'application/json' }, }); ``` - ## Helpful Links - [Senaite Documentation](https://www.senaite.com/docs/quickstart) @@ -42,6 +48,10 @@ request("GET", "catalogs", { ### I've noticed a problem with this Adaptor, or something is out of date, what can I do? -Thanks for asking! We are a fully Open Source Digital Public Good, and we welcome contributions from our community. Check out our [Adaptors Wiki](https://github.com/OpenFn/adaptors/blob/main/wiki/index.md) for more information on how you can update Adaptors! +Thanks for asking! We are a fully Open Source Digital Public Good, and we +welcome contributions from our community. Check out our +[Adaptors Wiki](https://github.com/OpenFn/adaptors/blob/main/wiki/index.md) for +more information on how you can update Adaptors! -Or, you can always reach out to the Community through our [Community Forum here](https://community.openfn.org/). +Or, you can always reach out to the Community through our +[Community Forum here](https://community.openfn.org/). diff --git a/adaptors/sftp.md b/adaptors/sftp.md index 5ceb48211964..3c21e0aa4727 100644 --- a/adaptors/sftp.md +++ b/adaptors/sftp.md @@ -4,19 +4,32 @@ title: SFTP Adaptor ## About SFTP -[SFTP (Secure File Transfer Protocol)](https://www.techtarget.com/searchcontentmanagement/definition/Secure-File-Transfer-Protocol-SSH-File-Transfer-Protocol) is a secure method for transferring files between systems over an encrypted SSH connection. It is widely used for securely uploading, downloading, and managing files on remote servers. +[SFTP (Secure File Transfer Protocol)](https://www.techtarget.com/searchcontentmanagement/definition/Secure-File-Transfer-Protocol-SSH-File-Transfer-Protocol) +is a secure method for transferring files between systems over an encrypted SSH +connection. It is widely used for securely uploading, downloading, and managing +files on remote servers. -Using this adaptor, you can read and write files (e.g., `csv`, `xls`, `json` files) saved on a SFTP server. +Using this adaptor, you can read and write files (e.g., `csv`, `xls`, `json` +files) saved on a SFTP server. ## Integration Options -**Direct File Transfers:** SFTP allows users to manually or programmatically transfer files between a local and remote system. See [functions](/adaptors/packages/sftp-docs) for more on how to use this adaptor to work with an SFTP server. +**Direct File Transfers:** SFTP allows users to manually or programmatically +transfer files between a local and remote system. See +[functions](/adaptors/packages/sftp-docs) for more on how to use this adaptor to +work with an SFTP server. ## Authentication -When integrating with a SFTP server via OpenFn, you can provide a `username` and `password` for an authorized user to authenticate. See this adaptor's [Configuration docs](/adaptors/packages/sftp-configuration-schema) for more on the required authentication parameters. +When integrating with a SFTP server via OpenFn, you can provide a `username` and +`password` for an authorized user to authenticate. See this adaptor's +[Configuration docs](/adaptors/packages/sftp-configuration-schema) for more on +the required authentication parameters. -See platform docs on [managing credentials](/documentation/manage-projects/manage-credentials) for how to configure a credential in OpenFn. If working locally or if using a Raw JSON credential type, then your configuration will look something like this: +See platform docs on +[managing credentials](/documentation/manage-projects/manage-credentials) for +how to configure a credential in OpenFn. If working locally or if using a Raw +JSON credential type, then your configuration will look something like this: ``` { @@ -27,14 +40,20 @@ See platform docs on [managing credentials](/documentation/manage-projects/manag ``` ### Helpful Links + 1. [Best Practices for SFTP](https://www.ssh.com/academy/ssh/sftp) ### Implementation Examples -1. Women for Women International - SFTP -> Salesforce sync: [https://github.com/OpenFn/women-for-women](https://github.com/OpenFn/women-for-women) +1. Women for Women International - SFTP -> Salesforce sync: + [https://github.com/OpenFn/women-for-women](https://github.com/OpenFn/women-for-women) ### I've noticed a problem with this Adaptor, or something is out of date, what can I do? -Thanks for asking! We are a fully Open Source Digital Public Good, and we welcome contributions from our community. Check out our [Adaptors Wiki](https://github.com/OpenFn/adaptors/blob/main/wiki/index.md) for more information on how you can update Adaptors! +Thanks for asking! We are a fully Open Source Digital Public Good, and we +welcome contributions from our community. Check out our +[Adaptors Wiki](https://github.com/OpenFn/adaptors/blob/main/wiki/index.md) for +more information on how you can update Adaptors! -Or, you can always reach out to the Community through our [Community Forum here](https://community.openfn.org/). +Or, you can always reach out to the Community through our +[Community Forum here](https://community.openfn.org/). diff --git a/adaptors/siuben-rd.md b/adaptors/siuben-rd.md index 56fc37942f8d..5ddbc7419995 100644 --- a/adaptors/siuben-rd.md +++ b/adaptors/siuben-rd.md @@ -3,12 +3,21 @@ title: SIUBEN Adaptor --- ## About `SIUBEN-RD` / Sobre `SIUBEN-RD` -ES: Este es un adaptador prototipado para el gobierno de la República Dominicana para conectarse con el Sistema Único de Beneficiarios (SIUBEN) y automatizar los flujos de trabajo relacionados con los servicios sociales. -EN: This is an adaptor prototyped for the Dominican Republic government to connect with the Single System of Beneficiaries (Sistema Único de Beneficiarios - SIUBEN) to automate related social services workflows. +ES: Este es un adaptador prototipado para el gobierno de la República Dominicana +para conectarse con el Sistema Único de Beneficiarios (SIUBEN) y automatizar los +flujos de trabajo relacionados con los servicios sociales. + +EN: This is an adaptor prototyped for the Dominican Republic government to +connect with the Single System of Beneficiaries (Sistema Único de +Beneficiarios - SIUBEN) to automate related social services workflows. ### I've noticed a problem with this Adaptor, or something is out of date, what can I do? -Thanks for asking! We are a fully Open Source Digital Public Good, and we welcome contributions from our community. Check out our [Adaptors Wiki](https://github.com/OpenFn/adaptors/blob/main/wiki/index.md) for more information on how you can update Adaptors! +Thanks for asking! We are a fully Open Source Digital Public Good, and we +welcome contributions from our community. Check out our +[Adaptors Wiki](https://github.com/OpenFn/adaptors/blob/main/wiki/index.md) for +more information on how you can update Adaptors! -Or, you can always reach out to the Community through our [Community Forum here](https://community.openfn.org/). +Or, you can always reach out to the Community through our +[Community Forum here](https://community.openfn.org/). diff --git a/adaptors/stripe.md b/adaptors/stripe.md index 4fac3611217c..cf4894afd543 100644 --- a/adaptors/stripe.md +++ b/adaptors/stripe.md @@ -41,6 +41,10 @@ JSON credential type, then your configuration will look something like this: ### I've noticed a problem with this Adaptor, or something is out of date, what can I do? -Thanks for asking! We are a fully Open Source Digital Public Good, and we welcome contributions from our community. Check out our [Adaptors Wiki](https://github.com/OpenFn/adaptors/blob/main/wiki/index.md) for more information on how you can update Adaptors! +Thanks for asking! We are a fully Open Source Digital Public Good, and we +welcome contributions from our community. Check out our +[Adaptors Wiki](https://github.com/OpenFn/adaptors/blob/main/wiki/index.md) for +more information on how you can update Adaptors! -Or, you can always reach out to the Community through our [Community Forum here](https://community.openfn.org/). +Or, you can always reach out to the Community through our +[Community Forum here](https://community.openfn.org/). diff --git a/adaptors/surveycto.md b/adaptors/surveycto.md index c081b064b12e..5116ab615460 100644 --- a/adaptors/surveycto.md +++ b/adaptors/surveycto.md @@ -114,6 +114,10 @@ on managing user roles. ### I've noticed a problem with this Adaptor, or something is out of date, what can I do? -Thanks for asking! We are a fully Open Source Digital Public Good, and we welcome contributions from our community. Check out our [Adaptors Wiki](https://github.com/OpenFn/adaptors/blob/main/wiki/index.md) for more information on how you can update Adaptors! +Thanks for asking! We are a fully Open Source Digital Public Good, and we +welcome contributions from our community. Check out our +[Adaptors Wiki](https://github.com/OpenFn/adaptors/blob/main/wiki/index.md) for +more information on how you can update Adaptors! -Or, you can always reach out to the Community through our [Community Forum here](https://community.openfn.org/). +Or, you can always reach out to the Community through our +[Community Forum here](https://community.openfn.org/). diff --git a/adaptors/tableau.md b/adaptors/tableau.md index 6d7a2cca59c8..14d5f304d71e 100644 --- a/adaptors/tableau.md +++ b/adaptors/tableau.md @@ -39,6 +39,10 @@ above use case. ### I've noticed a problem with this Adaptor, or something is out of date, what can I do? -Thanks for asking! We are a fully Open Source Digital Public Good, and we welcome contributions from our community. Check out our [Adaptors Wiki](https://github.com/OpenFn/adaptors/blob/main/wiki/index.md) for more information on how you can update Adaptors! +Thanks for asking! We are a fully Open Source Digital Public Good, and we +welcome contributions from our community. Check out our +[Adaptors Wiki](https://github.com/OpenFn/adaptors/blob/main/wiki/index.md) for +more information on how you can update Adaptors! -Or, you can always reach out to the Community through our [Community Forum here](https://community.openfn.org/). +Or, you can always reach out to the Community through our +[Community Forum here](https://community.openfn.org/). diff --git a/adaptors/telerivet.md b/adaptors/telerivet.md index aa48502a635d..6d3045230add 100644 --- a/adaptors/telerivet.md +++ b/adaptors/telerivet.md @@ -4,22 +4,39 @@ title: Telerivet Adaptor ## About Telerivet -[Telerivet](https://www.telerivet.com/) is a platform for sending, receiving, and automating SMS, voice calls, and mobile messaging through various channels. Telerivet is commonly used for customer notifications, marketing campaigns, and transactional messaging. +[Telerivet](https://www.telerivet.com/) is a platform for sending, receiving, +and automating SMS, voice calls, and mobile messaging through various channels. +Telerivet is commonly used for customer notifications, marketing campaigns, and +transactional messaging. ## Integration Options Telerivet supports 2 primary integration options with OpenFn: -1. **Rest API:** Telerivet has a REST API that enables external services like OpenFn to pull data from Telerivet, or push data from external apps to Telerivet. This option is suited for scheduled, bulk syncs or workflows that must update data in Telerivet with external information. See [functions](/adaptors/packages/telerivet-docs) for more on how to use this adaptor to work with the API. +1. **Rest API:** Telerivet has a REST API that enables external services like + OpenFn to pull data from Telerivet, or push data from external apps to + Telerivet. This option is suited for scheduled, bulk syncs or workflows that + must update data in Telerivet with external information. See + [functions](/adaptors/packages/telerivet-docs) for more on how to use this + adaptor to work with the API. -2. **Webhook:** Webhook or Data Forwarding to push data from Telerivet to external systems (see [docs](https://telerivet.com/api/webhook)). This option is suited for real-time, event-based data integration. +2. **Webhook:** Webhook or Data Forwarding to push data from Telerivet to + external systems (see [docs](https://telerivet.com/api/webhook)). This option + is suited for real-time, event-based data integration. ## Authentication -1. See [Telerivet docs](https://developers.google.com/gmail/api/auth/scopes) for the latest on supported authentication methods. -2. When integrating with Telerivet via OpenFn, there is one primary authentication method that is supported: **API Key**. See this adaptor's [Configuration docs](/adaptors/packages/telerivet-configuration-schema) for more on the required authentication parameters. +1. See [Telerivet docs](https://developers.google.com/gmail/api/auth/scopes) for + the latest on supported authentication methods. +2. When integrating with Telerivet via OpenFn, there is one primary + authentication method that is supported: **API Key**. See this adaptor's + [Configuration docs](/adaptors/packages/telerivet-configuration-schema) for + more on the required authentication parameters. -See platform docs on [managing credentials](/documentation/manage-projects/manage-credentials) for how to configure a credential in OpenFn. If working locally or if using a Raw JSON credential type, then your configuration will look something like this: +See platform docs on +[managing credentials](/documentation/manage-projects/manage-credentials) for +how to configure a credential in OpenFn. If working locally or if using a Raw +JSON credential type, then your configuration will look something like this: ``` { @@ -31,9 +48,7 @@ See platform docs on [managing credentials](/documentation/manage-projects/manag ### Helpful Links 1. [Telerivet API Documentation](https://telerivet.com/api) -2. [Webhook Setup](https://telerivet.com/help/webhooks) - - +2. [Webhook Setup](https://telerivet.com/help/webhooks) ### Implementation Examples @@ -41,6 +56,10 @@ _Coming soon!_ ### I've noticed a problem with this Adaptor, or something is out of date, what can I do? -Thanks for asking! We are a fully Open Source Digital Public Good, and we welcome contributions from our community. Check out our [Adaptors Wiki](https://github.com/OpenFn/adaptors/blob/main/wiki/index.md) for more information on how you can update Adaptors! +Thanks for asking! We are a fully Open Source Digital Public Good, and we +welcome contributions from our community. Check out our +[Adaptors Wiki](https://github.com/OpenFn/adaptors/blob/main/wiki/index.md) for +more information on how you can update Adaptors! -Or, you can always reach out to the Community through our [Community Forum here](https://community.openfn.org/). +Or, you can always reach out to the Community through our +[Community Forum here](https://community.openfn.org/). diff --git a/adaptors/twilio.md b/adaptors/twilio.md index b5880ab4b2ff..bb30c80290d2 100644 --- a/adaptors/twilio.md +++ b/adaptors/twilio.md @@ -4,21 +4,37 @@ title: Twilio Adaptor ## About Twilio -[Twilio](https://www.twilio.com/en-us) is a cloud communications platform that enables developers to build and scale applications for voice, messaging, video, and other communication channels. +[Twilio](https://www.twilio.com/en-us) is a cloud communications platform that +enables developers to build and scale applications for voice, messaging, video, +and other communication channels. ## Integration Options Twilio supports 2 primary integration options with OpenFn: -1. **Rest API:** Twilio has a REST API that enables external services like OpenFn to pull data from Twilio, or push data from external apps to Twilio. This option is suited for scheduled, bulk syncs or workflows that must update data in Twilio with external information. See [functions](/adaptors/packages/twilio-docs) for more on how to use this adaptor to work with the API. -2. **Webhook:** Webhook or Data Forwarding to push data from Twilio to external systems (see [docs](https://www.twilio.com/docs/usage/webhooks)). This option is suited for real-time, event-based data integration. +1. **Rest API:** Twilio has a REST API that enables external services like + OpenFn to pull data from Twilio, or push data from external apps to Twilio. + This option is suited for scheduled, bulk syncs or workflows that must update + data in Twilio with external information. See + [functions](/adaptors/packages/twilio-docs) for more on how to use this + adaptor to work with the API. +2. **Webhook:** Webhook or Data Forwarding to push data from Twilio to external + systems (see [docs](https://www.twilio.com/docs/usage/webhooks)). This option + is suited for real-time, event-based data integration. ## Authentication -1. See [Twilio docs](https://www.twilio.com/docs/) for the latest on supported authentication methods. -2. When integrating with Twilio via OpenFn, there is one primary authentication method that is supported: **API Key**. See this adaptor's [Configuration docs](/adaptors/packages/twilio-configuration-schema) for more on the required authentication parameters. +1. See [Twilio docs](https://www.twilio.com/docs/) for the latest on supported + authentication methods. +2. When integrating with Twilio via OpenFn, there is one primary authentication + method that is supported: **API Key**. See this adaptor's + [Configuration docs](/adaptors/packages/twilio-configuration-schema) for more + on the required authentication parameters. -See platform docs on [managing credentials](/documentation/manage-projects/manage-credentials) for how to configure a credential in OpenFn. If working locally or if using a Raw JSON credential type, then your configuration will look something like this: +See platform docs on +[managing credentials](/documentation/manage-projects/manage-credentials) for +how to configure a credential in OpenFn. If working locally or if using a Raw +JSON credential type, then your configuration will look something like this: ``` { @@ -32,13 +48,16 @@ See platform docs on [managing credentials](/documentation/manage-projects/manag 1. [Twilio API Documentation](https://www.twilio.com/docs/) 2. [Webhook Setup](https://www.twilio.com/docs/usage/webhooks) - ### Implementation Examples _Coming soon!_ ### I've noticed a problem with this Adaptor, or something is out of date, what can I do? -Thanks for asking! We are a fully Open Source Digital Public Good, and we welcome contributions from our community. Check out our [Adaptors Wiki](https://github.com/OpenFn/adaptors/blob/main/wiki/index.md) for more information on how you can update Adaptors! +Thanks for asking! We are a fully Open Source Digital Public Good, and we +welcome contributions from our community. Check out our +[Adaptors Wiki](https://github.com/OpenFn/adaptors/blob/main/wiki/index.md) for +more information on how you can update Adaptors! -Or, you can always reach out to the Community through our [Community Forum here](https://community.openfn.org/). +Or, you can always reach out to the Community through our +[Community Forum here](https://community.openfn.org/). diff --git a/adaptors/varo.md b/adaptors/varo.md index 41d2f003f165..26ea40bf1ce7 100644 --- a/adaptors/varo.md +++ b/adaptors/varo.md @@ -28,9 +28,13 @@ connection to the Varo app. See note in above section. - Varo website: https://www.varo-app.org/ - WHO documentation on EMS standard: https://extranet.who.int/prequal/immunization-devices/e006-temperature-monitoring-devices - + ### I've noticed a problem with this Adaptor, or something is out of date, what can I do? -Thanks for asking! We are a fully Open Source Digital Public Good, and we welcome contributions from our community. Check out our [Adaptors Wiki](https://github.com/OpenFn/adaptors/blob/main/wiki/index.md) for more information on how you can update Adaptors! +Thanks for asking! We are a fully Open Source Digital Public Good, and we +welcome contributions from our community. Check out our +[Adaptors Wiki](https://github.com/OpenFn/adaptors/blob/main/wiki/index.md) for +more information on how you can update Adaptors! -Or, you can always reach out to the Community through our [Community Forum here](https://community.openfn.org/). +Or, you can always reach out to the Community through our +[Community Forum here](https://community.openfn.org/). diff --git a/adaptors/vtiger.md b/adaptors/vtiger.md index ff72b55feb9c..aa74c5320e1b 100644 --- a/adaptors/vtiger.md +++ b/adaptors/vtiger.md @@ -4,42 +4,60 @@ title: Vtiger Adaptor ## About Vtiger -[Vtiger CRM](https://www.vtiger.com/) is an all-in-one customer relationship management platform that helps businesses manage sales, marketing, and customer support operations in a unified interface. Built around an open-source core, Vtiger provides comprehensive CRM capabilities including lead management, opportunity tracking, customer service, project management, and inventory management. +[Vtiger CRM](https://www.vtiger.com/) is an all-in-one customer relationship +management platform that helps businesses manage sales, marketing, and customer +support operations in a unified interface. Built around an open-source core, +Vtiger provides comprehensive CRM capabilities including lead management, +opportunity tracking, customer service, project management, and inventory +management. ## Integration Options -Vtiger supports integration through its comprehensive REST API and web services, which enable external services like OpenFn to: +Vtiger supports integration through its comprehensive REST API and web services, +which enable external services like OpenFn to: -1. **REST API**: Create, read, update, and delete CRM records including leads, contacts, organizations, opportunities, cases, and custom modules. This option is suited for data synchronization, automated data entry, or workflows that need to maintain customer information across multiple systems. See [functions](/adaptors/packages/vtiger-docs) for more on how to use this adaptor to work with the API. +1. **REST API**: Create, read, update, and delete CRM records including leads, + contacts, organizations, opportunities, cases, and custom modules. This + option is suited for data synchronization, automated data entry, or workflows + that need to maintain customer information across multiple systems. See + [functions](/adaptors/packages/vtiger-docs) for more on how to use this + adaptor to work with the API. -2. **Web Services**: Access Vtiger's web service APIs for third-party application integration, enabling seamless data exchange between Vtiger and external systems. +2. **Web Services**: Access Vtiger's web service APIs for third-party + application integration, enabling seamless data exchange between Vtiger and + external systems. ## Authentication When integrating with Vtiger via OpenFn, the authentication method requires: + - **Host URL**: Your Vtiger CRM instance URL - **Username**: Your Vtiger CRM username (email address) - **Access Token**: Your Vtiger access token for API authentication -See this adaptor's [Configuration docs](/adaptors/packages/vtiger-configuration-schema) for more on required authentication parameters. +See this adaptor's +[Configuration docs](/adaptors/packages/vtiger-configuration-schema) for more on +required authentication parameters. -See platform docs on [managing credentials](/documentation/manage-projects/manage-credentials) for how to configure a credential in OpenFn. If working locally or if using a Raw JSON credential type, then your configuration will look something like this: +See platform docs on +[managing credentials](/documentation/manage-projects/manage-credentials) for +how to configure a credential in OpenFn. If working locally or if using a Raw +JSON credential type, then your configuration will look something like this: ```json { "hostUrl": "https://openfunction.od2.vtiger.com", - "username": "test@openfn.org", + "username": "test@openfn.org", "accessToken": "@some()!veryHugeToke" } ``` - ### Helpful Links 2. [Vtiger Documentation](https://www.vtiger.com/docs/) -4. [REST API Manual](https://help.vtiger.com/article/147111249-Rest-API-Manual) -5. [Web Services Integration](http://community.vtiger.com/help/vtigercrm/developers/third-party-app-integration.html) -6. [Free Trial](https://www.vtiger.com/get-started/) +3. [REST API Manual](https://help.vtiger.com/article/147111249-Rest-API-Manual) +4. [Web Services Integration](http://community.vtiger.com/help/vtigercrm/developers/third-party-app-integration.html) +5. [Free Trial](https://www.vtiger.com/get-started/) ### Implementation Examples @@ -47,6 +65,10 @@ _Coming soon!_ ### I've noticed a problem with this Adaptor, or something is out of date, what can I do? -Thanks for asking! We are a fully Open Source Digital Public Good, and we welcome contributions from our community. Check out our [Adaptors Wiki](https://github.com/OpenFn/adaptors/blob/main/wiki/index.md) for more information on how you can update Adaptors! +Thanks for asking! We are a fully Open Source Digital Public Good, and we +welcome contributions from our community. Check out our +[Adaptors Wiki](https://github.com/OpenFn/adaptors/blob/main/wiki/index.md) for +more information on how you can update Adaptors! -Or, you can always reach out to the Community through our [Community Forum here](https://community.openfn.org/). +Or, you can always reach out to the Community through our +[Community Forum here](https://community.openfn.org/). diff --git a/adaptors/whatsapp.md b/adaptors/whatsapp.md index 6d0d54bba79a..56b14a4a002c 100644 --- a/adaptors/whatsapp.md +++ b/adaptors/whatsapp.md @@ -4,25 +4,48 @@ title: WhatsApp Adaptor ## About WhatsApp -The [WhatsApp Business Platform](https://developers.facebook.com/docs/whatsapp) enables organizations to communicate with their customers on WhatsApp at scale. It supports sending messages, notifications, and media, as well as receiving inbound customer messages through a secure and reliable API. +The [WhatsApp Business Platform](https://developers.facebook.com/docs/whatsapp) +enables organizations to communicate with their customers on WhatsApp at scale. +It supports sending messages, notifications, and media, as well as receiving +inbound customer messages through a secure and reliable API. -This adaptor allows OpenFn users to integrate workflows with WhatsApp Business Cloud or On-Premise APIs to send and receive WhatsApp messages as part of automated processes. +This adaptor allows OpenFn users to integrate workflows with WhatsApp Business +Cloud or On-Premise APIs to send and receive WhatsApp messages as part of +automated processes. ## Integration Options -The WhatsApp Business API provides a [REST API](https://developers.facebook.com/docs/whatsapp) to manage message sending, conversations, and contacts. See [functions](/adaptors/packages/whatsapp-docs) for examples of how to use this adaptor to call the API. +The WhatsApp Business API provides a +[REST API](https://developers.facebook.com/docs/whatsapp) to manage message +sending, conversations, and contacts. See +[functions](/adaptors/packages/whatsapp-docs) for examples of how to use this +adaptor to call the API. -In addition, WhatsApp Business supports [Webhooks](https://developers.facebook.com/docs/whatsapp/cloud-api/webhooks/payload-examples) that deliver inbound messages and delivery status updates in real time. These can be consumed by OpenFn workflows via a [webhook event trigger](/documentation/build/triggers#webhook-event-triggers) when customers send messages. +In addition, WhatsApp Business supports +[Webhooks](https://developers.facebook.com/docs/whatsapp/cloud-api/webhooks/payload-examples) +that deliver inbound messages and delivery status updates in real time. These +can be consumed by OpenFn workflows via a +[webhook event trigger](/documentation/build/triggers#webhook-event-triggers) +when customers send messages. ## Authentication -Access to the WhatsApp Business API requires a `Permanent Access Token` (for Cloud API) or a generated `Bearer Token` (for On-Premise deployments). This token must be included as an Authorization Bearer Token in all requests. -For Cloud API, you must also specify your `phone_number_id` and `whatsapp_business_account_id`. -[See Meta WhatsApp Business docs](https://developers.facebook.com/docs/whatsapp/cloud-api/get-started) for detailed guidance. +Access to the WhatsApp Business API requires a `Permanent Access Token` (for +Cloud API) or a generated `Bearer Token` (for On-Premise deployments). This +token must be included as an Authorization Bearer Token in all requests. -OpenFn users can use the `whatsapp` credential type when [creating a credential](/documentation/manage-projects/manage-credentials) on the app. +For Cloud API, you must also specify your `phone_number_id` and +`whatsapp_business_account_id`. +[See Meta WhatsApp Business docs](https://developers.facebook.com/docs/whatsapp/cloud-api/get-started) +for detailed guidance. -If working locally or if using a `Raw JSON` credential type in OpenFn, your configuration will look something like this ([see configuration docs](/adaptors/packages/whatsapp-configuration-schema)): +OpenFn users can use the `whatsapp` credential type when +[creating a credential](/documentation/manage-projects/manage-credentials) on +the app. + +If working locally or if using a `Raw JSON` credential type in OpenFn, your +configuration will look something like this +([see configuration docs](/adaptors/packages/whatsapp-configuration-schema)): ```json { @@ -31,17 +54,23 @@ If working locally or if using a `Raw JSON` credential type in OpenFn, your conf "phoneNumberId": "123456789012345", "wabaId": "987654321098765" } - ``` ## Helpful Links -- WhatsApp Business API documentation: https://developers.facebook.com/docs/whatsapp -- Cloud API Get Started guide: https://developers.facebook.com/docs/whatsapp/cloud-api/get-started -- Webhook payload examples: https://developers.facebook.com/docs/whatsapp/cloud-api/webhooks/payload-examples +- WhatsApp Business API documentation: + https://developers.facebook.com/docs/whatsapp +- Cloud API Get Started guide: + https://developers.facebook.com/docs/whatsapp/cloud-api/get-started +- Webhook payload examples: + https://developers.facebook.com/docs/whatsapp/cloud-api/webhooks/payload-examples ### I've noticed a problem with this Adaptor, or something is out of date, what can I do? -Thanks for asking! We are a fully Open Source Digital Public Good, and we welcome contributions from our community. Check out our [Adaptors Wiki](https://github.com/OpenFn/adaptors/blob/main/wiki/index.md) for more information on how you can update Adaptors! +Thanks for asking! We are a fully Open Source Digital Public Good, and we +welcome contributions from our community. Check out our +[Adaptors Wiki](https://github.com/OpenFn/adaptors/blob/main/wiki/index.md) for +more information on how you can update Adaptors! -Or, you can always reach out to the Community through our [Community Forum here](https://community.openfn.org/). +Or, you can always reach out to the Community through our +[Community Forum here](https://community.openfn.org/). diff --git a/adaptors/wigal-sms.md b/adaptors/wigal-sms.md index d4e2342b3c1e..41b981029eac 100644 --- a/adaptors/wigal-sms.md +++ b/adaptors/wigal-sms.md @@ -4,27 +4,42 @@ title: Wigal SMS Adaptor ## About Wigal SMS -[Wigal](https://wigal.com.gh/) is a Ghana-based technology company that provides enterprise-level digital solutions including their flagship SMS platform called [FROG (Free and Reliable Online Gateway)](https://sms.wigal.com.gh/). FROG is Ghana's leading bulk SMS provider, offering the most competitive messaging prices and reliable delivery to all mobile network operators in the country. - +[Wigal](https://wigal.com.gh/) is a Ghana-based technology company that provides +enterprise-level digital solutions including their flagship SMS platform called +[FROG (Free and Reliable Online Gateway)](https://sms.wigal.com.gh/). FROG is +Ghana's leading bulk SMS provider, offering the most competitive messaging +prices and reliable delivery to all mobile network operators in the country. ## Integration Options -Wigal SMS supports integration through its FROG API, which enables external services like OpenFn to: +Wigal SMS supports integration through its FROG API, which enables external +services like OpenFn to: -1. **REST API**: Send SMS messages programmatically using the FROG SMS Gateway API. This option is suited for automated notifications, bulk messaging campaigns, or workflows that need to send SMS alerts and communications. See [functions](/adaptors/packages/wigal-sms-docs) for more on how to use this adaptor to work with the API. +1. **REST API**: Send SMS messages programmatically using the FROG SMS Gateway + API. This option is suited for automated notifications, bulk messaging + campaigns, or workflows that need to send SMS alerts and communications. See + [functions](/adaptors/packages/wigal-sms-docs) for more on how to use this + adaptor to work with the API. -2. **Bulk Messaging**: Send messages to multiple recipients simultaneously, perfect for marketing campaigns, alerts, and mass communications. +2. **Bulk Messaging**: Send messages to multiple recipients simultaneously, + perfect for marketing campaigns, alerts, and mass communications. ## Authentication When integrating with Wigal SMS via OpenFn, the authentication method requires: + - **Username**: Your FROG SMS account username (email address) - **API Key**: Your FROG SMS API key for authentication - **Base URL**: The FROG API endpoint (https://frogapi.wigal.com.gh) -See this adaptor's [Configuration docs](/adaptors/packages/wigal-sms-configuration-schema) for more on required authentication parameters. +See this adaptor's +[Configuration docs](/adaptors/packages/wigal-sms-configuration-schema) for more +on required authentication parameters. -See platform docs on [managing credentials](/documentation/manage-projects/manage-credentials) for how to configure a credential in OpenFn. If working locally or if using a Raw JSON credential type, then your configuration will look something like this: +See platform docs on +[managing credentials](/documentation/manage-projects/manage-credentials) for +how to configure a credential in OpenFn. If working locally or if using a Raw +JSON credential type, then your configuration will look something like this: ```json { @@ -34,7 +49,6 @@ See platform docs on [managing credentials](/documentation/manage-projects/manag } ``` - ### Helpful Links 1. [FROG SMS Platform](https://sms.wigal.com.gh/) @@ -48,6 +62,10 @@ _Coming soon!_ ### I've noticed a problem with this Adaptor, or something is out of date, what can I do? -Thanks for asking! We are a fully Open Source Digital Public Good, and we welcome contributions from our community. Check out our [Adaptors Wiki](https://github.com/OpenFn/adaptors/blob/main/wiki/index.md) for more information on how you can update Adaptors! +Thanks for asking! We are a fully Open Source Digital Public Good, and we +welcome contributions from our community. Check out our +[Adaptors Wiki](https://github.com/OpenFn/adaptors/blob/main/wiki/index.md) for +more information on how you can update Adaptors! -Or, you can always reach out to the Community through our [Community Forum here](https://community.openfn.org/). +Or, you can always reach out to the Community through our +[Community Forum here](https://community.openfn.org/). diff --git a/adaptors/zata.md b/adaptors/zata.md index c8b153cf6ef7..53e62c5b68f1 100644 --- a/adaptors/zata.md +++ b/adaptors/zata.md @@ -4,32 +4,57 @@ title: Zata Adaptor ## About Zata -[Zata](https://zata.rw/) is HiQ Africa's flagship retail management and tax compliance platform designed for businesses in East Africa. Zata specializes in automating sales tax reports, managing inventory, and ensuring regulatory compliance with tax authorities like Rwanda Revenue Authority (RRA). The platform offers integrated solutions for retail stock management, EBM (Electronic Billing Machine) invoice automation, and financial services integration. +[Zata](https://zata.rw/) is HiQ Africa's flagship retail management and tax +compliance platform designed for businesses in East Africa. Zata specializes in +automating sales tax reports, managing inventory, and ensuring regulatory +compliance with tax authorities like Rwanda Revenue Authority (RRA). The +platform offers integrated solutions for retail stock management, EBM +(Electronic Billing Machine) invoice automation, and financial services +integration. ## Key Features -- **Tax Compliance Automation**: Automated sales tax reporting and EBM integration -- **Inventory Management**: Real-time stock tracking, product management, and warehouse operations -- **Transaction Processing**: Sales transaction management with customer and payment tracking -- **Multi-branch Support**: Manage multiple retail locations from a single platform -- **Financial Integration**: Connect with mobile money services (MTN MoMo, Airtel Money) and invoice financing -- **API-First Architecture**: Developer-friendly REST API for seamless integration +- **Tax Compliance Automation**: Automated sales tax reporting and EBM + integration +- **Inventory Management**: Real-time stock tracking, product management, and + warehouse operations +- **Transaction Processing**: Sales transaction management with customer and + payment tracking +- **Multi-branch Support**: Manage multiple retail locations from a single + platform +- **Financial Integration**: Connect with mobile money services (MTN MoMo, + Airtel Money) and invoice financing +- **API-First Architecture**: Developer-friendly REST API for seamless + integration ## Integration Options -Zata supports integration through its REST API, which enables external services like OpenFn to: +Zata supports integration through its REST API, which enables external services +like OpenFn to: -1. **REST API**: Create and manage sales transactions, products, customers, and inventory. This option is suited for e-commerce platforms, POS systems, or ERP integrations that need to sync retail data with Zata's compliance and inventory management features. See [functions](/adaptors/packages/zata-docs) for more on how to use this adaptor to work with the API. +1. **REST API**: Create and manage sales transactions, products, customers, and + inventory. This option is suited for e-commerce platforms, POS systems, or + ERP integrations that need to sync retail data with Zata's compliance and + inventory management features. See [functions](/adaptors/packages/zata-docs) + for more on how to use this adaptor to work with the API. -2. **Real-time Sync**: Synchronize product catalogs, customer data, and transaction records between external systems and Zata's platform for unified retail operations. +2. **Real-time Sync**: Synchronize product catalogs, customer data, and + transaction records between external systems and Zata's platform for unified + retail operations. ## Authentication -When integrating with Zata via OpenFn, the primary authentication method supported is: **API Token**. +When integrating with Zata via OpenFn, the primary authentication method +supported is: **API Token**. -See this adaptor's [Configuration docs](/adaptors/packages/zata-configuration-schema) for more on required authentication parameters. +See this adaptor's +[Configuration docs](/adaptors/packages/zata-configuration-schema) for more on +required authentication parameters. -See platform docs on [managing credentials](/documentation/manage-projects/manage-credentials) for how to configure a credential in OpenFn. If working locally or if using a Raw JSON credential type, then your configuration will look something like this: +See platform docs on +[managing credentials](/documentation/manage-projects/manage-credentials) for +how to configure a credential in OpenFn. If working locally or if using a Raw +JSON credential type, then your configuration will look something like this: ```json { @@ -39,12 +64,11 @@ See platform docs on [managing credentials](/documentation/manage-projects/manag } ``` - ### Helpful Links 1. [Zata Platform](https://zata.rw/) 2. [Zata API Documentation](https://docs.zata.rw/) -5. [Zata Community](https://community.zata.rw/) +3. [Zata Community](https://community.zata.rw/) ### Implementation Examples @@ -52,6 +76,10 @@ _Coming soon!_ ### I've noticed a problem with this Adaptor, or something is out of date, what can I do? -Thanks for asking! We are a fully Open Source Digital Public Good, and we welcome contributions from our community. Check out our [Adaptors Wiki](https://github.com/OpenFn/adaptors/blob/main/wiki/index.md) for more information on how you can update Adaptors! +Thanks for asking! We are a fully Open Source Digital Public Good, and we +welcome contributions from our community. Check out our +[Adaptors Wiki](https://github.com/OpenFn/adaptors/blob/main/wiki/index.md) for +more information on how you can update Adaptors! -Or, you can always reach out to the Community through our [Community Forum here](https://community.openfn.org/). +Or, you can always reach out to the Community through our +[Community Forum here](https://community.openfn.org/). diff --git a/adaptors/zoho.md b/adaptors/zoho.md index 934e705375e9..aa1cf618d0cc 100644 --- a/adaptors/zoho.md +++ b/adaptors/zoho.md @@ -4,26 +4,44 @@ title: Zoho Adaptor ## About Zoho -[Zoho Analytics](https://www.zoho.com/analytics/) (formerly Zoho Reports) is a comprehensive business intelligence and analytics platform that enables organizations to connect, analyze, and visualize data from multiple sources. Zoho Analytics provides self-service BI capabilities with AI-powered insights, allowing users to create reports, dashboards, and perform advanced analytics without extensive technical knowledge. +[Zoho Analytics](https://www.zoho.com/analytics/) (formerly Zoho Reports) is a +comprehensive business intelligence and analytics platform that enables +organizations to connect, analyze, and visualize data from multiple sources. +Zoho Analytics provides self-service BI capabilities with AI-powered insights, +allowing users to create reports, dashboards, and perform advanced analytics +without extensive technical knowledge. ## Integration Options -Zoho Analytics supports integration through its comprehensive REST API, which enables external services like OpenFn to: +Zoho Analytics supports integration through its comprehensive REST API, which +enables external services like OpenFn to: -1. **REST API**: Add, update, and retrieve data from Zoho Analytics tables and databases. This option is suited for ETL processes, data synchronization, or workflows that need to populate analytics datasets with external information. See [functions](/adaptors/packages/zoho-docs) for more on how to use this adaptor to work with the API. +1. **REST API**: Add, update, and retrieve data from Zoho Analytics tables and + databases. This option is suited for ETL processes, data synchronization, or + workflows that need to populate analytics datasets with external information. + See [functions](/adaptors/packages/zoho-docs) for more on how to use this + adaptor to work with the API. -2. **Data Pipeline Integration**: Automate data ingestion from various sources into Zoho Analytics for real-time reporting and dashboard updates. +2. **Data Pipeline Integration**: Automate data ingestion from various sources + into Zoho Analytics for real-time reporting and dashboard updates. ## Authentication When integrating with Zoho Analytics via OpenFn, the authentication method uses: -- **Account**: Your Zoho Analytics account identifier + +- **Account**: Your Zoho Analytics account identifier - **Auth Token**: Your Zoho authentication token -- **API Version**: The Zoho Analytics API version (v1 or v2, with v2 being recommended) +- **API Version**: The Zoho Analytics API version (v1 or v2, with v2 being + recommended) -See this adaptor's [Configuration docs](/adaptors/packages/zoho-configuration-schema) for more on required authentication parameters. +See this adaptor's +[Configuration docs](/adaptors/packages/zoho-configuration-schema) for more on +required authentication parameters. -See platform docs on [managing credentials](/documentation/manage-projects/manage-credentials) for how to configure a credential in OpenFn. If working locally or if using a Raw JSON credential type, then your configuration will look something like this: +See platform docs on +[managing credentials](/documentation/manage-projects/manage-credentials) for +how to configure a credential in OpenFn. If working locally or if using a Raw +JSON credential type, then your configuration will look something like this: ```json { @@ -37,14 +55,14 @@ See platform docs on [managing credentials](/documentation/manage-projects/manag ### addrow -The primary function of this adaptor is `addrow`, which adds row data to a database table in Zoho Analytics. This function enables you to: +The primary function of this adaptor is `addrow`, which adds row data to a +database table in Zoho Analytics. This function enables you to: - Insert new records into existing Zoho Analytics tables -- Populate datasets for reporting and dashboard visualization +- Populate datasets for reporting and dashboard visualization - Sync data from external systems into your analytics workspace - Maintain up-to-date information for business intelligence operations - ### Helpful Links 1. [Zoho Analytics Platform](https://www.zoho.com/analytics/) @@ -52,13 +70,16 @@ The primary function of this adaptor is `addrow`, which adds row data to a datab 3. [API Specification](https://www.zoho.com/analytics/api/v2/api-specification.html) 4. [Developer Console](https://api-console.zoho.com/) - ### Implementation Examples _Coming soon!_ ### I've noticed a problem with this Adaptor, or something is out of date, what can I do? -Thanks for asking! We are a fully Open Source Digital Public Good, and we welcome contributions from our community. Check out our [Adaptors Wiki](https://github.com/OpenFn/adaptors/blob/main/wiki/index.md) for more information on how you can update Adaptors! +Thanks for asking! We are a fully Open Source Digital Public Good, and we +welcome contributions from our community. Check out our +[Adaptors Wiki](https://github.com/OpenFn/adaptors/blob/main/wiki/index.md) for +more information on how you can update Adaptors! -Or, you can always reach out to the Community through our [Community Forum here](https://community.openfn.org/). +Or, you can always reach out to the Community through our +[Community Forum here](https://community.openfn.org/). diff --git a/articles/2021-02-03-hosted-or-local-deployment.md b/articles/2021-02-03-hosted-or-local-deployment.md index 12ba03592c17..e99bc1f0be1b 100644 --- a/articles/2021-02-03-hosted-or-local-deployment.md +++ b/articles/2021-02-03-hosted-or-local-deployment.md @@ -22,8 +22,8 @@ considerations for both options. SaaS is software that is installed and _runs_ on computers maintained by software professionals, rather than on your own computer. While those computers -might be anywhere in the world, typically you'll access and _use_ this software via -the Internet. +might be anywhere in the world, typically you'll access and _use_ this software +via the Internet. ### Some benefits of SaaS diff --git a/articles/2021-02-17-syncing-options.md b/articles/2021-02-17-syncing-options.md index 651d0a1a34fc..f35283aa1242 100644 --- a/articles/2021-02-17-syncing-options.md +++ b/articles/2021-02-17-syncing-options.md @@ -18,6 +18,7 @@ designing your data integration. These include: 1. **Real-time, or event-based, syncs** 2. **Scheduled syncs** + For a diff --git a/articles/2021-10-15-webpack-to-esbuild-part1.md b/articles/2021-10-15-webpack-to-esbuild-part1.md index caa10c9277c4..b29ad17c13bc 100644 --- a/articles/2021-10-15-webpack-to-esbuild-part1.md +++ b/articles/2021-10-15-webpack-to-esbuild-part1.md @@ -42,9 +42,9 @@ different in implementation and in features. So **speed** is the big selling point. But thinking back to other bundlers, what made us switch (thinking of gulp, grunt, mixing in babel, browserify etc). Those -changes were never about speed, at least a drop in build time was nice - a bit of -caching goes a long way. The changes were about being able to use the syntax and -libraries we wanted with as little fuss as possible. +changes were never about speed, at least a drop in build time was nice - a bit +of caching goes a long way. The changes were about being able to use the syntax +and libraries we wanted with as little fuss as possible. Webpack _can_ do almost anything. I'm not convinced esbuild can match that, and as an open-source maintainer I'd argue it shouldn't break its original goals to @@ -78,11 +78,9 @@ here. - The splitting doesn't know about `app.js`, it puts everything that resolves to `node_modules` in `vendor.js`. Subtle but worth pointing out. -* -Could probably ignore this and refactor some +* Could probably ignore this and refactor some files and check that tree-shaking is working properly. - ## What we need esbuild to provide Like I mentioned before, webpack is super versatile and it would be @@ -120,7 +118,7 @@ So we know what we want, but can any of this work? Let's give it a go with the simplest of steps: ``` -./node_modules/.bin/esbuild js/app.js --bundle --outfile=out.js +./node_modules/.bin/esbuild js/app.js --bundle --outfile=out.js > js/app.js:58:2: error: Unexpected "<" 58 │ ╵ ^ @@ -181,7 +179,7 @@ We can see it's copied our images and css into the build folder. Note that we're not doing any bundle splitting right now and from the looks of it ``` -... \ +... \ > --minify out/app.js 3.4mb ⚠️ @@ -190,8 +188,8 @@ not doing any bundle splitting right now and from the looks of it ``` That's better, wow. It's kinda difficult to not be amazed. For context, a -minified and split production build takes about 34s with webpack and that's on my -i7 desktop machine, and 197s (3+ mins) on CI/CD. +minified and split production build takes about 34s with webpack and that's on +my i7 desktop machine, and 197s (3+ mins) on CI/CD. ## What's next? @@ -209,5 +207,7 @@ But a shell command doth not a replacement for webpack make. We still need to: ## Resources -- [FYI: Phoenix drops webpack and npm for esbuild](https://fly.io/blog/phoenix-moves-to-esbuild-for-assets/) 1 -- [JavaScript modules via script tag](https://caniuse.com/es6-module) 2 +- [FYI: Phoenix drops webpack and npm for esbuild](https://fly.io/blog/phoenix-moves-to-esbuild-for-assets/) + 1 +- [JavaScript modules via script tag](https://caniuse.com/es6-module) + 2 diff --git a/articles/2022-09-19-auth-security.md b/articles/2022-09-19-auth-security.md index 4c8bced5271c..4701979e510c 100644 --- a/articles/2022-09-19-auth-security.md +++ b/articles/2022-09-19-auth-security.md @@ -64,7 +64,7 @@ Morten from DHIS2, Dev and Biyeun from Dimagi. **To more widely share these learnings, we have drafted this resource documenting the specific security measures that should be considered at each -stage of product development _specifically with regards to authentication and +stage of product development \_specifically with regards to authentication and authorization. _**Our hope is that this article will help other product managers in the Global Good (GG) and Digital Public Good (DPG) communities consider these features into their backlog/roadmap from the outset and make sure they are diff --git a/docs/build-for-developers/build-with-api.md b/docs/build-for-developers/build-with-api.md index 8189eebc2b67..4578f2253ce4 100644 --- a/docs/build-for-developers/build-with-api.md +++ b/docs/build-for-developers/build-with-api.md @@ -5,4 +5,7 @@ sidebar_label: Build with the API slug: /build-with-api --- -OpenFn offers the ability to configure projects via HTTP requests sent to the REST API. See the [OpenFn/Lightning GitHub repo](https://openfn.github.io/lightning/provisioning.html) for detailed developer documentation. +OpenFn offers the ability to configure projects via HTTP requests sent to the +REST API. See the +[OpenFn/Lightning GitHub repo](https://openfn.github.io/lightning/provisioning.html) +for detailed developer documentation. diff --git a/docs/build-for-developers/cli-usage.md b/docs/build-for-developers/cli-usage.md index 33534b86367a..4bba33d86170 100644 --- a/docs/build-for-developers/cli-usage.md +++ b/docs/build-for-developers/cli-usage.md @@ -4,7 +4,8 @@ sidebar_label: Basic usage slug: /cli-usage --- -This page shows examples for some of the most common usages of the CLI, including: +This page shows examples for some of the most common usages of the CLI, +including: - get help - run a job @@ -30,7 +31,8 @@ openfn deploy --help ### Run a job -To run a single job, you must explicitly specify which adaptor to use - see the [publicly available adaptors](/adaptors). +To run a single job, you must explicitly specify which adaptor to use - see the +[publicly available adaptors](/adaptors). Adaptors are automatically installed if the specified version is not detected. diff --git a/docs/build-for-developers/security-for-devs.md b/docs/build-for-developers/security-for-devs.md index 3cad88b21310..a8f48deeaeee 100644 --- a/docs/build-for-developers/security-for-devs.md +++ b/docs/build-for-developers/security-for-devs.md @@ -178,6 +178,7 @@ adjusted by the OpenFn super admin. For more security considerations and best practices for all OpenFn implementers (not just developers), be sure to check out the complete -[OpenFn Security Guidebook](../get-started/security.md). For more on job-writing, -see the [job-writing guide](../jobs/job-writing-guide.md). +[OpenFn Security Guidebook](../get-started/security.md). For more on +job-writing, see the [job-writing guide](../jobs/job-writing-guide.md). + ::: diff --git a/docs/build/ai-assistant.md b/docs/build/ai-assistant.md index d0db61f91380..52bd27d25358 100644 --- a/docs/build/ai-assistant.md +++ b/docs/build/ai-assistant.md @@ -40,7 +40,7 @@ paid plans for usage of OpenFn's cloud-hosted platform. ## About the Assistant The AI Assistant is a custom multi-agent system. It has access to OpenFn -documentation and implementation best practices, so it can answer your questions +documentation and implementation best practices, so it can answer your questions in the context of the platform. All chat sessions are shared between all users of the project. You can start a @@ -53,12 +53,12 @@ confidential or sensitive before sending it. ## A Note on Responsible AI Usage -The AI Assistant leverages Large Language Models. Like other -chatbots, its capabilities are impressive, but imperfect. +The AI Assistant leverages Large Language Models. Like other chatbots, its +capabilities are impressive, but imperfect. -Remember that ultimately, all responses are automatically generated and YOU, -the human in charge, are responsible for how its output is used. You should -consider all responses critically and verify the output where possible. +Remember that ultimately, all responses are automatically generated and YOU, the +human in charge, are responsible for how its output is used. You should consider +all responses critically and verify the output where possible. **You can read more about our approach to AI in our [Responsible AI Policy](https://www.openfn.org/ai).** diff --git a/docs/build/credentials.md b/docs/build/credentials.md index b631a4eaaa95..f695feb7b553 100644 --- a/docs/build/credentials.md +++ b/docs/build/credentials.md @@ -6,9 +6,9 @@ Credentials are used to authorize connections to external systems. Some Adaptors will use credentials to fetch meta-data from source and destination applications and make the job writing process easier. -A Credentials' values can only be viewed or edited by a single user — their "owner" -(the user that created that credential). All the collaborators on a Project can -choose from all credentials for the Project when defining a job. +A Credentials' values can only be viewed or edited by a single user — their +"owner" (the user that created that credential). All the collaborators on a +Project can choose from all credentials for the Project when defining a job. ![Credentials Page](/img/settings_credentials.webp) @@ -96,35 +96,35 @@ credential guidance. To keep target systems as secure and controlled as possible, we recommend that credentials used in the integration be granted API-only access to the target -application. +application. -You _can_ use your personal user as an OpenFn credential for your -workflow, but we recommend that you create a dedicated "OpenFn" integration user -or service account user to access your target applications. For example, in +You _can_ use your personal user as an OpenFn credential for your workflow, but +we recommend that you create a dedicated "OpenFn" integration user or service +account user to access your target applications. For example, in [Salesforce](/adaptors/salesforce#salesforce-credentials), you can create an API-only user with a special API-only license type to perform automated tasks and integrations without requiring full user access. For Google APIs such as -[Google Sheets](/adaptors/googlesheets#using-a-google-service-account), a -Google Service Account is the recommended approach for automated workflows. +[Google Sheets](/adaptors/googlesheets#using-a-google-service-account), a Google +Service Account is the recommended approach for automated workflows. -API-only users might not be available in every target system, but many do offer the -creation of user roles that have API-only access permissions, and may allow you -to determine the scopes for which APIs or endpoints users can access. Even when an -API only user is not available in the target system, best practices dictate that an -integration/service user is used for all automation tasks to maintain a secure audit -trail. +API-only users might not be available in every target system, but many do offer +the creation of user roles that have API-only access permissions, and may allow +you to determine the scopes for which APIs or endpoints users can access. Even +when an API only user is not available in the target system, best practices +dictate that an integration/service user is used for all automation tasks to +maintain a secure audit trail. API-only access minimizes the risks of data breaches by: -- **Ensuring Traceability**: Accessing with an integration user provides an audit - trail of who logged in when and what changes were made. For example, if you used - your personal user login for a system in an integration implementation, it - would be hard to know if it was YOU, a human, who made a change vs. an - automated system action via the API user. +- **Ensuring Traceability**: Accessing with an integration user provides an + audit trail of who logged in when and what changes were made. For example, if + you used your personal user login for a system in an integration + implementation, it would be hard to know if it was YOU, a human, who made a + change vs. an automated system action via the API user. -- **Minimizing breach impact**: The user can be deactivated if compromised, and log - in to the frontend with the breached API credential is automatically disallowed, - limiting attack vectors. +- **Minimizing breach impact**: The user can be deactivated if compromised, and + log in to the frontend with the breached API credential is automatically + disallowed, limiting attack vectors. - **Ensuring the principle of least privilege**: Each integration user need only have access to the subset of data supporting its specific use case. diff --git a/docs/build/editing-locally.md b/docs/build/editing-locally.md index d4c9dbf95587..47f6efa8971c 100644 --- a/docs/build/editing-locally.md +++ b/docs/build/editing-locally.md @@ -49,8 +49,8 @@ for more info.) 7. When using VS Code, make sure you install the [Prettier VSCode Extension](https://marketplace.visualstudio.com/items?itemName=esbenp.prettier-vscode) - and set it as the default formatter in Settings as seen below. This will apply - the correct code formatting to the files you change. + and set it as the default formatter in Settings as seen below. This will + apply the correct code formatting to the files you change. ![Prettier](/img/prettier.webp) diff --git a/docs/build/limits.md b/docs/build/limits.md index 222012638a7d..a0dc95384e4e 100644 --- a/docs/build/limits.md +++ b/docs/build/limits.md @@ -58,9 +58,9 @@ attempt exceeds this limit, it will be killed by the worker and you'll see a > _Instance superusers can control this limit via the `MAX_RUN_MEMORY` > environment variable._ -Note that the `state` object returned at the end of each step in a workflow -must not exceed 25% of your total runtime memory limit or your run will be -killed with a `StateTooLarge` error. +Note that the `state` object returned at the end of each step in a workflow must +not exceed 25% of your total runtime memory limit or your run will be killed +with a `StateTooLarge` error. ## Dataclip Size (10MB) diff --git a/docs/build/paths.md b/docs/build/paths.md index 4724101ca33a..44a9d74eda5f 100644 --- a/docs/build/paths.md +++ b/docs/build/paths.md @@ -4,8 +4,8 @@ sidebar_label: Paths --- A Path is both a visual and functional indication defining the sequence of Steps -the Workflow follows when executed. Read on for more about the different types of Paths -and configuration tips. +the Workflow follows when executed. Read on for more about the different types +of Paths and configuration tips. ## Path Conditions diff --git a/docs/build/steps/steps.md b/docs/build/steps/steps.md index 07d30fabaaba..9c563331749f 100644 --- a/docs/build/steps/steps.md +++ b/docs/build/steps/steps.md @@ -116,12 +116,12 @@ Versions for run f470a3da-8b90-480e-a94f-6dd982c91afe: While it may be beneficial to upgrade as part of your routine maintenance, these upgrades should be carefully tested. Most often, customers upgrade to a new -adaptor version for an existing step when they are already making business-driven -changes to that step. Some business-driven changes may actually _require_ -upgrading the version in order to use a new feature from the adaptor. Even if -those changes don't require an upgrade, if the technical team must spend time -testing step-specific changes anyway, it may be an ideal opportunity to also test -an upgrade of the adaptor version. +adaptor version for an existing step when they are already making +business-driven changes to that step. Some business-driven changes may actually +_require_ upgrading the version in order to use a new feature from the adaptor. +Even if those changes don't require an upgrade, if the technical team must spend +time testing step-specific changes anyway, it may be an ideal opportunity to +also test an upgrade of the adaptor version. Adaptors follow [SEMVER](https://semver.org/) so you can be reasonably assured that upgrading from `x.1.z` to `x.2.z` will not lead to existing step code diff --git a/docs/build/triggers.md b/docs/build/triggers.md index 8c2f4c0da04f..f52767f3f838 100644 --- a/docs/build/triggers.md +++ b/docs/build/triggers.md @@ -80,7 +80,7 @@ system waits — sometimes seconds or minutes — for the result. - Body: a JSON object with the shape: ```json { - "data": { /* the final run state */ }, + "data": {/* the final run state */}, "meta": { "work_order_id": "abc123", "run_id": "xyz456", @@ -93,10 +93,10 @@ system waits — sometimes seconds or minutes — for the result. } } ``` - - `data` — the final run state (or a security message on failure, or a - custom body — see below) - - `meta` — run metadata, including run lifecycle timestamps and final - `state` (`"success"` or `"failed"`) + - `data` — the final run state (or a security message on failure, or a custom + body — see below) + - `meta` — run metadata, including run lifecycle timestamps and final `state` + (`"success"` or `"failed"`) :::note Security policy for failed runs @@ -124,7 +124,8 @@ status codes, they only apply in sync mode. #### Customising the response from your job -To return a custom body or status code from values at runtime, set `webhookResponse` in the state, e.g.: +To return a custom body or status code from values at runtime, set +`webhookResponse` in the state, e.g.: ```js fn(state => ({ @@ -136,20 +137,20 @@ fn(state => ({ })); ``` -At the end of the run, the value of `state.webhookResponse` will be used to -send the HTTP response back to the caller. Changing the value during the run -does not affect the response, it's only the final state that counts. +At the end of the run, the value of `state.webhookResponse` will be used to send +the HTTP response back to the caller. Changing the value during the run does not +affect the response, it's only the final state that counts. Both `status` and `body` are **optional** — you can include either or both: -| Field | Behaviour when set | -| -------- | --------------------------------------------------------------- | +| Field | Behaviour when set | +| -------- | -------------------------------------------------------------- | | `status` | Overrides the configured status code for this run | | `body` | Replaces the final run state under `data` in the response body | | neither | Falls back to the configured status code and final run state | -`webhookResponse.body` only replaces the `data` portion of the response — -`meta` is always included by OpenFn. So the example above produces: +`webhookResponse.body` only replaces the `data` portion of the response — `meta` +is always included by OpenFn. So the example above produces: ```json { diff --git a/docs/build/workflow-snapshots.md b/docs/build/workflow-snapshots.md index 81e8923869a2..39fb88da86cb 100644 --- a/docs/build/workflow-snapshots.md +++ b/docs/build/workflow-snapshots.md @@ -4,60 +4,94 @@ sidebar_label: Workflow Snapshots slug: /workflow-snapshots --- -Workflow snapshots capture and store a state/version of a workflow (a combination of input, workflow configuration and job code) at a specific point in time when a workflow was updated or run. Snapshots are helpful with debugging, auditing, and improving overall workflow performance. +Workflow snapshots capture and store a state/version of a workflow (a +combination of input, workflow configuration and job code) at a specific point +in time when a workflow was updated or run. Snapshots are helpful with +debugging, auditing, and improving overall workflow performance. ### When is a snapshot made? + Snapshots are created in 2 ways: -1. When a user saves changes to their workflow either through the canvas or the Inspector + +1. When a user saves changes to their workflow either through the canvas or the + Inspector 2. When a run is made either by creating a new work order or retrying a run ### How can I view a snapshot? -To view a snapshot, go to the `History` page. Expand a work order to see the runs included. + +To view a snapshot, go to the `History` page. Expand a work order to see the +runs included. ![Snapshot1](/img/snapshots1.webp) -From the expanded history view, there are two ways to visualize snapshots: +From the expanded history view, there are two ways to visualize snapshots: + 1. By inspecting a step in the run 2. From the Run view #### Viewing a snapshot by inspecting a step in the run -Click on the inspect icon in front of the step you would like to view. +Click on the inspect icon in front of the step you would like to view. ![Inspect](/img/inspect.webp) -This will open the [inspector screen](../build/steps/step-editor.md) for that step in the run with all associated artifacts: logs and input/output data. On the inspector, you'll notice that you're in a read-only mode, and hovering on the workflow snapshot ID chip, you’ll see a message that reads “You are viewing a snapshot of this workflow that was taken on ….” +This will open the [inspector screen](../build/steps/step-editor.md) for that +step in the run with all associated artifacts: logs and input/output data. On +the inspector, you'll notice that you're in a read-only mode, and hovering on +the workflow snapshot ID chip, you’ll see a message that reads “You are viewing +a snapshot of this workflow that was taken on ….” ![Snapshot2](/img/snapshots2.webp) -To view the corresponding canvas for this snapshot, close this inspector view by clicking the `X` on the top right corner of the page. This will open the associated canvas with the step selected as shown below. - +To view the corresponding canvas for this snapshot, close this inspector view by +clicking the `X` on the top right corner of the page. This will open the +associated canvas with the step selected as shown below. + ![Snapshot3](/img/snapshots3.webp) -From the canvas, you can inspect any step by clicking on the step and opening the inspector for the run associated with the step and snapshot. +From the canvas, you can inspect any step by clicking on the step and opening +the inspector for the run associated with the step and snapshot. #### Viewing a snapshot from the Run view -From the expanded history view, click on the run ID to open the run view. + +From the expanded history view, click on the run ID to open the run view. ![Snapshot4](/img/snapshots4.webp) -From this view, click on the Workflow name (Simple Flow) to open the workflow canvas for this snapshot. -Similar to viewing a snapshot by inspecting a step, you can click the inspect icon in front of the steps to open the inspector for the step. +From this view, click on the Workflow name (Simple Flow) to open the workflow +canvas for this snapshot. Similar to viewing a snapshot by inspecting a step, +you can click the inspect icon in front of the steps to open the inspector for +the step. ### Editing a Snapshot -Snapshots are read-only and serve as a reference for the state of a workflow when saved or a run is executed. As only the latest version can be edited, in order to edit the workflow you can click on the `Switch to latest version` on the canvas or use the toggle at the bottom right of the inspector page to switch to the latest version of the workflow. -When you switch to the latest version, the snapshot ID tag will change to blue colour and the text will be `latest`. +Snapshots are read-only and serve as a reference for the state of a workflow +when saved or a run is executed. As only the latest version can be edited, in +order to edit the workflow you can click on the `Switch to latest version` on +the canvas or use the toggle at the bottom right of the inspector page to switch +to the latest version of the workflow. + +When you switch to the latest version, the snapshot ID tag will change to blue +colour and the text will be `latest`. ![Snapshot5](/img/snapshots5.webp) ![Snapshot6](/img/snapshots6.webp) ### Retrying a Snapshot -When retrying a run with a snapshot, the retry will be executed with the latest version of the workflow and job code. You cannot retry a workflow with an earlier snapshot, only with the latest version. + +When retrying a run with a snapshot, the retry will be executed with the latest +version of the workflow and job code. You cannot retry a workflow with an +earlier snapshot, only with the latest version. ### Snapshots and Version Control -As they save a workflow as a particular set of configuration, input data and job code, snapshots are mainly tools to help administrators with auditing and dealing with errors (such as, for example, why a case hasn't been updated correctly in a database). +As they save a workflow as a particular set of configuration, input data and job +code, snapshots are mainly tools to help administrators with auditing and +dealing with errors (such as, for example, why a case hasn't been updated +correctly in a database). -OpenFn offers dedicated tools for [version control](../manage-projects/link-to-gh.md) that allows you and your team to manage changes in job code for faster and safer development, debugging and revision. \ No newline at end of file +OpenFn offers dedicated tools for +[version control](../manage-projects/link-to-gh.md) that allows you and your +team to manage changes in job code for faster and safer development, debugging +and revision. diff --git a/docs/build/workflows-api.md b/docs/build/workflows-api.md index 618db1dd9c02..2456285c381f 100644 --- a/docs/build/workflows-api.md +++ b/docs/build/workflows-api.md @@ -23,8 +23,8 @@ from the app. If you're using the http adaptor, set the `access_token` on the credential to your PAT. -If you are using curl, add the bearer token (in the example below the token -will be expanded from an env var): +If you are using curl, add the bearer token (in the example below the token will +be expanded from an env var): ``` curl -H "Authorization: Bearer $OPENFN_PAT" https://app.openfn.org/api/projects//workflows diff --git a/docs/build/working-with-branches.md b/docs/build/working-with-branches.md index b11814e219f3..8f520a0532ea 100644 --- a/docs/build/working-with-branches.md +++ b/docs/build/working-with-branches.md @@ -3,9 +3,9 @@ title: Manage changes with GitHub branches sidebar_label: Manage changes --- -In the [Edit Steps Locally](../build/editing-locally.md) section, we walked through -the process of creating and adding your changes to the `main` branch of a -project. +In the [Edit Steps Locally](../build/editing-locally.md) section, we walked +through the process of creating and adding your changes to the `main` branch of +a project. However, most code change to workflows involve sharing and reviewing changes before deployment. You can do this by creating, testing and sharing your changes @@ -56,7 +56,7 @@ repo to your local folder. 8. To keep your local copy up to date with the remote repo, switch to `main` with `git checkout main` and hit `git pull` to pull any changes. -9. If you're still working on your separate branch while `main` has been - updated remotely and want integrate the remote changes, use `git checkout main`, - then `git pull`, then `git checkout {working_branch_name}` followed by +9. If you're still working on your separate branch while `main` has been updated + remotely and want integrate the remote changes, use `git checkout main`, then + `git pull`, then `git checkout {working_branch_name}` followed by `git merge main` to merge changes from `main` into your working branch. diff --git a/docs/contribute/style-guide.md b/docs/contribute/style-guide.md index 3860a6f35e37..80305a133390 100644 --- a/docs/contribute/style-guide.md +++ b/docs/contribute/style-guide.md @@ -80,8 +80,8 @@ Strikethrough uses two tildes. ~~Scratch this.~~ Or leave it empty and use the [link text itself]. URLs and URLs in angle brackets will automatically get turned into links. -http://www.example.com/ or <http://www.example.com/> and sometimes example.com -(but not on GitHub, for example). +http://www.example.com/ or <http://www.example.com/> and sometimes +example.com (but not on GitHub, for example). Some text to show that the reference links can follow later. diff --git a/docs/contribute/writing-code.md b/docs/contribute/writing-code.md index 51fc6555f523..9c4f9d8ed617 100644 --- a/docs/contribute/writing-code.md +++ b/docs/contribute/writing-code.md @@ -7,22 +7,26 @@ title: Writing Code This section is intended to provide developers with a basic introduction to contributing to OpenFn's open-source applications. -There are three ways you can contribute to the OpenFn DPG: +There are three ways you can contribute to the OpenFn DPG: ### 1. Build or extend OpenFn adaptors - Requires knowledge of Javascript and Typescript -- See the [README.md](https://github.com/OpenFn/adaptors#contributing) to learn how to contribute +- See the [README.md](https://github.com/OpenFn/adaptors#contributing) to learn + how to contribute ### 2. Add or improve a feature on the OpenFn Lightning platform + - Requires knowledge of Elixir and Pheonix Liveview -- See the [README.md](https://github.com/OpenFn/lightning#contribute-to-this-project) to learn how to contribute +- See the + [README.md](https://github.com/OpenFn/lightning#contribute-to-this-project) to + learn how to contribute ### 3. Add to or improve our documentation Please feel free to point out [issues](https://github.com/openfn/docs/issues) -with the OpenFn documentation or, if you can't find the right repo, issues with the -tools themselves. (The more feedback the better!). If you want to propose some -new language for the documentation, you can make those changes by clicking the -**"Edit this page"** link at the bottom of any page and submit a pull request! - +with the OpenFn documentation or, if you can't find the right repo, issues with +the tools themselves. (The more feedback the better!). If you want to propose +some new language for the documentation, you can make those changes by clicking +the **"Edit this page"** link at the bottom of any page and submit a pull +request! diff --git a/docs/deploy/options.md b/docs/deploy/options.md index 426fe8d172b0..1d7b1ce0bc58 100644 --- a/docs/deploy/options.md +++ b/docs/deploy/options.md @@ -11,13 +11,14 @@ outside your country's borders. :::success Portability -Because of OpenFn's [portability specification](/documentation/deploy/portability) and open-source +Because of OpenFn's +[portability specification](/documentation/deploy/portability) and open-source deployment tools you can transition between these various pathways at any time. We're committed to a **no vendor lock-in** experience. ::: -| Pathway | Free Cloud | OpenFn Cloud | Dedicated | Do-it-yourself (DIY) | +| Pathway | Free Cloud | OpenFn Cloud | Dedicated | Do-it-yourself (DIY) | | :-------------------: | :------------------------------------------------------------------------------------------: | :-----------------------------------------------------------------------------------------------------------: | :-------------------------------------------------------------------------------------------------------------------------------------: | :----------------------------------------------------------------------------------------------------------------: | | Description | Go live today on OpenFn.org for small scale projects | Scale up and down, pay only for what you need | A dedicated, unrestricted OpenFn installation anywhere in the world on our servers or yours | Deploy and manage your own solutions with OpenFn | | License | Free forever with usage limitations | **SaaS** [plans](https://www.openfn.org/pricing); contact enterprise@openfn.org for custom/invoice agreements | **SDaaS** includes deployment, maintenance, security patches, upgrades, and troubleshooting as a service; contact enterprise@openfn.org | LGPLv3 means use freely as part of any closed or open-source solution, but make all _derivative_ works open source | diff --git a/docs/deploy/portability-versions.md b/docs/deploy/portability-versions.md index 4a3bf7867526..6f60d19ea47e 100644 --- a/docs/deploy/portability-versions.md +++ b/docs/deploy/portability-versions.md @@ -12,8 +12,8 @@ This document provides a reference to older versions of the specification. The v3 standard was created for the v2 platform and is linked to the Lightning project. -V3 uses the legacy CLI deploy commands and protocols. It is still fully supported -by the app and CLI, but is being phased out as of May 2026. +V3 uses the legacy CLI deploy commands and protocols. It is still fully +supported by the app and CLI, but is being phased out as of May 2026. [See the v3 specification here](/documentation/deploy/portability-v3) diff --git a/docs/design/api-discovery.md b/docs/design/api-discovery.md index 5eb03234ff98..46dcaaeee58e 100644 --- a/docs/design/api-discovery.md +++ b/docs/design/api-discovery.md @@ -1,98 +1,153 @@ --- sidebar_label: API Discovery -title: API Discovery for Workflow Design +title: API Discovery for Workflow Design --- # Discovering APIs to inform your workflow automation design -This article explains how to analyze API documentation and draft a technical workflow diagram. + +This article explains how to analyze API documentation and draft a technical +workflow diagram. ## What is an API? -APIs tell applications how to communicate. An API is the “messenger” that: + +APIs tell applications how to communicate. An API is the “messenger” that: + 1. Tells you how to form a request, -2. Delivers your request to the provider that you’re requesting it from, and then +2. Delivers your request to the provider that you’re requesting it from, and + then 3. Delivers the response back to you -| ![Workflow](/img/api_diagram.webp) | -|:--:| -| *[Source](https://snipcart.com/blog/integrating-apis-introduction)*| +| ![Workflow](/img/api_diagram.webp) | +| :-----------------------------------------------------------------: | +| _[Source](https://snipcart.com/blog/integrating-apis-introduction)_ | -OpenFn connects with APIs via http requests sent via the web. OpenFn can automate any tasks supported by the APIs of the applications it integrates with (e.g., if an app’s API supports sending payments, then OpenFn can automate sending payments). +OpenFn connects with APIs via http requests sent via the web. OpenFn can +automate any tasks supported by the APIs of the applications it integrates with +(e.g., if an app’s API supports sending payments, then OpenFn can automate +sending payments). ## How to analyze API documentation -In the beginning of the design process, you should explore the target system’s API documentation to determine the options for integration. - +In the beginning of the design process, you should explore the target system’s +API documentation to determine the options for integration. ### Determine integration options -Consider these questions to determine your integration options–even if an API is not available. : -1. Is there a RESTful API? - - If yes, OpenFn can connect out-of-box! REST API is the gold standard for most modern web apps, and typically supports JSON data format. -2. Is there a webhook? - - Most mobile data collection apps offer this feature. Some call it “data forwarding”, “web callback”, or “HTTP push API”. - - Webhooks automatically send messages or notifications when something happens (e.g., when a new form is submitted, notify external services like OpenFn). These event-based notifications enable real-time data integration or automated actions. -3. Otherwise, what are other options for importing/exporting data from the target applications? - - Can you connect directly to a database? - - Is there a way to import/export files? (JSON, CSV, XLS, or XML) - - Is there a legacy API (e.g., SOAP) that we can communicate with via HTTP requests? - -:::tip -OpenFn can connect any app, even if an API is not supported. See the [“Adaptors”](/adaptors) section to learn more. -::: +Consider these questions to determine your integration options–even if an API is +not available. : + +1. Is there a RESTful API? + - If yes, OpenFn can connect out-of-box! REST API is the gold standard for + most modern web apps, and typically supports JSON data format. +2. Is there a webhook? + - Most mobile data collection apps offer this feature. Some call it “data + forwarding”, “web callback”, or “HTTP push API”. + - Webhooks automatically send messages or notifications when something + happens (e.g., when a new form is submitted, notify external services like + OpenFn). These event-based notifications enable real-time data integration + or automated actions. +3. Otherwise, what are other options for importing/exporting data from the + target applications? + - Can you connect directly to a database? + - Is there a way to import/export files? (JSON, CSV, XLS, or XML) + - Is there a legacy API (e.g., SOAP) that we can communicate with via HTTP + requests? + +:::tip + +OpenFn can connect any app, even if an API is not supported. See the +[“Adaptors”](/adaptors) section to learn more. +::: ### Authentication -API documentation will typically have a section dedicated to authentication options. Look for this to discover which authentication methods are supported, and whether configuration work will be required to set up a new user or API credential. -Consider that authentication methods that leverage API Keys or OAuth are typically more secure than basic authentication (username/password). +API documentation will typically have a section dedicated to authentication +options. Look for this to discover which authentication methods are supported, +and whether configuration work will be required to set up a new user or API +credential. + +Consider that authentication methods that leverage API Keys or OAuth are +typically more secure than basic authentication (username/password). -:::tip +:::tip -As early as possible, request an API credential from the system administrator of the app you’re trying to integrate with. This way, you can test authentication with a developer/test environment to verify that you’re able to connect. +As early as possible, request an API credential from the system administrator of +the app you’re trying to integrate with. This way, you can test authentication +with a developer/test environment to verify that you’re able to connect. ::: ### API Endpoints -Analyze the documentation to see which resources/entities and features are supported by the API. For example, if you want to register Patient records via the API, search for reference to the “/patients” endpoint (or whatever this resource is called in your target application). -This section of the documentation will include an overview of which HTTP request methods (i.e., POST, GET, etc.) and request parameters are supported, as well as example HTTP requests you can send to the API. +Analyze the documentation to see which resources/entities and features are +supported by the API. For example, if you want to register Patient records via +the API, search for reference to the “/patients” endpoint (or whatever this +resource is called in your target application). + +This section of the documentation will include an overview of which HTTP request +methods (i.e., POST, GET, etc.) and request parameters are supported, as well as +example HTTP requests you can send to the API. + +**HTTP request methods will inform you which operations are supported by the +API.** -__HTTP request methods will inform you which operations are supported by the API.__ 1. __C__reate → POST 2. __R__ead → GET 3. __U__pdate → PUT or PATCH 4. __D__elete → DELETE -For example, if you want to query Patient records from an app, see if the API documentation supports `GET ‘/patients’`. +For example, if you want to query Patient records from an app, see if the API +documentation supports `GET ‘/patients’`. ### Limits -Be on the lookout for API limits. Documentation will often have a dedicated section that will describe if there are any limits or considerations for API requests and rates, concurrency, and record limits. Understanding these limits upfront can inform your integration design to ensure high-performing, scalable automation. + +Be on the lookout for API limits. Documentation will often have a dedicated +section that will describe if there are any limits or considerations for API +requests and rates, concurrency, and record limits. Understanding these limits +upfront can inform your integration design to ensure high-performing, scalable +automation. ## Technical Workflow Diagramming -The output of API discovery should be a “technical” workflow diagram. This diagram is different from the functional workflow diagram produced during [“Discovery”](/documentation/design/discovery) in that it captures the technical specifications for how to integrate with target applications. These specifications include the specific methods/operations (e.g., GET, POST) and the database/API names of the target resources (i.e., specific API endpoints or database tables). +The output of API discovery should be a “technical” workflow diagram. This +diagram is different from the functional workflow diagram produced during +[“Discovery”](/documentation/design/discovery) in that it captures the technical +specifications for how to integrate with target applications. These +specifications include the specific methods/operations (e.g., GET, POST) and the +database/API names of the target resources (i.e., specific API endpoints or +database tables). ![Workflow](/img/api_example.webp) -__When drafting your technical specifications, consider the following:__ -1. __Plan for failure. Your workflows will fail. Consider what happens when they do…__ - - Should individuals be notified? - - How can the workflow be re-processed safely? - - How to ensure no duplicate data is created? -2. __Where possible, use unique identifiers to build idempotent automation. Check for existing records in the target system using an available unique identifier:__ - - System record UUIDs (e.g., record_id: asjd2910-b8zy1s0a), - - Unique codes (e.g., HOUSEHOLD-10013) and - - Unique combination of attributes (e.g., familyName + phoneNumber + village + districtCode) -3. __If the target system does not have native “upsert” operation or built-in duplicate-checking before insert, implement an upsert (“update or insert”) pattern to…__ - - Check if a record exists using a unique identifier… - - If yes, update the record. - - If not, insert a new record. -4. __Don’t forget to consider data volumes. Depending on whether you need to handle 1, 10000, or 1M+ records, your workflow approach may need change.__ - - Estimate the file size of the data to be extracted - - Consider API limits (records returned per page, request rate limits) - - Consider bulk operations & batching requests - - -Check out the technical workflow diagram below for syncing forms submissions from KoboToolBox to DHIS2. The original functional diagram can be found [here](/documentation/design/discovery#workflow-requirements-gathering). - -![Workflow](/img/technical_example.webp) \ No newline at end of file +**When drafting your technical specifications, consider the following:** + +1. **Plan for failure. Your workflows will fail. Consider what happens when they + do…** + - Should individuals be notified? + - How can the workflow be re-processed safely? + - How to ensure no duplicate data is created? +2. **Where possible, use unique identifiers to build idempotent automation. + Check for existing records in the target system using an available unique + identifier:** + - System record UUIDs (e.g., record_id: asjd2910-b8zy1s0a), + - Unique codes (e.g., HOUSEHOLD-10013) and + - Unique combination of attributes (e.g., familyName + phoneNumber + + village + districtCode) +3. **If the target system does not have native “upsert” operation or built-in + duplicate-checking before insert, implement an upsert (“update or insert”) + pattern to…** + - Check if a record exists using a unique identifier… + - If yes, update the record. + - If not, insert a new record. +4. **Don’t forget to consider data volumes. Depending on whether you need to + handle 1, 10000, or 1M+ records, your workflow approach may need change.** + - Estimate the file size of the data to be extracted + - Consider API limits (records returned per page, request rate limits) + - Consider bulk operations & batching requests + +Check out the technical workflow diagram below for syncing forms submissions +from KoboToolBox to DHIS2. The original functional diagram can be found +[here](/documentation/design/discovery#workflow-requirements-gathering). + +![Workflow](/img/technical_example.webp) diff --git a/docs/design/design-overview.md b/docs/design/design-overview.md index c05ae99ea193..3edf96decf1e 100644 --- a/docs/design/design-overview.md +++ b/docs/design/design-overview.md @@ -3,35 +3,46 @@ sidebar_label: Design Process Overview title: Design Process Overview --- -This article outlines the high-level steps to design automated workflows, inspired by the OpenFn core team’s standard implementation process. +This article outlines the high-level steps to design automated workflows, +inspired by the OpenFn core team’s standard implementation process. -Typically the design process happens outside of OpenFn, in conversation and collaboration with relevant business/program and technical stakeholders. Then, once the design is finalized, the workflow configuration, testing, monitoring, and management is handled in OpenFn. +Typically the design process happens outside of OpenFn, in conversation and +collaboration with relevant business/program and technical stakeholders. Then, +once the design is finalized, the workflow configuration, testing, monitoring, +and management is handled in OpenFn. -## Key Terms +## Key Terms -Before you dive in, make sure you have a clear understanding of these key terms we’ll reference throughout this documentation: +Before you dive in, make sure you have a clear understanding of these key terms +we’ll reference throughout this documentation: ### Workflow -The set of instructions that determine how to solve a problem or accomplish a task. They are often broken down into smaller, independent tasks. -![Workflow](/img/workflow.webp) +The set of instructions that determine how to solve a problem or accomplish a +task. They are often broken down into smaller, independent tasks. +![Workflow](/img/workflow.webp) ### Workflow Automation -The use of software to perform these tasks independently, in accordance with predefined business rules, and without the need for human input. + +The use of software to perform these tasks independently, in accordance with +predefined business rules, and without the need for human input. ![Workflow Automation](/img/workflow_automation.webp) ### Data Integration -The process of combining data from different sources into a centralized view. Data integration is a means of achieving workflow automation. Its tasks may be streamlined, automated, and managed by a workflow automation tool. +The process of combining data from different sources into a centralized view. +Data integration is a means of achieving workflow automation. Its tasks may be +streamlined, automated, and managed by a workflow automation tool. ![Data Integration](/img/data_integration.webp) - ## Introduction -Workflow automation design features 5 main steps that are covered in depth in other articles: +Workflow automation design features 5 main steps that are covered in depth in +other articles: + 1. [Discovery & Scoping](/documentation/design/discovery) 2. [Workflow Design](/documentation/design/design-workflow) 3. [API Discovery and Technical Design](/documentation/design/api-discovery) @@ -39,6 +50,12 @@ Workflow automation design features 5 main steps that are covered in depth in ot 5. [Workflow Specifications](/documentation/design/workflow-specs) ### Example Use Case -Throughout the design documentation we will reference the fictional data collection & workflow automation scenario below: -_PatientCare is a health NGO that runs a network of community health workers who provide care to patients in remote areas in Guinea. PatientCare workers collect patient data in [KoboToolBox](https://www.kobotoolbox.org/). The Guinean government uses [DHIS2](http://dhis2.org) as its national health information system (HIS) and requires PatientCare to register all patient data in the HIS._ \ No newline at end of file +Throughout the design documentation we will reference the fictional data +collection & workflow automation scenario below: + +_PatientCare is a health NGO that runs a network of community health workers who +provide care to patients in remote areas in Guinea. PatientCare workers collect +patient data in [KoboToolBox](https://www.kobotoolbox.org/). The Guinean +government uses [DHIS2](http://dhis2.org) as its national health information +system (HIS) and requires PatientCare to register all patient data in the HIS._ diff --git a/docs/design/design-workflow.md b/docs/design/design-workflow.md index 39cbf415bdba..bc709572ac2b 100644 --- a/docs/design/design-workflow.md +++ b/docs/design/design-workflow.md @@ -5,32 +5,45 @@ title: Design your first workflow to automate # Designing your first OpenFn workflow -This article explains how to use the information gathered during discovery to determine the specific workflow steps, design your workflow, and draft a diagram to document the steps in the process you would like to automate. +This article explains how to use the information gathered during discovery to +determine the specific workflow steps, design your workflow, and draft a diagram +to document the steps in the process you would like to automate. ## Why diagram your workflow? -During requirements gathering you might outline the new workflow with a list of steps or use existing documentation on a business process/protocol. -__For example:__ + +During requirements gathering you might outline the new workflow with a list of +steps or use existing documentation on a business process/protocol. **For +example:** + 1. New patient visits clinic 2. Worker registers patient in mobile app (KoboToolBox) 3. Every day, sync new patients to national health information system (DHIS2) -Next, consider visually outlining the structure and flow of a workflow to ensure it can be more easily understood by various stakeholders. Diagraming can help to capture: +Next, consider visually outlining the structure and flow of a workflow to ensure +it can be more easily understood by various stakeholders. Diagraming can help to +capture: + 1. The right flow/sequence of steps, 2. Dependencies, 3. Redundancies, and -4. Who is responsible for each step - +4. Who is responsible for each step ## Main steps to workflow diagramming + 1. Diagram the human/manual process steps of this workflow, 2. Identify opportunities for automation, -3. Detail the functional steps of the ideal automation process, -4. Share the diagram with all stakeholders for final sign off, and update it as necessary +3. Detail the functional steps of the ideal automation process, +4. Share the diagram with all stakeholders for final sign off, and update it as + necessary -The output of this exercise is clear documentation on how a business process will be executed by automation, humans, and often a combination of both. +The output of this exercise is clear documentation on how a business process +will be executed by automation, humans, and often a combination of both. ## Diagram using global standards -When diagramming, consider using global standards like BPMN (business process model and notation) so that diagrams are consistent and can be understood by outside parties. BPMN (learn more about standard + +When diagramming, consider using global standards like BPMN (business process +model and notation) so that diagrams are consistent and can be understood by +outside parties. BPMN (learn more about standard [BPMN 2.0](https://www.omg.org/spec/BPMN/2.0/)) has flowchart-like symbols and precise notation that can be translated to software process components. diff --git a/docs/design/discovery.md b/docs/design/discovery.md index fe42390af2d2..87a1a2d6a237 100644 --- a/docs/design/discovery.md +++ b/docs/design/discovery.md @@ -159,6 +159,6 @@ requirements. Check out the example solution architecture diagrams below. **Example 2:** -| ![Workflow](/img/solution_diagram2.webp) | +| ![Workflow](/img/solution_diagram2.webp) | | :------------------------------------------------------------------------------------------------------------------------------------------------: | | _[Source](https://lucid.app/lucidchart/1e997197-2d67-4393-8394-a532d83561b2/edit?invitationId=inv_85b809a1-6fbd-4275-abdc-618fbd56e90d&page=0_0#)_ | diff --git a/docs/design/mapping-specs.md b/docs/design/mapping-specs.md index 8e0e6bebce67..8f6c4fca2a98 100644 --- a/docs/design/mapping-specs.md +++ b/docs/design/mapping-specs.md @@ -31,7 +31,7 @@ elements should be mapped, reassigned, cleaned, transformed, and/or calculated. file with “dummy” data. 3. Start “mapping” the data elements and recording transformation rules! -| ![mapping](/img/mapping_process.webp) | +| ![mapping](/img/mapping_process.webp) | | :--------------------------------------------------------: | | _The data mapping process for data integration solutions._ | diff --git a/docs/design/overview.md b/docs/design/overview.md index 51e216f2ff3b..4a339293fb7d 100644 --- a/docs/design/overview.md +++ b/docs/design/overview.md @@ -2,13 +2,16 @@ sidebar_label: Design Process title: Design Process for OpenFn Solutions --- + :::warning Under construction -This docs page is under construction. Check back later for the complete docs, or check out the Docs Version "Platform (v1)". +This docs page is under construction. Check back later for the complete docs, or +check out the Docs Version "Platform (v1)". ::: # Getting started with workflow automation design for OpenFn projects + Overview of design process and key outputs/artifacts... **Integration design begins with the functional or business requirements (not @@ -76,8 +79,7 @@ information will be exchanged? With _whom_ (between which systems or users)? _When_ will the information be exchanged? And what are the human or automation steps that should facilitate and trigger this exchange? These business process questions are discussed in more detail on the -[So, what is an integration?](/documentation/tutorials/tutorial/) -page. +[So, what is an integration?](/documentation/tutorials/tutorial/) page. :::tip @@ -196,5 +198,5 @@ solution, as well as memorialize the business decisions and agreements made by implementing partners. Share this documentation with any technical implementation team, or check out -the [Build](/documentation/build/workflows) documentation section to learn how to -implement these design specifications using OpenFn. \ No newline at end of file +the [Build](/documentation/build/workflows) documentation section to learn how +to implement these design specifications using OpenFn. diff --git a/docs/design/workflow-specs.md b/docs/design/workflow-specs.md index 7b102e809844..370d65142b80 100644 --- a/docs/design/workflow-specs.md +++ b/docs/design/workflow-specs.md @@ -5,23 +5,28 @@ title: Writing Workflow Automation Specifications # Writing specifications for workflow automation solutions -__The key outputs of the the design process are:__ +**The key outputs of the the design process are:** 1. [Functional Workflow diagram](/documentation/design/discovery#workflow-requirements-gathering) 2. [Technical Workflow diagram](/documentation/design/discovery#workflow-requirements-gathering) 3. [Solution Architecture Diagram](/documentation/design/discovery#documenting-the-solution-architecture) 4. [Data element mapping specifications](/documentation/design/mapping-specs) +Given these, you’ll be ready to finalize your workflow specifications and +hand-off to developers for job-writing! -Given these, you’ll be ready to finalize your workflow specifications and hand-off to developers for job-writing! - -Each “task” or “step” in the OpenFn swimlane of your technical diagram can be implemented as a distinct operation in your workflow configuration. In the example diagram below, you might implement 1 job with 3 chained operations, or 3 jobs with 1 operation each. +Each “task” or “step” in the OpenFn swimlane of your technical diagram can be +implemented as a distinct operation in your workflow configuration. In the +example diagram below, you might implement 1 job with 3 chained operations, or 3 +jobs with 1 operation each. ![workflow](/img/workflow_specs.webp) -__The workflow specifications should link to all of the design artifacts and highlight the following:__ +**The workflow specifications should link to all of the design artifacts and +highlight the following:** + 1. The required number of OpenFn jobs and the function of each 2. Links to sample input/output and API documentation 3. Unique identifiers 4. Expected data volumes -5. Authentication requirements \ No newline at end of file +5. Authentication requirements diff --git a/docs/get-help/support.md b/docs/get-help/support.md index df511222aa6d..2a73f0ecc831 100644 --- a/docs/get-help/support.md +++ b/docs/get-help/support.md @@ -3,15 +3,26 @@ title: Support for OpenFn Implementations sidebar_label: Get Help --- -## Ask the Community! -If you need help getting started, have questions, or product feedback, first check out our **[Community](https://community.openfn.org)**. Our core team and other OpenFn implementers monitor all posts to help each other out, share examples, and circulate product updates. +## Ask the Community! -## Have a question about your project on OpenFn.org? -If you're using the hosted OpenFn platform SaaS, and have a private question about your project, account, or billing, contact our core team at [support@openfn.org](mailto://support@openfn.org). +If you need help getting started, have questions, or product feedback, first +check out our **[Community](https://community.openfn.org)**. Our core team and +other OpenFn implementers monitor all posts to help each other out, share +examples, and circulate product updates. + +## Have a question about your project on OpenFn.org? + +If you're using the hosted OpenFn platform SaaS, and have a private question +about your project, account, or billing, contact our core team at +[support@openfn.org](mailto://support@openfn.org). ## Need helping hands? -The OpenFn core team and our certified partners offer enterprise support, implementation & developer services, and training to jump-start your team. Check out our website: + +The OpenFn core team and our certified partners offer enterprise support, +implementation & developer services, and training to jump-start your team. Check +out our website: + - About [OpenFn services & pricing](https://www.openfn.org/pricing) - About our [certified partners](https://www.openfn.org/partners) - \ No newline at end of file + diff --git a/docs/get-started/implementation-checklist.md b/docs/get-started/implementation-checklist.md index 1b3c7d852698..70b2d06b29ae 100644 --- a/docs/get-started/implementation-checklist.md +++ b/docs/get-started/implementation-checklist.md @@ -3,18 +3,19 @@ sidebar_label: Implementation Checklist title: Implementation Checklist for planning your next integration project --- - # Implementation Checklist -This [Implementation Checklist](https://docs.google.com/spreadsheets/d/1_XY0nx0OLNUsogrIHnRaSTyZ-KdcSXks-tqwm3ZfMc4/edit#gid=72612093) checklist draws from experience of implementing interoperability projects -with in-country government agencies (incl. UNICEF country offices, Ministry of -Social Services Cambodia, MoH Thailand) to offer an implementation & planning -guide covering key milestones in most interoperability and integration projects. +This +[Implementation Checklist](https://docs.google.com/spreadsheets/d/1_XY0nx0OLNUsogrIHnRaSTyZ-KdcSXks-tqwm3ZfMc4/edit#gid=72612093) +checklist draws from experience of implementing interoperability projects with +in-country government agencies (incl. UNICEF country offices, Ministry of Social +Services Cambodia, MoH Thailand) to offer an implementation & planning guide +covering key milestones in most interoperability and integration projects. While this checklist should be tailored for each implementation, the tasks -outlined provide a template workplan that can help any organization prepare -for their upcoming implementation. **The implementation process is broken up into the seven phases summarized below. Check out the checklist for detailed steps.** - +outlined provide a template workplan that can help any organization prepare for +their upcoming implementation. **The implementation process is broken up into +the seven phases summarized below. Check out the checklist for detailed steps.** :::tip @@ -25,51 +26,59 @@ partner NGOs: [openfn.github.io/unicef-cambodia/](https://openfn.github.io/unicef-cambodia/) ::: - - - ## (1) Preparing for the Implementation -Set the project up for success by creating a project plan, defining roles responsibilities, documenting the business value of the implementation, and confirming the technical feasibility of the implementation. + +Set the project up for success by creating a project plan, defining roles +responsibilities, documenting the business value of the implementation, and +confirming the technical feasibility of the implementation. Key Outputs: + - Business Value Assessment - High-level workflow requirements -- Technical Feasibility Assessment +- Technical Feasibility Assessment - Capacity Assessment - ## (2) Discovery & Design - Functional Workflow Requirements + Gather and document user stories and functional workflow requirements. Key Outputs: + - Solution Architecture Diagram -- Workflow Diagrams (functional) +- Workflow Diagrams (functional) - Data Element Mapping Specifications (functional) - ## (3) Discovery & Design - Technical Specifications -Iterate on workflow requirements to define technical specifications for how the workflow will be implemented. For instance, consider specific API endpoints to access and HTTP methods/operations to use for each. + +Iterate on workflow requirements to define technical specifications for how the +workflow will be implemented. For instance, consider specific API endpoints to +access and HTTP methods/operations to use for each. Key Outputs: + - Solution Architecture Diagram -- Workflow Diagrams (technical) +- Workflow Diagrams (technical) - Data Element Mapping Specifications (technical) ## (4) Build -Configure the workflow on OpenFn.org and develop and test the jobs and adaptors to be used in the workflow. +Configure the workflow on OpenFn.org and develop and test the jobs and adaptors +to be used in the workflow. Key Outputs: + - OpenFn Project configuration - Jobs - Adaptors - new/updated (if needed) -- Drafted “Project Security Configuration Checklist” to document config settings implemented - - +- Drafted “Project Security Configuration Checklist” to document config settings + implemented ## (5) Testing -Create a test suite and conduct UAT. After UAT, Incorporate any feedback and iterate on the testing process. + +Create a test suite and conduct UAT. After UAT, Incorporate any feedback and +iterate on the testing process. Key Outputs: @@ -77,32 +86,34 @@ Key Outputs: - Backlog of new requests (if feedback identified for future phases) - Completed “Project Security Configuration Checklist” - - ## (6) Training & Prep for Go-Live -Train OpenFn administrators and target system end users and document what was implemented. This is also the phase where the configuration and code is migrated to production environments. + +Train OpenFn administrators and target system end users and document what was +implemented. This is also the phase where the configuration and code is migrated +to production environments. Key Outputs: -- Published documentation + +- Published documentation - Training video recording - Signed-off “Project Security Configuration Checklist” - Ready-to-go OpenFn project - - ## (7) Rollout & Support -Turn “on” OpenFn workflows to go-live and establish support structures & a governance model for change management. + +Turn “on” OpenFn workflows to go-live and establish support structures & a +governance model for change management. Key Outputs: + - “Live” OpenFn project - Documented support model - - ## Questions or feedback? If you have any inputs, comments, or questions—please contribute! Submit a pull request to this documentation page on GitHub or leave a comment in [OpenFn Community](https://community.openfn.org/). -Interested in receiving **training on the OpenFn implementation process**? Contact [partnerships@openfn.org](mailto://partnerships@openfn.org). +Interested in receiving **training on the OpenFn implementation process**? +Contact [partnerships@openfn.org](mailto://partnerships@openfn.org). diff --git a/docs/get-started/standards.md b/docs/get-started/standards.md index 620530cc5176..f7163eae3e7f 100644 --- a/docs/get-started/standards.md +++ b/docs/get-started/standards.md @@ -76,7 +76,7 @@ OpenFn supports the [functional requirements](https://guides.ohie.org/arch-spec/openhie-component-specifications-1/openhie-interoperability-layer-iol#openhie-iol-functional-requirements) of the OpenHIE IOL, therefore some organizations also use OpenFn as their central interoperability layer. That said, please note that OpenFn cannot yet be -used as a fully OpenHIE-compliant **_interoperability layer _**because it does +used as a fully OpenHIE-compliant **\_interoperability layer _**because it does not leverage the IHE ATNA profile (see [requirement IOL-WF1](https://guides.ohie.org/arch-spec/openhie-component-specifications-1/openhie-interoperability-layer-iol#openhie-iol-workflow-requirements)). diff --git a/docs/hosted/overview.md b/docs/hosted/overview.md index 4811a6f44001..b8d33652e7ca 100644 --- a/docs/hosted/overview.md +++ b/docs/hosted/overview.md @@ -153,7 +153,6 @@ account, choose the payment method they want to use, and then the transfer will be complete and _they_ will pay the next time a payment is owed for that subscription. - ## How It Fits Together (for the engineers 🤓) ```mermaid diff --git a/docs/jobs/best-practices.md b/docs/jobs/best-practices.md index 831038e04be0..d50316f93a69 100644 --- a/docs/jobs/best-practices.md +++ b/docs/jobs/best-practices.md @@ -7,8 +7,8 @@ title: Best Practices If you must reference credential secrets in your job code, you can map keys from your `state.configuration`. The example below dynamically maps the username and -password from your `state.configuration` (or "credential" if using the app) into your -http request body. +password from your `state.configuration` (or "credential" if using the app) into +your http request body. ```js post('/api/v1/auth/login', { @@ -75,4 +75,3 @@ When processing batches of data, you might want to catch errors occurring on individual items and write them to state. That way one bad item won't ruin a whole batch, and you know which items succeeded and which failed. You can then throw an exception to recognise that the job has failed. - diff --git a/docs/jobs/compilation.md b/docs/jobs/compilation.md index c167aa6cba53..56c56b9fc28c 100644 --- a/docs/jobs/compilation.md +++ b/docs/jobs/compilation.md @@ -3,7 +3,6 @@ sidebar_label: Compilation title: Compilation --- - ## Compilation The code you write isn't technically executable JavaScript. You can't just run diff --git a/docs/jobs/data-transformation.md b/docs/jobs/data-transformation.md index d10f21e29dcc..2148855fd18b 100644 --- a/docs/jobs/data-transformation.md +++ b/docs/jobs/data-transformation.md @@ -5,8 +5,8 @@ title: Data Transformation ## Mapping Objects -A common use-case in OpenFn `fn` is to map/convert/transform an object from system -A to the format of system B. +A common use-case in OpenFn `fn` is to map/convert/transform an object from +system A to the format of system B. We often do this in multiple Jobs in the same workflow, so that we can use different adaptors. But in this example we'll work with three operations in one @@ -34,7 +34,7 @@ fn(state => { }); // Post it elsewhere -post('https://system-b.com/api/v1/records/123', (state) => state.uploadData); +post('https://system-b.com/api/v1/records/123', state => state.uploadData); ``` :::tip Batch conversions @@ -134,8 +134,8 @@ each( ); ``` -Each participant is `upserted` into Salesforce, with its salesforce fields mapped -to values in the `participants` array. +Each participant is `upserted` into Salesforce, with its salesforce fields +mapped to values in the `participants` array. :::info JSON paths diff --git a/docs/jobs/javascript.md b/docs/jobs/javascript.md index 136170e438a2..2644b8b25a3f 100644 --- a/docs/jobs/javascript.md +++ b/docs/jobs/javascript.md @@ -44,7 +44,8 @@ you don't even need to declare variables.
What is functional programming? -Functional programming is a style of programming, increasingly popular in modern Javascript. +Functional programming is a style of programming, increasingly popular in modern +Javascript. Broadly, the idea is to minimize the usage of control flow statements (like `if/else`,`for`) and instead use chains of functions. In functional programming @@ -255,7 +256,8 @@ only a shallow clone, and non-primitive values use pointers, not copies.
What is a shallow clone? -To shallow clone an object means to copy all the top-level keys and values of that object onto a new object. +To shallow clone an object means to copy all the top-level keys and values of +that object onto a new object. But this ONLY applies to top-level keys. And if a value contains an object, you're really just copying a _pointer_ to that object. @@ -321,5 +323,3 @@ post('/api/myEndpoint', { body: (state) => state.payload }); ``` - - diff --git a/docs/jobs/operations.md b/docs/jobs/operations.md index d20cc5643bb2..7a2853eff5aa 100644 --- a/docs/jobs/operations.md +++ b/docs/jobs/operations.md @@ -33,7 +33,8 @@ get(state => state.endpoint);
Why the arrow function? -If you've got some JavaScript experience, you'll notice the example above uses an arrow function to retrieve the endpoint key from state. +If you've got some JavaScript experience, you'll notice the example above uses +an arrow function to retrieve the endpoint key from state. But why not just do this? diff --git a/docs/jobs/using-cursors.md b/docs/jobs/using-cursors.md index 091c57249dd0..e523d9307bef 100644 --- a/docs/jobs/using-cursors.md +++ b/docs/jobs/using-cursors.md @@ -19,12 +19,12 @@ which is built-in to most adaptors, to make cursor management easier.
Version support -The cursor operation was introduced to @openfn/language-common in version -1.13.0 (released April 2024). +The cursor operation was introduced to @openfn/language-common in +version 1.13.0 (released April 2024). Any adaptor which uses common 1.12.0 or less will not support the -cursor operation. Consider updating to the latest adaptor version to take advantage -of this functionality. +cursor operation. Consider updating to the latest adaptor version to take +advantage of this functionality.
diff --git a/docs/manage-projects/collaboration.md b/docs/manage-projects/collaboration.md index 524a3ef31aa1..f85e273f2bc0 100644 --- a/docs/manage-projects/collaboration.md +++ b/docs/manage-projects/collaboration.md @@ -69,6 +69,10 @@ To remove a Collaborator from a project, an owner or admin can click the `Remove Collaborator` button on the `Collaboration` page and confirm the removal through the pop up window. The owner of a project cannot be removed. -:::tip The project collaborators page is also where you can configure failure -alerts and digests for your projects. Learn more about it -[in this guide](../manage-projects/notifications.md). ::: +:::tip + +The project collaborators page is also where you can configure failure alerts +and digests for your projects. Learn more about it +[in this guide](../manage-projects/notifications.md). + +::: diff --git a/docs/manage-projects/notifications.md b/docs/manage-projects/notifications.md index 7df6c7aead4f..388be709d628 100644 --- a/docs/manage-projects/notifications.md +++ b/docs/manage-projects/notifications.md @@ -37,6 +37,8 @@ failed runs for each of your workflows. :::note -If you want to adjust your notifications settings and you are a Collaborator on more than 1 Project, then you will need to go to the `Project Settings > Collaboration` page for _each_ Project you belong to. +If you want to adjust your notifications settings and you are a Collaborator on +more than 1 Project, then you will need to go to the +`Project Settings > Collaboration` page for _each_ Project you belong to. ::: diff --git a/docs/manage-projects/platform-mgmt.md b/docs/manage-projects/platform-mgmt.md index 8b9db4412521..02bb65c816f4 100644 --- a/docs/manage-projects/platform-mgmt.md +++ b/docs/manage-projects/platform-mgmt.md @@ -67,14 +67,16 @@ at a time. ### Sync-mode workflows -Note that workflows triggered by webhook and set to respond synchronously are typically -configured by your instance superuser to run in a priority queue (to reduce HTTP -request/response times) and will IGNORE all concurrency limits. I.e., they will use the -max number of available priority workers to reduce response times. +Note that workflows triggered by webhook and set to respond synchronously are +typically configured by your instance superuser to run in a priority queue (to +reduce HTTP request/response times) and will IGNORE all concurrency limits. +I.e., they will use the max number of available priority workers to reduce +response times. :::warning Sync-mode workflows are not limited by project concurrency -They use the maximum number of available workers, as configured by your instance administrator. +They use the maximum number of available workers, as configured by your instance +administrator. ::: diff --git a/docs/manage-projects/staging-prod.md b/docs/manage-projects/staging-prod.md index af1a4caf2f18..552795b479fa 100644 --- a/docs/manage-projects/staging-prod.md +++ b/docs/manage-projects/staging-prod.md @@ -4,7 +4,14 @@ sidebar_label: Staging and Production Projects slug: /staging-prod --- -It's a safe and efficient practice to use separate production and staging/testing projects to build out and test your workflows before starting to use them in production. This can be made seamless using [Version Control](../manage-projects/link-to-gh.md). This guide walks you through how to set up your OpenFn projects and GitHub repo and gives you two examples of how to manage your `Staging > Production` workflow: one for new projects, and one for existing projects where you want to add a staging project and branch. +It's a safe and efficient practice to use separate production and +staging/testing projects to build out and test your workflows before starting to +use them in production. This can be made seamless using +[Version Control](../manage-projects/link-to-gh.md). This guide walks you +through how to set up your OpenFn projects and GitHub repo and gives you two +examples of how to manage your `Staging > Production` workflow: one for new +projects, and one for existing projects where you want to add a staging project +and branch. ### Setup for new projects @@ -16,65 +23,95 @@ It's a safe and efficient practice to use separate production and staging/testin ![Prod and Main Branches](/img/staging_prod_branches_gh.webp) -3. Connect your projects to the `main` and `staging` respectively - use [this guide](../manage-projects/link-to-gh.md) to set up the connection -4. In each repo, create an empty `.js` file for your job. Make sure they have the same name and path on each repo (e.g. `upsert-contacts.js`). These will store the code for the job they'll be linked to in the next step. - -5. When you connected the branches to your projects in step 3 above, there was a `spec.yaml` file automatically created on the branch after the first sync (along with two other configuration files). Open these files on GitHub, and locate your job in the file. Replace the contents of `body` with: `path: {path to the related js file}`. Do this on both your `main` and `staging` branches. - -![Spec Main](/img/path_main.webp) -![Spec Staging](/img/path_staging.webp) - -6. You're now all set up! -7. To sync a change from your Staging project to Production **using the OpenFn app**, go to your `Staging` project on OpenFn and make edits to your job. Then go to your project's `Settings` > Sync to `GitHub`, and click `Initiate Sync to Branch`. -8. Alternatively, you can make edits directly to the job code on Github, and commit them to the `staging` branch on Github. -9. Once you've committed edits to your `staging` branch, on Github you'll see an update that there have been recent changes. Click `Compare & pull request`. +3. Connect your projects to the `main` and `staging` respectively - use + [this guide](../manage-projects/link-to-gh.md) to set up the connection +4. In each repo, create an empty `.js` file for your job. Make sure they have + the same name and path on each repo (e.g. `upsert-contacts.js`). These will + store the code for the job they'll be linked to in the next step. + +5. When you connected the branches to your projects in step 3 above, there was a + `spec.yaml` file automatically created on the branch after the first sync + (along with two other configuration files). Open these files on GitHub, and + locate your job in the file. Replace the contents of `body` with: + `path: {path to the related js file}`. Do this on both your `main` and + `staging` branches. + +![Spec Main](/img/path_main.webp) ![Spec Staging](/img/path_staging.webp) + +6. You're now all set up! +7. To sync a change from your Staging project to Production **using the OpenFn + app**, go to your `Staging` project on OpenFn and make edits to your job. + Then go to your project's `Settings` > Sync to `GitHub`, and click + `Initiate Sync to Branch`. +8. Alternatively, you can make edits directly to the job code on Github, and + commit them to the `staging` branch on Github. +9. Once you've committed edits to your `staging` branch, on Github you'll see an + update that there have been recent changes. Click `Compare & pull request`. ![Create Pull Request](/img/staging_pushes.webp) -10. Create a Pull Request. This will automatically include all changes that happened to the files on the staging branch. +10. Create a Pull Request. This will automatically include all changes that + happened to the files on the staging branch. ![Save Pull Request](/img/create_pr.webp) +11. Depending on your team's Github workflow, either have someone to approve and + merge the Pull Request, or click `Merge pull request`. -11. Depending on your team's Github workflow, either have someone to approve and merge the Pull Request, or click `Merge pull request`. - -12. Your changes will now be automatically deployed to your OpenFn `Production` project (linked to the `main` Github branch). +12. Your changes will now be automatically deployed to your OpenFn `Production` + project (linked to the `main` Github branch). ### Setup for existing projects -1. First, make sure that the code of all your jobs are stored in separate `.js` files (like `Notify-CHW-upload-successful.js`) on Github that are linked in your `spec.yaml` like so: +1. First, make sure that the code of all your jobs are stored in separate `.js` + files (like `Notify-CHW-upload-successful.js`) on Github that are linked in + your `spec.yaml` like so: ```yaml - Notify-CHW-upload-successful: - name: Notify-CHW-upload-successful - adaptor: '@openfn/language-http@latest' - enabled: true - # credential: - # globals: - body: | - path: ./workflow/Notify-CHW-upload-successful.js - + name: Notify-CHW-upload-successful + adaptor: '@openfn/language-http@latest' + enabled: true + # credential: + # globals: + body: | + path: ./workflow/Notify-CHW-upload-successful.js ``` -You can find more information on this setup in our [Github docs](../manage-projects/link-to-gh.md#sync-from-github-to-openfn). +You can find more information on this setup in our +[Github docs](../manage-projects/link-to-gh.md#sync-from-github-to-openfn). -2. When this is set up, create a new `staging` branch on Github based on your existing production `main` branch that stores your current project. To do this, on your Github repo click into `Branches` (where it show `1 Branch` in the screenshot below). +2. When this is set up, create a new `staging` branch on Github based on your + existing production `main` branch that stores your current project. To do + this, on your Github repo click into `Branches` (where it show `1 Branch` in + the screenshot below). ![Branches](/img/1_branch.webp) -3. Click `New branch`, give it a name like `staging`, make sure the source is `main` if you have multiple branches already. Then click `Create new branch`. +3. Click `New branch`, give it a name like `staging`, make sure the source is + `main` if you have multiple branches already. Then click `Create new branch`. ![New Branche](/img/new_branch.webp) -4. Navigate over to your new `staging` branch. **Here comes an important step. Note how the new branch now contains the 3 configurations files (`config.json`, `spec.yaml` and `state.json`) that were present on the main branch. Delete these from the `staging` branch.** New ones specific to the staging branch will be created in the subsequent steps. +4. Navigate over to your new `staging` branch. **Here comes an important step. + Note how the new branch now contains the 3 configurations files + (`config.json`, `spec.yaml` and `state.json`) that were present on the main + branch. Delete these from the `staging` branch.** New ones specific to the + staging branch will be created in the subsequent steps. 5. Now head over to OpenFn, and create a new `Staging` project. -6. Following [this guide](../manage-projects/link-to-gh.md), set up Github connection with your `staging` branch, and click `Initiate a sync` (via the project `Settings > Sync to Github` page). This will create the necessary config files in the Github branch. +6. Following [this guide](../manage-projects/link-to-gh.md), set up Github + connection with your `staging` branch, and click `Initiate a sync` (via the + project `Settings > Sync to Github` page). This will create the necessary + config files in the Github branch. -7. In the newly generated `spec.yaml` file on the `staging` branch on Github, link your job `.js` files as explained in Step 1. +7. In the newly generated `spec.yaml` file on the `staging` branch on Github, + link your job `.js` files as explained in Step 1. -8. When you initiate a new sync from OpenFn, the job code from the workflows configured in the app will be synced to the individual OpenFn job files on Github. +8. When you initiate a new sync from OpenFn, the job code from the workflows + configured in the app will be synced to the individual OpenFn job files on + Github. -9. To make future changes to your "Staging" project, see steps #7-12 above in the `Setup for new projects` section of this guide. +9. To make future changes to your "Staging" project, see steps #7-12 above in + the `Setup for new projects` section of this guide. diff --git a/docs/manage-projects/webhook-auth.md b/docs/manage-projects/webhook-auth.md index f2fa3365673c..f9e0243ecc3a 100644 --- a/docs/manage-projects/webhook-auth.md +++ b/docs/manage-projects/webhook-auth.md @@ -10,8 +10,7 @@ to your webhook. ## Adding a Webhook Authentication Method In your OpenFn projects, you can utilize webhooks to receive data from external -applications using a -[Webhook Trigger](../build/triggers.md). When using a +applications using a [Webhook Trigger](../build/triggers.md). When using a webhook, you can require external applications to authenticate before sending your project data for more security. diff --git a/docs/manage-users/api-tokens.md b/docs/manage-users/api-tokens.md index 0561af575696..2f0f20df9db3 100644 --- a/docs/manage-users/api-tokens.md +++ b/docs/manage-users/api-tokens.md @@ -12,8 +12,7 @@ OpenFn provides API permission for users to build or interact with their project on the platform via the API. You need a Personal Access Token to be able to access the platform via the API. You can find out more about creating or updating your project programmatically, visit our -[Portability](../deploy/portability.md) -page. +[Portability](../deploy/portability.md) page. Your API access provides you the same level of permission as you have as a user on OpenFn (for example, if your profile has Admin level access, your API user diff --git a/docs/manage-users/user-credentials.md b/docs/manage-users/user-credentials.md index 3c1c39a8f6f8..8df5befae24b 100644 --- a/docs/manage-users/user-credentials.md +++ b/docs/manage-users/user-credentials.md @@ -4,39 +4,47 @@ sidebar_label: User Credentials slug: /user-credentials --- -You can manage all the Credentials you own under the `Credentials` page of your profile. This article, we'll walk you through how to manage and share the Credentials you own across projects. +You can manage all the Credentials you own under the `Credentials` page of your +profile. This article, we'll walk you through how to manage and share the +Credentials you own across projects. ### All your Credentials in one place -The `Credentials` page of your `User Settings` allows you to add, view, edit or delete the Credentials you own. It is the central place to manage your Credentials across all projects you collaborate on. +The `Credentials` page of your `User Settings` allows you to add, view, edit or +delete the Credentials you own. It is the central place to manage your +Credentials across all projects you collaborate on. -![User Credential](/img/lightning_user_profile_credentials.webp) +![User Credential](/img/lightning_user_profile_credentials.webp) ![User Credentials List](/img/lightning_edit_user_credential.webp) -For guidance on how to set up a new Credential, head over to our [Manage Credentials](../manage-projects/manage-credentials.md) page. +For guidance on how to set up a new Credential, head over to our +[Manage Credentials](../manage-projects/manage-credentials.md) page. You can update the name and login details of a Credential after clicking `Edit`. ![User Credential Edit View](/img/lightning_cred_edit_view.webp) - ### Share Credentials You can also allow multiple projects to have access to a Credential you own. -To add or remove project access, click `Edit` on the Credential you want to share, and choose the project from the dropdown under `Project Access`. +To add or remove project access, click `Edit` on the Credential you want to +share, and choose the project from the dropdown under `Project Access`. ![Update Project Access](/img/lightning_share_cred_with_project.webp) - + :::info Shared Credentials remain secret -If you share a Credential with a Project, Collaborators of that Project can _use_ the Credential in their Workflows, but they won't be able to see the login details contained. +If you share a Credential with a Project, Collaborators of that Project can +_use_ the Credential in their Workflows, but they won't be able to see the login +details contained. ::: :::tip -If you want to share the login details contained in the Credential, use a secure sharing protocol like a password manager or an encrypted messaging platform. +If you want to share the login details contained in the Credential, use a secure +sharing protocol like a password manager or an encrypted messaging platform. ::: diff --git a/docs/migration/migration-steps.md b/docs/migration/migration-steps.md index 0d3ff12b93aa..467fd9f92918 100644 --- a/docs/migration/migration-steps.md +++ b/docs/migration/migration-steps.md @@ -41,7 +41,8 @@ decisions. For customized migration support, ask your questions on our using the same GitHub repo and branch for both your v1 and v2 project, disable GitHub sync on v1 _before_ you enable it on v2. Otherwise every change you still make on v1 will trigger a GitHub > OpenFn sync on v2, - overwriting any changes you may not have synced yet from your v2 project to GitHub. + overwriting any changes you may not have synced yet from your v2 project to + GitHub. ::: @@ -105,6 +106,7 @@ decisions. For customized migration support, ask your questions on our your v1 `Project Settings` and select the `Delete Project` button. :::tip + [See this XLS checklist](https://docs.google.com/spreadsheets/d/1pTw5_PZ0RNad-haqw_ydel5ka4ezSxcfF71un7Sga5I/edit?usp=sharing) of the above migration steps to help manage your migration. If you encounter questions or issues, post on the [Community](https://community.openfn.org). diff --git a/docs/monitor-history/inspect-runs.md b/docs/monitor-history/inspect-runs.md index e63b28fa78e6..0153b32336fe 100644 --- a/docs/monitor-history/inspect-runs.md +++ b/docs/monitor-history/inspect-runs.md @@ -3,14 +3,14 @@ title: Inspect Runs & Search via the History page sidebar_label: Inspect Runs --- -A [Run](../get-started/terminology.md#run) is created each time -OpenFn attempts to excute a Workflow for a given Work Order. All Runs can be -viewed, filtered, and searched via the `History` page. +A [Run](../get-started/terminology.md#run) is created each time OpenFn attempts +to excute a Workflow for a given Work Order. All Runs can be viewed, filtered, +and searched via the `History` page. In short, Runs tell us "what happened" when OpenFn tried to execute the Workflow. Runs have start times, end times, logs, and -[status codes](./status-codes.md) that indicate -when they took place, what they did, and whether or not they succeeded. +[status codes](./status-codes.md) that indicate when they took place, what they +did, and whether or not they succeeded. ## Inspect Runs diff --git a/docs/monitor-history/rerunning-workflow.md b/docs/monitor-history/rerunning-workflow.md index 3f685bed2e01..26f4dd81bb7a 100644 --- a/docs/monitor-history/rerunning-workflow.md +++ b/docs/monitor-history/rerunning-workflow.md @@ -9,11 +9,11 @@ on their current state. Use **Retry** to re-execute completed work orders, or ## Available Actions by Work Order State -| Work Order State | Available Actions | -| :-------------------------------------------------------------------------------------------- | :---------------- | -| **Pending** (runs waiting in the queue) | Cancel | -| **Running** | None | -| **Final states** (Success, Failed, Crashed, Killed, Exception, Lost, Cancelled, Rejected) | Retry, Retry from | +| Work Order State | Available Actions | +| :---------------------------------------------------------------------------------------- | :---------------- | +| **Pending** (runs waiting in the queue) | Cancel | +| **Running** | None | +| **Final states** (Success, Failed, Crashed, Killed, Exception, Lost, Cancelled, Rejected) | Retry, Retry from | :::info Selecting work orders with mixed states diff --git a/docs/tutorials/tutorial.md b/docs/tutorials/tutorial.md index 18f3cf78cc50..76c7b4228ec7 100644 --- a/docs/tutorials/tutorial.md +++ b/docs/tutorials/tutorial.md @@ -2,21 +2,38 @@ title: Tutorial sidebar_label: Workflow QuickStart --- + # Tutorial: Creating your first workflow # QuickStart: Creating your first workflow + 1. Go to your OpenFn Project > `Workflows` 2. Create a new [Workflow](../build/workflows.md) -3. Choose your [Trigger type](../build/triggers.md): Webhook Event (for real-time integration) or Cron Expression (for timer/scheduled-based integration) -3. Name your first `Step` (e.g., "Import form submission") and open it to choose the [Adaptor](/adaptors), Adaptor `Version`, and [Credential](../build/credentials.md) -4. Click the `` code button to open the [Inspector](../build/steps/step-editor.md) and add job code to the `Editor` panel to define the specific business logic or transformation rules for this workflow -5. In the `Input` panel on the left, add a custom input (e.g., a payload from a webhook request) or simply add empty brackets (`{}`) to run a Workflow with a cron trigger. See the [Workflow docs](docs/build/workflows.md) for help with running and testing Workflow. -6. If the Step suceeds, navigate back to the Canvase view and click the `+` icon to add a second Step. -7. If you want to define conditions for if/when this second Step should execute, update the [Path condition](../build/paths.md). -8. Then repeat the instruction steps #3-6 to finishing configuring this next Step, until the Workflow is complete. +3. Choose your [Trigger type](../build/triggers.md): Webhook Event (for + real-time integration) or Cron Expression (for timer/scheduled-based + integration) +4. Name your first `Step` (e.g., "Import form submission") and open it to choose + the [Adaptor](/adaptors), Adaptor `Version`, and + [Credential](../build/credentials.md) +5. Click the `` code button to open the + [Inspector](../build/steps/step-editor.md) and add job code to the `Editor` + panel to define the specific business logic or transformation rules for this + workflow +6. In the `Input` panel on the left, add a custom input (e.g., a payload from a + webhook request) or simply add empty brackets (`{}`) to run a Workflow with a + cron trigger. See the [Workflow docs](docs/build/workflows.md) for help with + running and testing Workflow. +7. If the Step suceeds, navigate back to the Canvase view and click the `+` icon + to add a second Step. +8. If you want to define conditions for if/when this second Step should execute, + update the [Path condition](../build/paths.md). +9. Then repeat the instruction steps #3-6 to finishing configuring this next + Step, until the Workflow is complete. :::tip -Check out the video and docs on the [Workflows page](../build/workflows.md) in the `Build` docs for in-depth help, or ask your questions on [Community](https://community.openfn.org)! +Check out the video and docs on the [Workflows page](../build/workflows.md) in +the `Build` docs for in-depth help, or ask your questions on +[Community](https://community.openfn.org)! ::: diff --git a/generate-adaptors/index.js b/generate-adaptors/index.js index cc787abffd9f..0a5e700b8569 100644 --- a/generate-adaptors/index.js +++ b/generate-adaptors/index.js @@ -110,7 +110,9 @@ function escapeMdx(content) { function generateJsDoc(a) { // Add line break before tags and escape MDX specials outside code blocks - const docsContent = escapeMdx(JSON.parse(a.docs).replace(/<\/dt>/g, '\n')); + const docsContent = escapeMdx( + JSON.parse(a.docs).replace(/<\/dt>/g, '\n') + ); return `--- title: ${a.name}@${a.version} diff --git a/scripts/_help-section-template.md b/scripts/_help-section-template.md index 539b587bd913..76c871ec3967 100644 --- a/scripts/_help-section-template.md +++ b/scripts/_help-section-template.md @@ -1,5 +1,9 @@ ### I've noticed a problem with this Adaptor, or something is out of date, what can I do? -Thanks for asking! We are a fully Open Source Digital Public Good, and we welcome contributions from our community. Check out our [Adaptors Wiki](https://github.com/OpenFn/adaptors/blob/main/wiki/index.md) for more information on how you can update Adaptors! +Thanks for asking! We are a fully Open Source Digital Public Good, and we +welcome contributions from our community. Check out our +[Adaptors Wiki](https://github.com/OpenFn/adaptors/blob/main/wiki/index.md) for +more information on how you can update Adaptors! -Or, you can always reach out to the Community through our [Community Forum here](https://community.openfn.org/). +Or, you can always reach out to the Community through our +[Community Forum here](https://community.openfn.org/). diff --git a/scripts/add-help-section.js b/scripts/add-help-section.js index 6b77813f3f44..45fc64ae5aac 100644 --- a/scripts/add-help-section.js +++ b/scripts/add-help-section.js @@ -1,23 +1,22 @@ - const fs = require('fs'); const path = require('path'); - const TEMPLATE_PATH = path.join(__dirname, '_help-section-template.md'); const HELP_SECTION = '\n\n' + fs.readFileSync(TEMPLATE_PATH, 'utf8'); function addHelpSectionToFile(filePath) { try { let content = fs.readFileSync(filePath, 'utf8'); - - if (content.includes("I've noticed a problem with this Adaptor") || - content.includes("something is out of date, what can I do?")) { + if ( + content.includes("I've noticed a problem with this Adaptor") || + content.includes('something is out of date, what can I do?') + ) { return false; } content = content.trimEnd() + HELP_SECTION; - + fs.writeFileSync(filePath, content); console.log(`Added help section to: ${path.basename(filePath)}`); return true; @@ -29,17 +28,21 @@ function addHelpSectionToFile(filePath) { function main() { const adaptorsDir = path.join(__dirname, '../adaptors'); - + if (!fs.existsSync(adaptorsDir)) { console.error('Adaptors directory not found!'); process.exit(1); } - + const files = fs.readdirSync(adaptorsDir); - const markdownFiles = files.filter(file => file.endsWith('.md') && file !== 'intro.mdx'); - - console.log(`Found ${markdownFiles.length} markdown files in adaptors directory`); - + const markdownFiles = files.filter( + file => file.endsWith('.md') && file !== 'intro.mdx' + ); + + console.log( + `Found ${markdownFiles.length} markdown files in adaptors directory` + ); + let updated = 0; for (const file of markdownFiles) { const filePath = path.join(adaptorsDir, file); @@ -47,8 +50,10 @@ function main() { updated++; } } - - console.log(`\nProcessed ${markdownFiles.length} files, updated ${updated} files`); + + console.log( + `\nProcessed ${markdownFiles.length} files, updated ${updated} files` + ); } if (require.main === module) { diff --git a/scripts/optimize-images.js b/scripts/optimize-images.js index 36468117b806..4cf02d23c80b 100644 --- a/scripts/optimize-images.js +++ b/scripts/optimize-images.js @@ -8,9 +8,9 @@ const IMAGES_DIR = path.join(ROOT_DIR, 'static/img'); async function optimizeImages() { // Find all PNG, JPG, and JPEG images - const images = glob.sync('**/*.{png,jpg,jpeg}', { + const images = glob.sync('**/*.{png,jpg,jpeg}', { cwd: IMAGES_DIR, - ignore: ['**/node_modules/**'] + ignore: ['**/node_modules/**'], }); console.log(`Found ${images.length} images to optimize`); @@ -23,7 +23,7 @@ async function optimizeImages() { try { await sharp(inputPath).webp().toFile(outputPath); console.log(`Converted ${image} to WebP`); - + // Delete the original image await fs.unlink(inputPath); console.log(`Deleted original ${image}`); @@ -33,21 +33,21 @@ async function optimizeImages() { } // Update references in markdown files - const mdFiles = glob.sync('**/*.md', { + const mdFiles = glob.sync('**/*.md', { cwd: ROOT_DIR, - ignore: ['**/node_modules/**'] + ignore: ['**/node_modules/**'], }); for (const mdFile of mdFiles) { const filePath = path.join(ROOT_DIR, mdFile); let content = await fs.readFile(filePath, 'utf8'); - + // Replace image extensions in markdown content = content.replace(/\.(png|jpg|jpeg)(?=\))/g, '.webp'); - + await fs.writeFile(filePath, content, 'utf8'); console.log(`Updated references in ${mdFile}`); } } -optimizeImages().catch(console.error); \ No newline at end of file +optimizeImages().catch(console.error); diff --git a/src/css/custom.css b/src/css/custom.css index 731ebccb56da..2f8526aa0428 100644 --- a/src/css/custom.css +++ b/src/css/custom.css @@ -71,7 +71,7 @@ html[data-theme='dark'] .header-github-link:before { margin-bottom: 20px; padding-top: 12px; - text-align: center; + text-align: center; border: solid 1px #c0c0c0; border-radius: 8px; min-width: 300px; diff --git a/versions.json b/versions.json index 2c0f623f9b19..db7972b6f154 100644 --- a/versions.json +++ b/versions.json @@ -1,3 +1 @@ -[ - "legacy" -] +["legacy"]