Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
32 changes: 16 additions & 16 deletions certified-connectors/AzureDigitalTwins/apiDefinition.swagger.json
Original file line number Diff line number Diff line change
Expand Up @@ -105,7 +105,7 @@
"description": "Success"
}
},
"summary": "Update Twin",
"summary": "Update Twin (Integer)",
"description": "Update Twin Integer Properties.",
"operationId": "UpdateTwinIntProp",
"parameters": [
Expand All @@ -128,7 +128,7 @@
"description": "Success"
}
},
"summary": "Update Twin",
"summary": "Update Twin (String)",
"description": "Update Twin String Properties.",
"operationId": "UpdateTwinStringProp",
"parameters": [
Expand All @@ -151,7 +151,7 @@
"description": "Success"
}
},
"summary": "Update Twin",
"summary": "Update Twin (Boolean)",
"description": "Update Twin Boolean Properties.",
"operationId": "UpdateTwinBooleanProp",
"parameters": [
Expand All @@ -174,7 +174,7 @@
"description": "Success"
}
},
"summary": "Update Twin",
"summary": "Update Twin (Double)",
"description": "Update Twin Double Properties.",
"operationId": "UpdateTwinDoubleProp",
"parameters": [
Expand Down Expand Up @@ -221,7 +221,7 @@
"description": "Success"
}
},
"summary": "Twins - DigitalTwins UpdateComponent",
"summary": "Update Component (Integer)",
"description": "Update Components integer property for Twins.",
"operationId": "UpdateComponentIntProp",
"parameters": [
Expand All @@ -247,7 +247,7 @@
"description": "Success"
}
},
"summary": "Twins - DigitalTwins UpdateComponent",
"summary": "Update Component (String)",
"description": "Update Components with String property for Twins.",
"operationId": "UpdateComponentStringProp",
"parameters": [
Expand All @@ -273,7 +273,7 @@
"description": "Success"
}
},
"summary": "Twins - DigitalTwins UpdateComponent",
"summary": "Update Component (Boolean)",
"description": "Update Components with Boolean property for Twins.",
"operationId": "UpdateComponentBooleanProp",
"parameters": [
Expand All @@ -299,7 +299,7 @@
"description": "Success"
}
},
"summary": "Twins - DigitalTwins UpdateComponent",
"summary": "Update Component (Double)",
"description": "Update Components with Double property for Twins.",
"operationId": "UpdateComponentDoubleProp",
"parameters": [
Expand Down Expand Up @@ -411,7 +411,7 @@
"$ref": "#/parameters/integerUpdate"
}
],
"summary": "Twins - DigitalTwins UpdateRelationship",
"summary": "Update Relationship (Integer)",
"description": "Updates the integer property in Twin Relationships.",
"operationId": "UpdateRelationshipIntProp"
}
Expand All @@ -437,7 +437,7 @@
"$ref": "#/parameters/stringUpdate"
}
],
"summary": "Twins - DigitalTwins UpdateRelationship",
"summary": "Update Relationship (String)",
"description": "Updates the string property in Twin Relationships.",
"operationId": "UpdateRelationshipStringProp"
}
Expand All @@ -462,7 +462,7 @@
"$ref": "#/parameters/booleanUpdate"
}
],
"summary": "Twins - DigitalTwins UpdateRelationship",
"summary": "Update Relationship (Boolean)",
"description": "Updates the boolean property in Twin Relationships.",
"operationId": "UpdateRelationshipBooleanProp"
}
Expand All @@ -488,7 +488,7 @@
"$ref": "#/parameters/doubleUpdate"
}
],
"summary": "Twins - DigitalTwins UpdateRelationship",
"summary": "Update Relationship (Double)",
"description": "Updates the double property in Twin Relationships.",
"operationId": "UpdateRelationshipDoubleProp"
}
Expand Down Expand Up @@ -523,7 +523,7 @@
"nextLinkName": "nextLink"
},
"operationId": "ListIncomingRelationships",
"summary": "Twins - DigitalTwins ListIncomingRelationships",
"summary": "List Incoming Relationships",
"description": "Retrieve Incoming Relationships.",
"parameters": [
{
Expand Down Expand Up @@ -571,7 +571,7 @@
}
}
],
"summary": "Twins - DigitalTwins SendTelemetry",
"summary": "Send Telemetry",
"description": "Send Telemetry Inputs.",
"operationId": "SendTelemetry"
}
Expand All @@ -583,7 +583,7 @@
"description": "Success"
}
},
"summary": "Twins - DigitalTwins SendComponentTelemetry",
"summary": "Send Component Telemetry",
"operationId": "SendComponentTelemetry",
"description": "Send Component Telemetry.",
"parameters": [
Expand Down Expand Up @@ -657,7 +657,7 @@
"x-ms-pageable": {
"nextLinkName": "nextLink"
},
"summary": "Twins - DigitalTwins ListRelationships",
"summary": "List Relationships",
"operationId": "ListRelationships",
"description": "Lists Digital Twins Relationships."
}
Expand Down
63 changes: 63 additions & 0 deletions certified-connectors/Morf/Readme.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
## Morf Connector
Morf is a lightweight API-driven platform for automatically generating forms that can easily be embedded into existing systems, apps, and sites. Morf provides a REST API that can be used to dynamically generate user interfaces and capture information to power your digital processes.

