From 3cfffd33acb4a01511eaafee79d8affd706c2703 Mon Sep 17 00:00:00 2001 From: Joe Clark Date: Fri, 1 May 2026 13:07:41 +0100 Subject: [PATCH 1/4] docs revision (#763) --- docs/build/collections.md | 2 +- docs/build/sandboxes.md | 119 +++++++++++++++++--------------------- 2 files changed, 55 insertions(+), 66 deletions(-) diff --git a/docs/build/collections.md b/docs/build/collections.md index 17a5eb5618dd..78f280e2ed83 100644 --- a/docs/build/collections.md +++ b/docs/build/collections.md @@ -3,7 +3,7 @@ title: Collections sidebar_label: Collections --- -Collections provides a high-volume, high-performance storage solution built into +Collections provide a high-volume, high-performance storage solution built into OpenFn. Check out **[this video](https://www.youtube.com/watch?v=iXkkkzratzY&t=3s&ab_channel=OpenFn.org)** for an introduction. diff --git a/docs/build/sandboxes.md b/docs/build/sandboxes.md index bcfa028bec5b..2108155ac9a0 100644 --- a/docs/build/sandboxes.md +++ b/docs/build/sandboxes.md @@ -4,26 +4,15 @@ sidebar_label: Sandboxes --- Sandboxes are a way to develop fixes and new features on workflows without -affecting live, or "in production", runs. - -:::info Sandboxes are new to OpenFn since October 2025. - -At the time of writing sandboxes are under active development and testing. We -expect to be in full working order by the end of November 2025, but until then -we recommend not using them with live workflows. - -To access sandboxes, you'll need to enable the Experimental Features option in -your user settings. - -::: +affecting live, or "production", runs. A sandbox is essentially a clone of a project, with its own private history, -webhooks, cron triggers credentials and access rights. It also has its own -billing rules - so sandbox runs and AI tokens don't affect your main project. -Unlike most sandbox settings, the billing rules derive from the original -project, rather than duplicate them. +webhooks and cron triggers, credentials and access rights. + +Sandboxes also have their own billing rules, so runs and AI tokens used in the +sandbox don't affect the usage of your main project. -The idea is that you can develop the workflow in total isolation from the main +The idea is that you can develop workflows in total isolation from the main project, and once you're done, merge (read as "push" or "promote") changes back. :::tip Short-lived sandboxes @@ -53,6 +42,11 @@ not affect the same-named Workflow in any other project or sandbox, or that a Run in a sandbox will contribute to your usage in any other sandbox or project, and so on. +Collections are scoped to a project or sandbox. When you create a new sandbox, +empty copies of any collections on the original project will be created inside +the sandbox. When merging the sandbox, data is not transferred between +collections (but new collections will be created on the merge target). + ## Creating sandboxes When you create a new sandbox, we basically create a total copy of your project. @@ -60,47 +54,42 @@ Any changes made to the sandbox will not affect your main project workflows - so you can experiment freely without breaking anything. To create a sandbox, enter a Project, click on sandboxes, and click on the -Create sandbox button. +Create Sandbox button. -You'll need to set a name for the sandbox. This is unique within your project -and its sandboxes. If you're familiar with git, treat it like a branch name. +You'll need to set a name for the sandbox. This must be unique across sandboxes +within the project. If you're familiar with git, treat it like a branch name. Otherwise, you can either give it a general name like `testing`, or name it for a specific feature, like `new-patient-workflow`. -You'll also need to set an Environment (see below). This configures all -credentials within the sandbox to use that environment variant. If you're not -sure, set the environment to `dev` (you can change this at any time from the -Setup tab of the sandbox Settings page). - A color will be randomly selected to associate with the sandbox. You'll see this color in the app UI while you're using the sandbox. You can select a different color if you like. -Click Create sandbox when you're ready. You'll automatically enter the sandbox. +Click Create Sandbox when you're ready. You'll automatically enter the sandbox. ## Viewing a sandbox -To develop and test a sandbox, you need to enter it in the app from the -sandboxes menu. +To develop and test a sandbox, you need to enter it from the Sandboxes item on +the main navigation bar. When sandbox is active, the app will change color to help you understand what -you're looking at. [TODO] We also list the active sandbox in the breadcrumbs at -the top of the page, and in a banner on the Inspector. +version of your project you're looking at. -Each sandbox has its own isolated Workflows, Subscription, History and settings. -As you click through the pages, you'll notice that your original project's -details are excluded. This is because your sandbox is an independent clone of -the original project. +Each sandbox has its own isolated Workflows, Collections, Subscription, History +and settings. As you click through the pages, you'll notice that your original +project's details are excluded. This is because your sandbox is an independent +clone of the original project. -## Environments +Some Settings are "private" to a sandbox, while others are inherited by the +parent Project, and a few will be copied into the target on merge. The Settings +page will clearly tell you what to expect. -Environments allow you to run a Workflow with a special set of credentials. This -lets you use development servers, modes and databases while building your -sandbox, without interfering with live production services. +## Environments -Each sandbox has an associated environment. By default it's `main`, which -implies that this is your live production environment. But you can create an -environment like `dev` or `staging`. +Environments allow you to run a Workflow with a special set of credential +values, seperate to your main project. This lets you use development servers, +modes and databases while building your sandbox, without interfering with live +production services. The environment is just a label, and each credential used in your workflow has a set of values associated with that label. For example, when connecting to DHIS2, @@ -108,6 +97,9 @@ your main credential will contain private login details. But your `dev` environment might use the public sandbox and so contain a different username and password. +By default, all Sandboxes are given the environment `dev`. You can change this +from the Settings page. + All environments are securely stored and encrypted within our database, so it's perfectly safe to duplicate production credentials across multiple environments. @@ -115,10 +107,6 @@ For each Credential used in your workflow, you must ensure there is a value set to match your sandbox environment. If you do not configure your credentials, the Workflow will fail with clear instructions on how to correct it. -To change a the environment used by a Sandbox, first enter the Sandbox from the -Sandboxes page, then go to the Settings page. The environment can be edited -under the Identity section of the Setup tab (right at the top of the page). - ## Merging sandboxes Once you've finished making changes to your workflows, it's time to merge them @@ -127,23 +115,21 @@ back into your main project. This is easy in the app: simply head to the Sandboxes page, find the Sandbox you want to merge in the list, and click the Merge icon on the right-hand side. -You'll be prompted to select the target project or sandbox to merge into: pick -from the list and click Merge. Usually you'll want to merge into the original -project, which is selected by default. +You'll be prompted to select the target project or sandbox to merge into. +Usually you'll want to merge into the original project, which is selected by +default. -When merging, we replace the contents of workflows in your project with those in -your sandbox. Any workflows which are not in the sandbox will be ignored. If you -rename a workflow in the sandbox, you'll see the new workflow appear in your -main project, and the original workflow will be left alone (you'll probably want -to delete that manually). +You can also pick which Workflows to include in the merge. This helps reduce +conflicts with any changes on the underlying Project, and helps you understand +the consequences of the merge. -Note that settings and options, like concurrency and data retention rules, are -not transferred in the merge, nor are historical runs or dataclips. Just the -Workflow contents. +When merging, we replace the contents of workflows in the target project with +those in your sandbox. Renaming a worklow will make it look like the workflow +was removed from the base, and a new workflow added. -After merging, the sandbox will be destroyed, along with its history and -dataclips. Any environments and credentials assocaited with the project will be -unaffected. +After merging, the sandbox will be destroyed, along with its history, +collections and dataclips. Any environments and credentials associated with the +project will be unaffected. :::tip @@ -172,10 +158,10 @@ Occasionally these conflicts are trivial to resolve and you might wonder what all the fuss is about. But often they are complex, and it can be difficult or impossible to automate a solution. -[TODO not implemented yet] When we detect a conflict like this, we'll show a -warning when you try and merge the Sandbox. You can choose to "force push" the -Sandbox and overwrite whatever changes happened on the target Project, or you -can cancel and resolve the conflict yourself. +When we detect a conflict like this, we'll show a warning when you try and merge +the Sandbox. You can choose to force the merge and overwrite whatever changes +happened on the target Project, or you can cancel and resolve the conflict +yourself. For now, the only way to resolve conflicts manually is to use the CLI to edit your project locally, and pushed the resolved, final version up to the app. @@ -190,5 +176,8 @@ We'll be adding better support for resolving conflicts soon. Sandboxes are fully compatible with the CLI. -We're still working on docs and features for that - check back soon for more -details! +Use `openfn project pull` to fetch a sandbox locally, and `openfn project push` +to push changes back to the the sandbox in the app. + +You can use `openfn project merge` to merge two local projects together, and +then `openfn project deploy` to sync with the app. From b6f1aa3f144ae44f2971561e01df7665f620eacd Mon Sep 17 00:00:00 2001 From: Joe Clark Date: Fri, 1 May 2026 13:08:15 +0100 Subject: [PATCH 2/4] Update dependencies (#767) * Bump follow-redirects from 1.15.6 to 1.16.0 Bumps [follow-redirects](https://github.com/follow-redirects/follow-redirects) from 1.15.6 to 1.16.0. - [Release notes](https://github.com/follow-redirects/follow-redirects/releases) - [Commits](https://github.com/follow-redirects/follow-redirects/compare/v1.15.6...v1.16.0) --- updated-dependencies: - dependency-name: follow-redirects dependency-version: 1.16.0 dependency-type: indirect ... Signed-off-by: dependabot[bot] * Bump dompurify from 3.2.6 to 3.4.1 Bumps [dompurify](https://github.com/cure53/DOMPurify) from 3.2.6 to 3.4.1. - [Release notes](https://github.com/cure53/DOMPurify/releases) - [Commits](https://github.com/cure53/DOMPurify/compare/3.2.6...3.4.1) --- updated-dependencies: - dependency-name: dompurify dependency-version: 3.4.1 dependency-type: indirect ... Signed-off-by: dependabot[bot] * Merge pull request #758 from OpenFn/dependabot/npm_and_yarn/axios-1.15.0 Bump axios from 1.13.5 to 1.15.0 * Bump lodash from 4.17.23 to 4.18.1 (#757) Bumps [lodash](https://github.com/lodash/lodash) from 4.17.23 to 4.18.1. - [Release notes](https://github.com/lodash/lodash/releases) - [Commits](https://github.com/lodash/lodash/compare/4.17.23...4.18.1) --- updated-dependencies: - dependency-name: lodash dependency-version: 4.18.1 dependency-type: indirect ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * Bump node-forge from 1.3.3 to 1.4.0 (#753) Bumps [node-forge](https://github.com/digitalbazaar/forge) from 1.3.3 to 1.4.0. - [Changelog](https://github.com/digitalbazaar/forge/blob/main/CHANGELOG.md) - [Commits](https://github.com/digitalbazaar/forge/compare/v1.3.3...v1.4.0) --- updated-dependencies: - dependency-name: node-forge dependency-version: 1.4.0 dependency-type: indirect ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * bump node version * update brace-expansion --------- Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/deploy.yml | 6 +- .github/workflows/test-deploy.yml | 6 +- .tool-versions | 2 +- package.json | 4 +- yarn.lock | 98 +++++++++++++------------------ 5 files changed, 50 insertions(+), 66 deletions(-) diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index 64220a1fd7ef..fac7be1d3a3c 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -13,11 +13,11 @@ jobs: name: Deploy to GitHub Pages runs-on: ubuntu-latest steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v6 - run: corepack enable - - uses: actions/setup-node@v4 + - uses: actions/setup-node@v6 with: - node-version: 20 + node-version: 24 cache: yarn - name: Add key to allow access to repository diff --git a/.github/workflows/test-deploy.yml b/.github/workflows/test-deploy.yml index c003070274bf..5065c351e24b 100644 --- a/.github/workflows/test-deploy.yml +++ b/.github/workflows/test-deploy.yml @@ -12,11 +12,11 @@ jobs: name: Test deployment runs-on: ubuntu-latest steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v6 - run: corepack enable - - uses: actions/setup-node@v4 + - uses: actions/setup-node@v6 with: - node-version: 20 + node-version: 24 cache: yarn - name: Install dependencies diff --git a/.tool-versions b/.tool-versions index 33f368048d5d..b92616f36731 100644 --- a/.tool-versions +++ b/.tool-versions @@ -1 +1 @@ -nodejs 20.11.0 \ No newline at end of file +nodejs 24.15.0 \ No newline at end of file diff --git a/package.json b/package.json index 648658631880..b9fce7e4c910 100644 --- a/package.json +++ b/package.json @@ -26,8 +26,8 @@ "@docusaurus/preset-classic": "3.9.2", "@docusaurus/theme-mermaid": "3.9.2", "@mdx-js/react": "^3.0.0", - "axios": "1.13.5", - "brace-expansion": "1.1.12", + "axios": "1.15.0", + "brace-expansion": "^5.0.0", "clsx": "^1.1.1", "compare-versions": "^5.0.1", "date-fns": "2.21.3", diff --git a/yarn.lock b/yarn.lock index 376ae31fea44..822db3d48310 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4957,8 +4957,8 @@ __metadata: "@types/react": ^18.2.29 "@types/react-helmet": ^6.1.0 "@types/react-router-dom": ^5.1.7 - axios: 1.13.5 - brace-expansion: 1.1.12 + axios: 1.15.0 + brace-expansion: ^5.0.0 chokidar: ^3.6.0 clsx: ^1.1.1 compare-versions: ^5.0.1 @@ -6627,14 +6627,14 @@ __metadata: languageName: node linkType: hard -"axios@npm:1.13.5": - version: 1.13.5 - resolution: "axios@npm:1.13.5" +"axios@npm:1.15.0": + version: 1.15.0 + resolution: "axios@npm:1.15.0" dependencies: follow-redirects: ^1.15.11 form-data: ^4.0.5 - proxy-from-env: ^1.1.0 - checksum: 985024c4a32f837053f198f02a308fd6f8bfb4053a2f21e39e37992bc6d06917f008679c36b3e7f0f0c9060c85ffe37c61e58d2ac662595d68dc1b89cef78de8 + proxy-from-env: ^2.1.0 + checksum: 95a8455554867a083ab3772fcadba42a22ec4bb546dccc66011556d837a07e544ae006675a30a5c43453f3e37e7c0982e934cec482c06b75abead2a2c157448a languageName: node linkType: hard @@ -6722,6 +6722,13 @@ __metadata: languageName: node linkType: hard +"balanced-match@npm:^4.0.2": + version: 4.0.4 + resolution: "balanced-match@npm:4.0.4" + checksum: fb07bb66a0959c2843fc055838047e2a95ccebb837c519614afb067ebfdf2fa967ca8d712c35ced07f2cd26fc6f07964230b094891315ad74f11eba3d53178a0 + languageName: node + linkType: hard + "baseline-browser-mapping@npm:^2.9.0": version: 2.9.19 resolution: "baseline-browser-mapping@npm:2.9.19" @@ -6821,16 +6828,6 @@ __metadata: languageName: node linkType: hard -"brace-expansion@npm:1.1.12": - version: 1.1.12 - resolution: "brace-expansion@npm:1.1.12" - dependencies: - balanced-match: ^1.0.0 - concat-map: 0.0.1 - checksum: 12cb6d6310629e3048cadb003e1aca4d8c9bb5c67c3c321bafdd7e7a50155de081f78ea3e0ed92ecc75a9015e784f301efc8132383132f4f7904ad1ac529c562 - languageName: node - linkType: hard - "brace-expansion@npm:^1.1.7": version: 1.1.11 resolution: "brace-expansion@npm:1.1.11" @@ -6841,6 +6838,15 @@ __metadata: languageName: node linkType: hard +"brace-expansion@npm:^5.0.0": + version: 5.0.5 + resolution: "brace-expansion@npm:5.0.5" + dependencies: + balanced-match: ^4.0.2 + checksum: 4481b7ffa467b34c14e258167dbd8d9485a2d31d03060e8e8b38142dcde32cdc89c8f55b04d3ae7aae9304fa7eac1dfafd602787cf09c019cc45de3bb6950ffc + languageName: node + linkType: hard + "braces@npm:^3.0.3, braces@npm:~3.0.2": version: 3.0.3 resolution: "braces@npm:3.0.3" @@ -8656,27 +8662,15 @@ __metadata: languageName: node linkType: hard -"dompurify@npm:^3.2.4": - version: 3.2.6 - resolution: "dompurify@npm:3.2.6" - dependencies: - "@types/trusted-types": "npm:^2.0.7" - dependenciesMeta: - "@types/trusted-types": - optional: true - checksum: 4d002997dbae13f6bdf0e6be014384129c83b1ee8cd3fca9d96f95b9142d1e96256924466a2fc25e7ffb6ede54290e5c4a7d1bd10f9b14cfa07928dd799c3b42 - languageName: node - linkType: hard - -"dompurify@npm:^3.2.5": - version: 3.3.0 - resolution: "dompurify@npm:3.3.0" +"dompurify@npm:^3.2.4, dompurify@npm:^3.2.5": + version: 3.4.1 + resolution: "dompurify@npm:3.4.1" dependencies: "@types/trusted-types": ^2.0.7 dependenciesMeta: "@types/trusted-types": optional: true - checksum: 425c181ac531cb15f93be85dc6efb1eb535d7c53ad0752b305043fe43e76c5ef144c2aa3670da2a52bec253c0aa302c06545cd04012396dc81d52cf86529097b + checksum: e37e0faf96b607aee4bdcce7931427ad9b252246f866cb58814848d01b11238e0eb60e8310945d2bae9922a78d5d358808058238a65ee5a3f4a9e2d8d8d5a55e languageName: node linkType: hard @@ -9387,23 +9381,13 @@ __metadata: languageName: node linkType: hard -"follow-redirects@npm:^1.0.0": - version: 1.15.6 - resolution: "follow-redirects@npm:1.15.6" +"follow-redirects@npm:^1.0.0, follow-redirects@npm:^1.15.11": + version: 1.16.0 + resolution: "follow-redirects@npm:1.16.0" peerDependenciesMeta: debug: optional: true - checksum: a62c378dfc8c00f60b9c80cab158ba54e99ba0239a5dd7c81245e5a5b39d10f0c35e249c3379eae719ff0285fff88c365dd446fab19dee771f1d76252df1bbf5 - languageName: node - linkType: hard - -"follow-redirects@npm:^1.15.11": - version: 1.15.11 - resolution: "follow-redirects@npm:1.15.11" - peerDependenciesMeta: - debug: - optional: true - checksum: 20bf55e9504f59e6cc3743ba27edb2ebf41edea1baab34799408f2c050f73f0c612728db21c691276296d2795ea8a812dc532a98e8793619fcab91abe06d017f + checksum: e90dce4607b1f6b8b9883287f912585573c19088209ad82341d550a795b4ba514522b73b1b340cf618279df27975cd46504d09149be60291ba6767384c1fd8f8 languageName: node linkType: hard @@ -11171,9 +11155,9 @@ __metadata: linkType: hard "lodash@npm:^4.17.20, lodash@npm:^4.17.21": - version: 4.17.23 - resolution: "lodash@npm:4.17.23" - checksum: 7daad39758a72872e94651630fbb54ba76868f904211089721a64516ce865506a759d9ad3d8ff22a2a49a50a09db5d27c36f22762d21766e47e3ba918d6d7bab + version: 4.18.1 + resolution: "lodash@npm:4.18.1" + checksum: bb5f5b49aad29614e709af02b64c56b0f8b78c6a81434a3c1ae527d2f0f78ca08f9d9fb22aa825a053876c9d2166e9c01f31c356014b5e2bdc0556c057433102 languageName: node linkType: hard @@ -12527,9 +12511,9 @@ __metadata: linkType: hard "node-forge@npm:^1": - version: 1.3.3 - resolution: "node-forge@npm:1.3.3" - checksum: 045b650d61eeba57588744b7be4671044e83871e2c4dc5d4a38a8eb5af7e55fa790c93ba9db1d1ee14a567d25fde41e97a5132e076cff738622e0916c77b48d2 + version: 1.4.0 + resolution: "node-forge@npm:1.4.0" + checksum: c97c634d4d483aae815677db5b1bd14bfea4d873ab48817e020610a2b4d8bc6b3e77994860189b44151ff8e0842c0c4ba6faa80b9a6e6fbd6989865e8eb80b96 languageName: node linkType: hard @@ -14060,10 +14044,10 @@ __metadata: languageName: node linkType: hard -"proxy-from-env@npm:^1.1.0": - version: 1.1.0 - resolution: "proxy-from-env@npm:1.1.0" - checksum: ed7fcc2ba0a33404958e34d95d18638249a68c430e30fcb6c478497d72739ba64ce9810a24f53a7d921d0c065e5b78e3822759800698167256b04659366ca4d4 +"proxy-from-env@npm:^2.1.0": + version: 2.1.0 + resolution: "proxy-from-env@npm:2.1.0" + checksum: b106ad790f26d47ba4791af3fe8cba5c8d35d85020119c82c05b413eb11b3ab97d2393ecaed51bca97c2788fa256408283dfeb4d970b2ebcae6702310f064e7e languageName: node linkType: hard From 6ab81845d15dca0f1ed41305f6eace799ea95419 Mon Sep 17 00:00:00 2001 From: Emmanuel Evance Date: Fri, 1 May 2026 15:38:02 +0300 Subject: [PATCH 3/4] update credential image (#692) From c77304026c4f54d3356227eeb2ea7bd701897222 Mon Sep 17 00:00:00 2001 From: Mercy Date: Fri, 1 May 2026 15:39:27 +0300 Subject: [PATCH 4/4] Create documentation for EAPTS adaptor (#717) * Create documentation for EAPTS adaptor Add documentation for EAPTS adaptor including overview, functions, and interfaces. * Revise EAPTS adaptor documentation Updated documentation for the EAPTS adaptor, including an overview, integration options, and functions. * Updated eapts.md * Update eapts.md * Updated eapts.md --- adaptors/eapts.md | 47 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) create mode 100644 adaptors/eapts.md diff --git a/adaptors/eapts.md b/adaptors/eapts.md new file mode 100644 index 000000000000..c02b6fed85bf --- /dev/null +++ b/adaptors/eapts.md @@ -0,0 +1,47 @@ +--- +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. + +## Integration Options + +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. + +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: + +**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. + +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", + "apiToken": "sk_test_53iburgn5yb3u4nfufg477365gbvrnv348r475gf4bf485845gbrf" +} +``` + +**Required Fields:** +- `baseUrl`: The base URL of your EAPTS instance (e.g., `https://example.com`) +- `apiToken`: The API token for authenticating requests to EAPTS + +### Helpful Links + +1. [EAPTS Platform](https://dhpi.moh.gov.et/project/b7175989-30d8-42d6-a5ee-8d48cbad0c61) +2. [OpenFn EAPTS Adaptor](https://docs.openfn.org/adaptors/packages/eapts-readme) +3. [EAPTS Configuration Schema](https://docs.openfn.org/adaptors/packages/eapts-configuration-schema) + +### 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! + +Or, you can always reach out to the Community through our [Community Forum here](https://community.openfn.org/).