{"id":25694499,"url":"https://github.com/Stedi-Demos/bootstrap","last_synced_at":"2025-02-25T00:01:47.535Z","repository":{"id":65364632,"uuid":"584762574","full_name":"Stedi-Demos/bootstrap-archived","owner":"Stedi-Demos","description":"A workflow for receiving and sending EDI documents that you can adjust to build your own EDI system.","archived":true,"fork":false,"pushed_at":"2023-08-09T19:05:30.000Z","size":2359,"stargazers_count":7,"open_issues_count":20,"forks_count":8,"subscribers_count":4,"default_branch":"main","last_synced_at":"2023-11-30T04:46:20.842Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Stedi-Demos.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null}},"created_at":"2023-01-03T13:02:15.000Z","updated_at":"2024-01-09T23:31:35.127Z","dependencies_parsed_at":"2024-01-09T23:31:25.238Z","dependency_job_id":"6161932c-a0a9-4359-a268-f2f33911c0ac","html_url":"https://github.com/Stedi-Demos/bootstrap-archived","commit_stats":null,"previous_names":["stedi-demos/bootstrap-archived","stedi-demos/bootstrap"],"tags_count":0,"template":null,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Stedi-Demos%2Fbootstrap-archived","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Stedi-Demos%2Fbootstrap-archived/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Stedi-Demos%2Fbootstrap-archived/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Stedi-Demos%2Fbootstrap-archived/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Stedi-Demos","download_url":"https://codeload.github.com/Stedi-Demos/bootstrap-archived/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":240576456,"owners_count":19823293,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2025-02-25T00:01:03.529Z","updated_at":"2025-02-25T00:01:47.457Z","avatar_url":"https://github.com/Stedi-Demos.png","language":"TypeScript","funding_links":[],"categories":["Examples"],"sub_categories":["Golang"],"readme":"# [ARCHIVED] Stedi EDI Bootstrap\n\n\u003e **Note**\n\u003e This repository should only be relied on for existing users. New users should not deploy this version of bootstrap,\n\u003e and instead should use [Stedi Core](https://www.stedi.com/docs/core) to send and receive EDI files. Please don't\n\u003e hesitate to [contact us](https://www.stedi.com/contact) with any questions!\n\u003e\n\n\u003cdetails\u003e\n  \u003csummary\u003ePrevious README contents\u003c/summary\u003e\n\nThis repository contains an end-to-end configuration for building an X12 EDI system using Stedi products. This\nimplementation demonstrates one way to build an integration for common EDI read and write use cases. Your solution\nmay differ depending on your systems and requirements.\n\nWe strongly recommend reviewing the documentation for [Stedi Core](https://www.stedi.com/docs/core) before deploying the\nbootstrap implementation.\n\n- [Hands-on support](#hands-on-support)\n- [Bootstrap read and write workflow](#bootstrap-read-and-write-workflow)\n- [Requirements](#requirements)\n- [Deploying bootstrap resources](#deploying-bootstrap-resources)\n- [Testing the workflows](#testing-the-workflows)\n- [Clean up bootstrap resources](#clean-up-bootstrap-resources)\n- [Customizing the workflows](#customizing-the-workflows)\n- [Troubleshooting](#troubleshooting)\n\n## Hands-on support\n\nWe'd like to help set up and customize the bootstrap repository with you. Working together helps us understand what\nStedi\ncustomers need and helps get your solution into production as quickly as possible. We offer free hands-on support that\nincludes:\n\n- Help deploying the bootstrap workflows and customizing them for your use cases\n- Best practices for designing scalable connections between Stedi and your systems\n- EDI experts to answer your questions\n- Live troubleshooting over Slack or video call\n\n[Contact us](https://www.stedi.com/contact) to get started.\n\n## Bootstrap read and write workflow\n\nThe [Stedi Core module](https://www.stedi.com/docs/core) ingests data and emits events with the results of its\nconversion and validation processing. For example, Core emits an event when it receives a new file or successfully\nprocesses a transaction set.\n\nTo create a custom end-to-end EDI system on Stedi, you need to automate tasks like adding files from your input buckets\nand reacting to the emitted events. For example, you may want to automatically forward translated EDI files to an API,\nFTP server, AS2 server, or a [Stedi function](https://www.stedi.com/docs/functions) to run custom code.\n\nBootstrap contains opinionated Stedi functions that you can customize through configuration. For example, you can\nadd [Destinations](#destinations) where the bootstrap workflows will send incoming and outgoing data. The following\nsections describe these built-in functions.\n\n### Inbound EDI workflow\n\nThe `edi-inbound` function listens to Stedi Core `transaction.processed` events, which contain the partnership, document\ndirection, location of the translated document, and document transaction set ID for a single EDI transaction set. When\nit receives an event, it performs the following steps:\n\n1. Read the translated EDI-like JSON data from the [Stedi bucket](https://www.stedi.com/products/buckets) configured to\n   receive Core output.\n1. Look up configured destinations for the specific partnership and transaction set ID. Refer\n   to [Destinations](#destinations) for details.\n1. If a destination has a [Stedi Mapping](https://www.stedi.com/products/mappings) configured, apply the mapping\n   transformation the JSON.\n1. Send the JSON to each destination.\n1. Send failures (such as invalid mappings or missing guides)\n   to [Execution Error Destinations](#execution-error-destinations).\n1. Retry function execution failures 2 more times. These retries can result in destinations receiving multiple messages,\n   so you must handle at-least-once message delivery separately. We recommend using payload control numbers and message\n   timestamps for deduplication.\n\n### Outbound EDI workflow\n\nThe `edi-outbound` function performs the following steps when it receives a payload and a metadata object. The payload\nmust match the shape of the Guide's JSON Schema for writing EDI. Or, if a mappingId is specified, then the payload is\nthe input for a mapping which will output valid Guide JSON data.\n\n1. Use the metadata to look up the configuration values required to construct an EDI envelope. The `partnershipId` is\n   the only required field.\n1. If a [Stedi Mapping](https://www.stedi.com/products/mappings) is specified, apply the mapping transformation to the\n   JSON.\n1. Call [Stedi EDI Translate](https://www.stedi.com/products/edi-translate) to transform the JSON payload into an EDI\n   file.\n1. Look up configured destinations for the specific partnership and transaction set ID. Refer\n   to [Destinations](#destinations) for details.\n1. Send failures to [Execution Error Destinations](#execution-error-destinations).\n1. Retry function execution failures 2 or more times. These retries can result in destinations receiving multiple\n   messages, so you must handle at-least-once message delivery separately. We recommend using payload control numbers\n   and message timestamps for deduplication.\n\n### Processed functional groups workflow\n\nThe `edi-acknowledgement` function listens to Stedi Core `functional_group.processed` inbound events, which contain the\npartnership, document direction, and envelope data for a single functional group. When it receives an event, the\nfunction performs the following steps:\n\n1. If the direction is `RECEIVED`, look up up 997 acknowledgment configuration for the specific partnership and\n   transaction set Ids in the functional group. Refer to [Acknowledgments](#acknowledgment-configuration) for details.\n1. If transaction sets are in the functional group with 997 acknowledgments configured, generate a 997 EDI-like JSON\n   file and send it to the `edi-outbound` function for processing.\n\n### File error workflow\n\nThe events-file-error function listens to Stedi Core `file.failed` events, which Stedi emits when there is an error\nprocessing a file. When it receives an event, the function performs the following steps:\n\n1. Look up the configured file error destinations. Refer to [File Error Destinations](#file-error-destinations) for\n   details.\n1. Forward the errors to each destination.\n\n## Requirements\n\n1. Install [Node.js](https://docs.npmjs.com/downloading-and-installing-node-js-and-npm) _(minimum version: 18)_\n\n1. Clone the bootstrap repository and install the necessary dependencies:\n\n   ```bash\n   git clone https://github.com/Stedi-Demos/bootstrap.git\n   cd bootstrap\n   npm ci\n   ```\n\n1. Create a [Stedi account](https://www.stedi.com/auth/sign-up) and enable Core. Bootstrap does not overwrite existing\n   Core settings or data.\n\n1. Rename the bootstrap's `.env.example` file to `.env` and update the following environment variables:\n\n    - `STEDI_API_KEY`: A Stedi API key is required for authentication. You\n      can [generate an API key](https://www.stedi.com/app/settings/api-keys) in your Stedi account.\n    - `DESTINATION_WEBHOOK_URL`: Go to [webhook.site](https://webhook.site/) and copy the unique URL. The bootstrap\n      workflow sends output to this webhook.\n\n   Example `.env` file\n\n   ```\n   STEDI_API_KEY=\u003cYOUR_STEDI_API_KEY\u003e\n   DESTINATION_WEBHOOK_URL=\u003cYOUR_WEBHOOK_URL\u003e\n   ```\n\n## Deploying bootstrap resources\n\nRun the following command in the bootstrap directory:\n\n```bash\nnpm run bootstrap\n```\n\nBootstrap creates resources in your Stedi account. It may take several minutes for Stedi to deploy all required\nresources. When deployment is finished, your CLI displays a message similar to the following.\n\n\u003cdetails\u003e\u003csummary\u003eExample CLI output (click to expand):\u003c/summary\u003e\n\n  ```\n  stedi-bootstrap@1.0.0 bootstrap\n  npm run configure-storage \u0026\u0026 npx ts-node-esm ./src/setup/bootstrap.ts \u0026\u0026 npm run deploy\n\n\n  stedi-bootstrap@1.0.0 configure-storage\n  npm run ensure-keyspaces-exist \u0026\u0026 npm run configure-buckets\n\n  stedi-bootstrap@1.0.0 ensure-keyspaces-exist\n  ts-node-esm ./src/setup/bootstrap/ensureKeyspacesExist.ts\n\n  Creating keyspaces...\n  Waiting for keyspaces to become active...\n  Waiting for keyspaces to become active...\n\n  stedi-bootstrap@1.0.0 configure-buckets\n  ts-node-esm ./src/setup/configureBuckets.ts\n\n  Configuring buckets...\n  done\n  Guide created: 01GZM3TCTWE94FQZWTHDR1HP8K\n  Guide created: 01GZM3TD8C4233TNVZFBADNS7E\n  Creating X12 Trading Partner Profile in Partners API\n\n  stedi-bootstrap@1.0.0 deploy\n  ts-node-esm ./src/setup/deploy.ts\n\n  Waiting for function deploys to complete\n  Finished deploying function: edi-acknowledgment\n  Finished deploying function: events-file-error\n  Finished deploying function: edi-outbound\n  Finished deploying function: csv-to-json\n  Finished deploying function: ftp-external-poller\n  Finished deploying function: csv-from-json\n  Finished deploying function: edi-inbound\n  Creating event bindings\n  Waiting for event binding deploys to complete\n  Deploy completed at: 5/4/2023, 3:35:21 PM\n  ```\n\n\u003c/details\u003e\n\n### Resources\n\nBootstrap deploys the following resources to your account:\n\n- A [Stedi bucket](https://www.stedi.com/app/buckets) with directories for you `_stedi` and trading\n  partners `trading_partners`. In the `trading_partners` directory is a single directory for a fictional trading partner\n  called `ANOTHERMERCH`. Within `ANOTHERMERCH`, are directories for inbound and outbound files. The `inbound` directory\n  is where your partners would drop new files to send to you and the `outbound` directory is where Stedi sends EDI files\n  generated for that trading partner.\n- A [Stash keyspace](https://www.stedi.com/app/stash) called `partners-configuraion`. This keyspace contains\n  configuration for bootstrap, including [destinations](#destinations) for incoming and outgoing files. If you click\n  the `destinations|this-is-me_another-merchant|855` key/value pair, you'll see that bootstrap is configured to send\n  incoming 855 EDI documents to your webhook.\n- Several [Stedi functions](https://www.stedi.com/app/functions), including functions required to read and write EDI and\n  generate functional acknowledgements.\n\n## Testing the workflows\n\n### Inbound EDI\n\nCore automatically processes new files in the designated bucket for incoming data. When Core processes a file, it emits\nevents that automatically invoke the `edi-inbound` function for each processed transaction set.\n\n1. Go to the [Buckets UI](https://www.stedi.com/app/buckets) and navigate to the `inbound` directory for your trading\n   partner: `\u003cSFTP_BUCKET_NAME\u003e/trading_partners/ANOTHERMERCH/inbound`\n\n1. Upload the [input X12 5010 855 EDI](src/resources/X12/5010/855/inbound.edi) document to this directory.\n\n1. Look for the output of the function wherever you created your test webhook. The function sends the translated JSON\n   payload to the endpoint you configured.\n      \u003cdetails\u003e\u003csummary\u003eExample webhook output (click to expand):\u003c/summary\u003e\n\n   ```json\n   {\n     \"envelope\": {\n       \"interchangeHeader\": {\n         \"authorizationInformationQualifier\": \"00\",\n         \"authorizationInformation\": \"          \",\n         \"securityQualifier\": \"00\",\n         \"securityInformation\": \"          \",\n         \"senderQualifier\": \"14\",\n         \"senderId\": \"ANOTHERMERCH   \",\n         \"receiverQualifier\": \"ZZ\",\n         \"receiverId\": \"THISISME       \",\n         \"date\": \"2022-09-14\",\n         \"time\": \"20:22\",\n         \"repetitionSeparator\": \"U\",\n         \"controlVersionNumber\": \"00501\",\n         \"controlNumber\": \"000001746\",\n         \"acknowledgementRequestedCode\": \"0\",\n         \"usageIndicatorCode\": \"T\",\n         \"componentSeparator\": \"\u003e\"\n       },\n       \"groupHeader\": {\n         \"functionalIdentifierCode\": \"PR\",\n         \"applicationSenderCode\": \"ANOTAPPID\",\n         \"applicationReceiverCode\": \"MYAPPID\",\n         \"date\": \"2022-09-14\",\n         \"time\": \"20:22:22\",\n         \"controlNumber\": \"000001746\",\n         \"agencyCode\": \"X\",\n         \"release\": \"005010\"\n       },\n       \"groupTrailer\": {\n         \"numberOfTransactions\": \"1\",\n         \"controlNumber\": \"000001746\"\n       },\n       \"interchangeTrailer\": {\n         \"numberOfFunctionalGroups\": \"1\",\n         \"controlNumber\": \"000001746\"\n       }\n     },\n     \"transactionSets\": [\n       {\n         \"heading\": {\n           \"transaction_set_header_ST\": {\n             \"transaction_set_identifier_code_01\": \"855\",\n             \"transaction_set_control_number_02\": 1\n           },\n           \"beginning_segment_for_purchase_order_acknowledgment_BAK\": {\n             \"transaction_set_purpose_code_01\": \"00\",\n             \"acknowledgment_type_02\": \"AD\",\n             \"purchase_order_number_03\": \"365465413\",\n             \"date_04\": \"2022-09-14\",\n             \"date_09\": \"2022-09-13\"\n           },\n           \"reference_information_REF\": [\n             {\n               \"reference_identification_qualifier_01\": \"CO\",\n               \"reference_identification_02\": \"ACME-4567\"\n             }\n           ],\n           \"party_identification_N1_loop_ship_to\": [\n             {\n               \"party_identification_N1\": {\n                 \"entity_identifier_code_01\": \"ST\",\n                 \"name_02\": \"Wile E Coyote\",\n                 \"identification_code_qualifier_03\": \"92\",\n                 \"identification_code_04\": \"DROPSHIP CUSTOMER\"\n               },\n               \"party_location_N3\": [\n                 {\n                   \"address_information_01\": \"111 Canyon Court\"\n                 }\n               ],\n               \"geographic_location_N4\": {\n                 \"city_name_01\": \"Phoenix\",\n                 \"state_or_province_code_02\": \"AZ\",\n                 \"postal_code_03\": \"85001\",\n                 \"country_code_04\": \"US\"\n               }\n             }\n           ],\n           \"party_identification_N1_loop_selling_party\": [\n             {\n               \"party_identification_N1\": {\n                 \"entity_identifier_code_01\": \"SE\",\n                 \"name_02\": \"Marvin Acme\",\n                 \"identification_code_qualifier_03\": \"92\",\n                 \"identification_code_04\": \"DROPSHIP CUSTOMER\"\n               },\n               \"party_location_N3\": [\n                 {\n                   \"address_information_01\": \"123 Main Street\"\n                 }\n               ],\n               \"geographic_location_N4\": {\n                 \"city_name_01\": \"Fairfield\",\n                 \"state_or_province_code_02\": \"NJ\",\n                 \"postal_code_03\": \"07004\",\n                 \"country_code_04\": \"US\"\n               }\n             }\n           ]\n         },\n         \"detail\": {\n           \"baseline_item_data_PO1_loop\": [\n             {\n               \"baseline_item_data_PO1\": {\n                 \"assigned_identification_01\": \"item-1\",\n                 \"quantity_02\": 8,\n                 \"unit_or_basis_for_measurement_code_03\": \"EA\",\n                 \"unit_price_04\": 400,\n                 \"product_service_id_qualifier_06\": \"VC\",\n                 \"product_service_id_07\": \"VND1234567\",\n                 \"product_service_id_qualifier_08\": \"SK\",\n                 \"product_service_id_09\": \"ACM/8900-400\"\n               },\n               \"product_item_description_PID_loop\": [\n                 {\n                   \"product_item_description_PID\": {\n                     \"item_description_type_01\": \"F\",\n                     \"description_05\": \"400 pound anvil\"\n                   }\n                 }\n               ],\n               \"line_item_acknowledgment_ACK_loop\": [\n                 {\n                   \"line_item_acknowledgment_ACK\": {\n                     \"line_item_status_code_01\": \"IA\",\n                     \"quantity_02\": 8,\n                     \"unit_or_basis_for_measurement_code_03\": \"EA\"\n                   }\n                 }\n               ]\n             },\n             {\n               \"baseline_item_data_PO1\": {\n                 \"assigned_identification_01\": \"item-2\",\n                 \"quantity_02\": 4,\n                 \"unit_or_basis_for_measurement_code_03\": \"EA\",\n                 \"unit_price_04\": 125,\n                 \"product_service_id_qualifier_06\": \"VC\",\n                 \"product_service_id_07\": \"VND000111222\",\n                 \"product_service_id_qualifier_08\": \"SK\",\n                 \"product_service_id_09\": \"ACM/1100-001\"\n               },\n               \"product_item_description_PID_loop\": [\n                 {\n                   \"product_item_description_PID\": {\n                     \"item_description_type_01\": \"F\",\n                     \"description_05\": \"Detonator\"\n                   }\n                 }\n               ],\n               \"line_item_acknowledgment_ACK_loop\": [\n                 {\n                   \"line_item_acknowledgment_ACK\": {\n                     \"line_item_status_code_01\": \"IA\",\n                     \"quantity_02\": 4,\n                     \"unit_or_basis_for_measurement_code_03\": \"EA\"\n                   }\n                 }\n               ]\n             }\n           ]\n         },\n         \"summary\": {\n           \"transaction_totals_CTT_loop\": [\n             {\n               \"transaction_totals_CTT\": {\n                 \"number_of_line_items_01\": 2\n               }\n             }\n           ],\n           \"transaction_set_trailer_SE\": {\n             \"number_of_included_segments_01\": 17,\n             \"transaction_set_control_number_02\": \"0001\"\n           }\n         }\n       }\n     ],\n     \"delimiters\": {\n       \"element\": \"*\",\n       \"composite\": \"\u003e\",\n       \"repetition\": \"U\",\n       \"segment\": \"~\"\n     }\n   }\n   ```\n\n      \u003c/details\u003e\n\n### Outbound EDI\n\nYou can invoke the `edi-outbound` function through the UI for testing.\n\n1. Navigate to the `edi-outbound` function in\n   the (Functions UI)[https://www.stedi.com/app/functions/edi-outbound/edit](https://www.stedi.com/app/functions).\n\n1. Click the `Edit execution payload` link, and paste the contents\n   of [src/resources/X12/5010/850/outbound.json](src/resources/X12/5010/850/outbound.json) into the payload modal, and\n   click save.\n\n1. Click **Execute** and choose the **Synchronous** option. If successful the `Output` should look similar to the\n   following:\n\n   \u003cdetails\u003e\u003csummary\u003eExample function output (click to expand):\u003c/summary\u003e\n\n   ```json\n   {\n     \"statusCode\": 200,\n     \"deliveryResults\": [\n       {\n         \"type\": \"bucket\",\n         \"payload\": {\n           \"bucketName\": \"\u003cSTEDI_ACCOUNT_ID\u003e-sftp\",\n           \"key\": \"trading_partners/ANOTHERMERCH/outbound/1-850.edi\",\n           \"body\": \"ISA*00*          *00*          *ZZ*THISISME       *14*ANOTHERMERCH   *230113*2027*U*00501*000000005*0*T*\u003e~GS*PO*MYAPPID*ANOTAPPID*20230113*202727*000000005*X*005010~ST*850*0001~BEG*00*DS*365465413**20220830~REF*CO*ACME-4567~REF*ZZ*Thank you for your business~PER*OC*Marvin Acme*TE*973-555-1212*EM*marvin@acme.com~TD5****ZZ*FHD~N1*ST*Wile E Coyote*92*123~N3*111 Canyon Court~N4*Phoenix*AZ*85001*US~PO1*item-1*0008*EA*400**VC*VND1234567*SK*ACM/8900-400~PID*F****400 pound anvil~PO1*item-2*0004*EA*125**VC*VND000111222*SK*ACM/1100-001~PID*F****Detonator~CTT*2~AMT*TT*3700~SE*16*0001~GE*1*000000005~IEA*1*000000005~\"\n         }\n       }\n     ]\n   }\n   ```\n\n   \u003c/details\u003e\n\n1. You can view the file using the [Buckets UI](https://www.stedi.com/app/buckets). The output of the\n   function includes the `bucketName` and `key` (path within the bucket) of where the function saved the generated EDI.\n\n## Customizing the workflows\n\nThe bootstrap workflow uses sample [Partners](https://stedi.com/app/core/profiles),\na [Partnership](https://stedi.com/app/core/partnerships) associating the two partners, and configuration values\nfor destinations configured in Stash to set up and test the read and write EDI workflows. You can customize the\nbootstrap workflow by doing one or all of the following:\n\n- [Edit a partner profile](https://stedi.com/app/core/profiles)\n  to replace the test trading partner with your real trading partners' details and requirements.\n- [Customize configuration in Stash](#stash-configuration). Add partnership and transaction set configurations for\n  partnerships, set one or more destinations for a given configurations, forward errors to external services or archive\n  in buckets, configure mappings, and send 997 acknowledgments.\n- Create [Stedi mappings](https://stedi.com/app/mappings). Add a `mappingId` property to a Stash destination\n  configuration to transform the inbound payload before sending to a destination. Or, when sending EDI, the `mappingId`\n  can transform the event payload into the JSON schema required for translating to EDI.\n- [Create SFTP users](https://www.stedi.com/app/sftp)\n  for your trading partners, so they can send and retrieve EDI documents from Stedi Buckets.\n\nYou may want to use additional Stedi products to further optimize your EDI workflows. We can help you customize the\nbootstrap workflow and determine which products and approaches are right for your use\ncases. [Contact us](https://www.stedi.com/contact) to set up a meeting with our technical team.\n\n## Poll remote FTP / SFTP servers\n\nYou can poll remote FTP and SFTP servers to download files from your\ntrading partners. Visit\nthe [External FTP / SFTP poller README](src/functions/ftp/external-poller/README.md) for details.\n\n## Clean up bootstrap resources\n\nTo delete all the resources created by the bootstrap, run the following command:\n\n```bash\nnpm run destroy\n```\n\n## Stash configuration\n\n[Stedi Stash](https://www.stedi.com/products/stash) is a key/value store. You can add and edit Stash key-value pairs to\nconfigure destinations for incoming and outgoing documents, destinations for errors, and which transaction sets require\nfunctional acknowledgements.\n\n### Destinations\n\n- [AS2](./src/schemas/destination-as2.json)\n- [Bucket](./src/schemas/destination-bucket.json)\n- [Function](./src/schemas/destination-function.json)\n- [SFTP](./src/schemas/destination-sftp.json)\n- [Stash](./src/schemas/destination-stash.json)\n- [Webhook](./src/schemas/destination-webhook.json)\n\n#### Transaction set destination\n\nkey: `destinations|${partnershipId}|${transactionSetId}`\n\nvalue: [JSON Schema](./src/schemas/transaction-destinations.json)\n\n## Execution error destinations\n\nkey: `destinations|errors|execution`\n\nvalue: [JSON Schema](./src/schemas/error-destinations.json)\n\n### File error destinations\n\nkey: `destinations|errors|execution`\n\nvalue: [JSON Schema](./src/schemas/error-destinations.json)\n\n### Acknowledgment configuration\n\nkey: `functional_acknowledgments|${partnershipId}`\n\nvalue: [JSON Schema](./src/schemas/acknowledgment.json)\n\n## Troubleshooting\n\n```\nThere was an issue installing the dependencies using your local npm installation, please check your .npmrc and try again.\n```\n\nIf you created a `.npmrc` in this repository, please remove it.\n\nIf you still see this error, you may have a registry override in your npm config. Run `npm config list` and search\nfor `registry` like below. Comment out that line and try again.\n\n```\n@stedi:registry = \"https://npm.pkg.github.com/\" \n```\n\n\u003c/details\u003e","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FStedi-Demos%2Fbootstrap","html_url":"https://awesome.ecosyste.ms/projects/github.com%2FStedi-Demos%2Fbootstrap","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FStedi-Demos%2Fbootstrap/lists"}