## Publisher: AFTIA Solutions

## Prerequisites
You will need the following to proceed:
* A Microsoft Power Apps or Power Automate plan with a custom connector feature
* The Power platform CLI tools
* A Morf API Key

## Supported Operations
The connector currently supports the following operations:

### Render (V1)
Render a new Morf data capture experience. Call this API with a Morf form definition and optionally data to receive a prefilled form document that can be presented to a user in a browser context.

The operation accepts:

* `Form`: A Morf form definition (JSON)
* `Data`: *(Optional)* A JSON data payload used to prefill the form

and returns:

* `Form`: A portable rendered form document (HTML) that can be rendered in browser environments.

## Obtaining Credentials
To get started, head over to our [Morf Editor](https://editor.getmorf.io/) and request access keys. You will be granted one (1) site and one (1) API key. As described in our [authentication documentation](https://github.com/aftialabs/morf-docs/blob/main/guides/Authentication.md), use the provided API key when configuring your new Power Platform connection. Our free usage terms are available [here](https://github.com/aftialabs/morf-docs/blob/main/guides/termsandconditions.md#product-description).

## Getting Started
1. To get started, start by creating a Morf form definition. This can be done by using our [Morf Editor](https://editor.getmorf.io/) and creating a new form from scratch or by converting an existing document.
2. With your form definition handy, you can now create a new Power Platform Flow leveraging the Morf Render operation.
3. Configure a new connection if one is not present by adding your Morf API key to the connection configuration.
4. Configure the action to pass your form definition and optionally data to it, and after invoking your flow you will receive a rendered Morf form.
5. This form can be sent to a user by using many different delivery mechanisms or it can be presented to a user directly using the HTTP Response action.
6. For more information on submitting a form to a Power Platform Flow, have a look at our [documentation](https://github.com/aftialabs/morf-docs/blob/main/guides/PowerAutomate.md).

## Known Issues and Limitations
* Free tier users may experience slower response times during periods of increased usage due to provisioning standards

## Frequently Asked Questions

### How are new forms created?
This can be done by using our [Morf Editor](https://editor.getmorf.io/) and creating new forms from scratch or by converting existing documents.

### Can Morf forms be embedded?
Absolutely. Morf forms can be embedded into any web property without the use of inline frames (`iframe`). Get started by heading over to our [Morf Editor](https://editor.getmorf.io/) to generate an embed tag.

### What makes Morf forms different?
Morf forms use a concept called generational interfaces which allows form definitions to be dynamically modified in real-time when calling our render APIs. This allows for advanced dynamic behavior as part of render logic and operations.

### How do I submit a Morf form?
Morf forms can be submitted to any API that accepts a POST request. Information on submissions can be found [here](https://github.com/aftialabs/morf-docs/blob/main/guides/Submission.md).

### Can Morf forms be submitted to a Power Platform Flow?
Yes! Follow this [guide](https://github.com/aftialabs/morf-docs/blob/main/guides/PowerAutomate.md) to set up your own submission flow.

## Deploying the connector
Run the following commands and follow the prompts:

```paconn
paconn create --api-def apiDefinition.swagger.json --api-prop apiProperties.json
```
147 changes: 147 additions & 0 deletions certified-connectors/Morf/apiDefinition.swagger.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,147 @@
{
"swagger": "2.0",
"info": {
"description": "Morf is a modern and lightweight API-driven platform that offers a rapid and flexible approach to form generation.",
"version": "1.0",
"title": "Morf",
"termsOfService": "https://github.com/aftialabs/morf-docs/blob/main/guides/termsandconditions.md",
"contact": {
"name": "Morf Support",
"url": "https://getmorf.io/support",
"email": "support@getmorf.io"
}
},
"x-ms-connector-metadata": [
{
"propertyName": "Website",
"propertyValue": "https://getmorf.io"
},
{
"propertyName": "Privacy policy",
"propertyValue": "https://github.com/aftialabs/morf-docs/blob/main/guides/DataandPrivacyPolicy.md"
},
{
"propertyName": "Categories",
"propertyValue": "Productivity;Sales and CRM"
}
],
"host": "api.getmorf.io",
"basePath": "/v1",
"schemes": [
"https"
],
"consumes": [],
"produces": [],
"paths": {
"/": {
"post": {
"summary": "Render a new Morf data capture experience (V1)",
"description": "Call this API with a Morf form definition and optionally data to receive a prefilled form document that can be presented to a user in a browser context.",
"operationId": "render",
"x-ms-visibility": "important",
"consumes": [
"application/json"
],
"produces": [
"text/plain"
],
"parameters": [
{
"in": "body",
"name": "render",
"schema": {
"$ref": "#/definitions/RenderRequest"
},
"description": "A form render request",
"required": true
}
],
"security": [
{
"API-Key": []
}
],
"responses": {
"200": {
"description": "A form render response",
"schema": {
"$ref": "#/definitions/RenderResponse"
}
},
"401": {
"description": "Invalid Authentication",
"schema": {
"$ref": "#/definitions/ServiceException"
}
},
"500": {
"description": "Render Error",
"schema": {
"$ref": "#/definitions/ServiceException"
}
}
}
}
}
},
"definitions": {
"RenderRequest": {
"type": "object",
"required": [
"form"
],
"properties": {
"form": {
"type": "string",
"description": "Form definition to be rendered",
"x-ms-summary": "Form Definition",
"x-ms-visibility": "important"
},
"data": {
"type": "string",
"description": "(Optional) Data to be used to prefill the form",
"x-ms-summary": "Data"
}
}
},
"RenderResponse": {
"type": "string",
"description": "Rendered Morf HTML",
"x-ms-summary": "Form"
},
"ServiceException": {
"type": "object",
"description": "A server exception object",
"x-ms-summary": "Error",
"properties": {
"status": {
"type": "number",
"description": "The HTTP status returned by the service",
"x-ms-summary": "HTTP Status"
},
"error": {
"type": "string",
"description": "The error message returned by the service",
"x-ms-summary": "Message"
},
"timestamp": {
"type": "string",
"format": "date-time",
"description": "The timestamp at which the error occured according to the service",
"x-ms-summary": "Timestamp"
}
}
}
},
"parameters": {},
"responses": {},
"securityDefinitions": {
"API-Key": {
"type": "apiKey",
"in": "header",
"name": "API-Key"
}
},
"security": [],
"tags": []
}
23 changes: 23 additions & 0 deletions certified-connectors/Morf/apiProperties.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
{
"properties": {
"connectionParameters": {
"api_key": {
"type": "securestring",
"uiDefinition": {
"displayName": "API Key",
"description": "The API Key for this api",
"tooltip": "Provide your API Key",
"constraints": {
"tabIndex": 2,
"clearText": false,
"required": "true"
}
}
}
},
"iconBrandColor": "#0c425a",
"capabilities": [],
"publisher": "AFTIA Solutions",
"stackOwner": "AFTIA Solutions"
}
}
Loading