Closed garrytrinder closed 4 years ago
Thanks for reporting the issue. I will investigate and respond by next week.
I was able to reproduce this error. I will fix this by end of next week.
@garrytrinder The error I reproduced isn't the same one you got. Can you please send me a copy of the swagger file? Please feel free to send the smallest subset that can be used to reproduce the error.
I'm running into the same error, unfortunately.
$ paconn validate -s settings.json
{
"message": "No HTTP resource was found that matches the request URI 'https://preview.api.powerapps.com/providers/Microsoft.PowerApps/objectIds/validateApiSwagger?api-version=2016-11-01&enableConnectorCertificationRules=true'."
}
404 Client Error: Not Found for url: https://preview.api.powerapps.com/providers/Microsoft.PowerApps/objectIds/validateApiSwagger?api-version=2016-11-01&enableConnectorCertificationRules=true
paconn==0.0.11
This is for a new connector I want to submit.
settings.json
{
"apiProperties": "apiProperties.json",
"apiDefinition": "apiDefinition.swagger.json",
"icon": "icon.png",
"powerAppsApiVersion": "2016-11-01",
"powerAppsUrl": "https://preview.api.powerapps.com"
}
apiProperties.json
{
"properties": {
"capabilities": [],
"connectionParameters": {
"token": {
"oAuthSettings": {
"clientId": "Cg13CyJLi6ibicOYMweTl12uI1X6Rq6FTb7j9Y3v",
"customParameters": {
"authorizationUrl": {
"value": "https://signrequest.com/api/v1/oauth2/authorize/"
},
"refreshUrl": {
"value": "https://signrequest.com/api/v1/oauth2/token/"
},
"tokenUrl": {
"value": "https://signrequest.com/api/v1/oauth2/token/"
}
},
"identityProvider": "oauth2",
"properties": {
"IsFirstParty": "False"
},
"redirectMode": "Global",
"redirectUrl": "https://global.consent.azure-apim.net/redirect",
"scopes": [
"write"
]
},
"type": "oauthSetting"
}
},
"iconBrandColor": "#ffffff"
}
}
```json
{
"swagger": "2.0",
"info": {
"title": "SignRequest API",
"termsOfService": "https://signrequest.com/#/terms",
"contact": {
"email": "tech-support@signrequest.com"
},
"x-logo": {
"url": "https://signrequest.com/images/logo-padded.png",
"altText": "SignRequest"
},
"description": "Creates signature requests using the SignRequest.com service.",
"version": "v1"
},
"host": "signrequest.com",
"schemes": [
"https"
],
"basePath": "/api/v1",
"consumes": [
"application/json"
],
"produces": [
"application/json"
],
"securityDefinitions": {
"oauth2_auth": {
"type": "oauth2",
"flow": "accessCode",
"authorizationUrl": "https://signrequest.com/api/v1/oauth2/authorize/",
"tokenUrl": "https://signrequest.com/api/v1/oauth2/token/",
"scopes": {
"write": "write"
}
}
},
"security": [
{
"Token": []
}
],
"paths": {
"/signrequest-quick-create/": {
"post": {
"operationId": "SignrequestQuickCreateCreate",
"summary": "Send SignRequest",
"description": "Creates and sends a new SignRequest.",
"parameters": [
{
"name": "data",
"in": "body",
"required": true,
"schema": {
"$ref": "#/definitions/SignRequestQuickCreate"
}
}
],
"responses": {
"201": {
"description": "",
"schema": {
"$ref": "#/definitions/SignRequestQuickCreate"
}
}
},
"tags": [
"signrequest-quick-create"
],
"x-ms-visibility": "important"
},
"parameters": []
},
"/teams/": {
"get": {
"operationId": "TeamsList",
"summary": "Retrieve a list of Teams",
"description": "Retrieves a list of teams.",
"parameters": [
{
"name": "page",
"in": "query",
"description": "A page number within the paginated result set.",
"required": false,
"type": "integer"
},
{
"name": "limit",
"in": "query",
"description": "Number of results to return per page.",
"required": false,
"type": "integer"
},
{
"name": "include_personal",
"in": "query",
"required": false,
"type": "boolean"
}
],
"responses": {
"200": {
"description": "",
"schema": {
"required": [
"count",
"results"
],
"type": "object",
"properties": {
"count": {
"type": "integer"
},
"next": {
"type": "string",
"format": "uri",
"x-nullable": true
},
"previous": {
"type": "string",
"format": "uri",
"x-nullable": true
},
"results": {
"type": "array",
"items": {
"$ref": "#/definitions/Team"
}
}
}
}
}
},
"tags": [
"teams"
],
"x-ms-visibility": "internal"
},
"parameters": []
},
"/templates/": {
"get": {
"operationId": "TemplatesList",
"summary": "Retrieve a list of Templates",
"description": "Retrieves a list of templates.",
"parameters": [
{
"name": "page",
"in": "query",
"description": "A page number within the paginated result set.",
"required": false,
"type": "integer"
},
{
"name": "limit",
"in": "query",
"description": "Number of results to return per page.",
"required": false,
"type": "integer"
},
{
"name": "subdomain",
"in": "query",
"required": false,
"type": "string"
}
],
"responses": {
"200": {
"description": "",
"schema": {
"required": [
"count",
"results"
],
"type": "object",
"properties": {
"count": {
"type": "integer"
},
"next": {
"type": "string",
"format": "uri",
"x-nullable": true
},
"previous": {
"type": "string",
"format": "uri",
"x-nullable": true
},
"results": {
"type": "array",
"items": {
"$ref": "#/definitions/Template"
}
}
}
}
}
},
"tags": [
"templates"
],
"x-ms-visibility": "internal"
},
"parameters": []
},
"/webhooks/": {
"post": {
"operationId": "WebhooksCreate",
"summary": "When a document status changes",
"description": "Triggers when the document status of a SignRequest changes.",
"parameters": [
{
"name": "data",
"in": "body",
"required": true,
"schema": {
"$ref": "#/definitions/WebhookSubscription"
}
}
],
"responses": {
"201": {
"description": "",
"schema": {
"$ref": "#/definitions/WebhookSubscription"
}
}
},
"tags": [
"webhooks"
],
"x-ms-trigger": "single",
"x-ms-visibility": "important"
},
"parameters": [],
"x-ms-notification-content": {
"schema": {
"type": "object",
"properties": {
"document": {
"$ref": "#/definitions/Document"
}
}
}
}
}
},
"definitions": {
"DocumentAttachment": {
"required": [
"document"
],
"type": "object",
"properties": {
"url": {
"title": "Document Attachment Url",
"type": "string",
"format": "uri",
"readOnly": true,
"x-ms-visibility": "advanced"
},
"uuid": {
"title": "Document Attachment Uuid",
"type": "string",
"readOnly": true,
"minLength": 1,
"x-ms-visibility": "advanced"
},
"name": {
"title": "Document Attachment Name",
"description": "Defaults to filename, including extension",
"type": "string",
"maxLength": 255,
"x-nullable": true,
"x-ms-visibility": "advanced"
},
"file": {
"title": "Document Attachment File",
"description": "Temporary URL to document attachment, expires in five minutes",
"type": "string",
"readOnly": true,
"x-nullable": true,
"format": "uri",
"x-ms-visibility": "advanced"
},
"file_from_content": {
"title": "Document Attachment File From Content",
"description": "Base64 encoded document content",
"type": "string",
"x-nullable": true,
"x-ms-visibility": "advanced"
},
"file_from_content_name": {
"title": "Document Attachment File From Content Name",
"description": "Filename, including extension. Required when using `file_from_content`.",
"type": "string",
"x-nullable": true,
"x-ms-visibility": "advanced"
},
"file_from_url": {
"title": "Document Attachment File From Url",
"description": "Publicly accessible URL of document to be downloaded by SignRequest",
"type": "string",
"format": "uri",
"maxLength": 2100,
"x-nullable": true,
"x-ms-visibility": "advanced"
},
"document": {
"title": "Document Attachment Document",
"type": "string",
"format": "uri",
"x-ms-visibility": "advanced"
}
}
},
"InlineTeam": {
"type": "object",
"properties": {
"name": {
"title": "Team Name",
"type": "string",
"readOnly": true,
"minLength": 1,
"x-ms-visibility": "advanced"
},
"subdomain": {
"title": "Team Subdomain",
"type": "string",
"format": "slug",
"pattern": "^[-a-zA-Z0-9_]+$",
"readOnly": true,
"minLength": 1,
"x-ms-visibility": "advanced"
},
"url": {
"title": "Team Url",
"type": "string",
"format": "uri",
"readOnly": true,
"x-ms-visibility": "advanced"
}
},
"readOnly": true
},
"User": {
"title": "User",
"required": [
"email"
],
"type": "object",
"properties": {
"email": {
"title": "User Email Address",
"type": "string",
"format": "email",
"maxLength": 254,
"minLength": 1,
"x-ms-visibility": "advanced"
},
"first_name": {
"title": "User First Name",
"type": "string",
"maxLength": 255,
"x-ms-visibility": "advanced"
},
"last_name": {
"title": "User Last Name",
"type": "string",
"maxLength": 255,
"x-ms-visibility": "advanced"
},
"display_name": {
"title": "User Display Name",
"type": "string",
"readOnly": true,
"minLength": 1,
"x-ms-visibility": "advanced"
}
}
},
"InlinePrefillTags": {
"description": "Prefill signer input data, see [prefill tags](#section/Preparing-a-document/Prefill-tags-templates)",
"type": "object",
"properties": {
"external_id": {
"title": "Prefill Tags External Id",
"type": "string",
"maxLength": 255,
"x-nullable": true,
"x-ms-visibility": "advanced"
},
"text": {
"title": "Prefill Tags Text",
"type": "string",
"x-nullable": true,
"x-ms-visibility": "advanced"
},
"checkbox_value": {
"title": "Prefill Tags Checkbox Value",
"type": "boolean",
"x-nullable": true,
"x-ms-visibility": "advanced"
},
"date_value": {
"title": "Prefill Tags Date Value",
"type": "string",
"format": "date",
"x-nullable": true,
"x-ms-visibility": "advanced"
}
}
},
"FileFromSf": {
"title": "File from sf",
"required": [
"object_type",
"object_id"
],
"type": "object",
"properties": {
"object_type": {
"title": "Object type",
"type": "string",
"minLength": 1,
"x-ms-visibility": "advanced"
},
"object_id": {
"title": "Object id",
"type": "string",
"minLength": 1,
"x-ms-visibility": "advanced"
},
"uid": {
"title": "Uid",
"type": "string",
"minLength": 1,
"x-ms-visibility": "advanced"
}
}
},
"RequiredAttachment": {
"required": [
"name"
],
"type": "object",
"properties": {
"name": {
"title": "Required Attachment Name",
"type": "string",
"maxLength": 255,
"minLength": 1,
"x-ms-visibility": "advanced"
},
"uuid": {
"title": "Required Attachment Uuid",
"type": "string",
"readOnly": true,
"minLength": 1,
"x-ms-visibility": "advanced"
}
}
},
"SignerInputs": {
"required": [
"page_index"
],
"type": "object",
"properties": {
"type": {
"title": "Type",
"type": "string",
"enum": [
"s",
"i",
"n",
"d",
"t",
"c"
],
"x-nullable": true,
"x-ms-visibility": "advanced"
},
"page_index": {
"title": "Page index",
"type": "integer",
"x-ms-visibility": "advanced"
},
"text": {
"title": "Text",
"type": "string",
"x-ms-visibility": "advanced"
},
"checkbox_value": {
"title": "Checkbox value",
"type": "boolean",
"x-nullable": true,
"x-ms-visibility": "advanced"
},
"date_value": {
"title": "Date value",
"type": "string",
"format": "date",
"x-nullable": true,
"x-ms-visibility": "advanced"
},
"external_id": {
"title": "External id",
"type": "string",
"maxLength": 255,
"x-nullable": true,
"x-ms-visibility": "advanced"
},
"placeholder_uuid": {
"title": "Placeholder uuid",
"type": "string",
"maxLength": 36,
"x-nullable": true,
"x-ms-visibility": "advanced"
}
}
},
"SignerAttachment": {
"type": "object",
"properties": {
"uuid": {
"title": "Uuid",
"type": "string",
"readOnly": true,
"minLength": 1,
"x-ms-visibility": "advanced"
},
"name": {
"title": "Name",
"description": "Defaults to filename",
"type": "string",
"readOnly": true,
"minLength": 1,
"x-ms-visibility": "advanced"
},
"file": {
"title": "File",
"type": "string",
"readOnly": true,
"x-nullable": true,
"format": "uri",
"x-ms-visibility": "advanced"
},
"for_attachment": {
"$ref": "#/definitions/RequiredAttachment"
}
}
},
"Signer": {
"required": [
"email"
],
"type": "object",
"properties": {
"email": {
"title": "Signer Email",
"type": "string",
"format": "email",
"maxLength": 255,
"minLength": 1,
"x-ms-visibility": "important"
},
"display_name": {
"title": "Signer Display Name",
"type": "string",
"readOnly": true,
"minLength": 1,
"x-ms-visibility": "advanced"
},
"first_name": {
"title": "Signer First Name",
"type": "string",
"maxLength": 255,
"x-ms-visibility": "advanced"
},
"last_name": {
"title": "Signer Last Name",
"type": "string",
"maxLength": 255,
"x-ms-visibility": "important"
},
"email_viewed": {
"title": "Signer Email Viewed",
"type": "boolean",
"readOnly": true,
"x-ms-visibility": "advanced"
},
"viewed": {
"title": "Signer Viewed",
"type": "boolean",
"readOnly": true,
"x-ms-visibility": "advanced"
},
"signed": {
"title": "Signer Signed",
"type": "boolean",
"readOnly": true,
"x-ms-visibility": "advanced"
},
"downloaded": {
"title": "Signer Downloaded",
"type": "boolean",
"readOnly": true,
"x-ms-visibility": "advanced"
},
"signed_on": {
"title": "Signer Signed On",
"type": "string",
"format": "date-time",
"readOnly": true,
"x-ms-visibility": "advanced"
},
"needs_to_sign": {
"title": "Signer Needs To Sign",
"type": "boolean",
"default": true,
"x-ms-visibility": "important"
},
"approve_only": {
"title": "Signer Approve Only",
"type": "boolean",
"x-ms-visibility": "advanced"
},
"notify_only": {
"title": "Signer Notify Only",
"type": "boolean",
"x-ms-visibility": "advanced"
},
"in_person": {
"title": "Signer In Person",
"type": "boolean",
"x-ms-visibility": "advanced"
},
"order": {
"title": "Signer Order",
"type": "integer",
"maximum": 2147483647,
"minimum": 0,
"x-ms-visibility": "important"
},
"language": {
"title": "Signer Language",
"type": "string",
"enum": [
"en",
"en-gb",
"nl",
"fr",
"de",
"he",
"da",
"fi",
"hu",
"it",
"no",
"pl",
"pt",
"es",
"sv",
"ru"
],
"x-nullable": true,
"x-ms-visibility": "advanced"
},
"force_language": {
"title": "Signer Force Language",
"type": "boolean",
"x-ms-visibility": "advanced"
},
"emailed": {
"title": "Signer Emailed",
"type": "boolean",
"readOnly": true,
"x-ms-visibility": "advanced"
},
"verify_phone_number": {
"title": "Signer Verify Phone Number",
"type": "string",
"maxLength": 255,
"x-nullable": true,
"x-ms-visibility": "advanced"
},
"verify_bank_account": {
"title": "Signer Verify Bank Account",
"type": "string",
"maxLength": 255,
"x-nullable": true,
"x-ms-visibility": "advanced"
},
"declined": {
"title": "Signer Declined",
"type": "boolean",
"readOnly": true,
"x-ms-visibility": "advanced"
},
"declined_on": {
"title": "Signer Declined On",
"type": "string",
"format": "date-time",
"readOnly": true,
"x-ms-visibility": "advanced"
},
"forwarded": {
"title": "Signer Forwarded",
"type": "string",
"readOnly": true,
"x-ms-visibility": "advanced"
},
"forwarded_on": {
"title": "Signer Forwarded On",
"type": "string",
"format": "date-time",
"readOnly": true,
"x-ms-visibility": "advanced"
},
"forwarded_to_email": {
"title": "Signer Forwarded To Email",
"type": "string",
"format": "email",
"readOnly": true,
"minLength": 1,
"x-ms-visibility": "advanced"
},
"forwarded_reason": {
"title": "Signer Forwarded Reason",
"type": "string",
"readOnly": true,
"minLength": 1,
"x-ms-visibility": "advanced"
},
"message": {
"title": "Signer Message",
"type": "string",
"readOnly": true,
"minLength": 1,
"x-ms-visibility": "advanced"
},
"embed_url_user_id": {
"title": "Signer Embed Url User Id",
"type": "string",
"maxLength": 255,
"x-nullable": true,
"x-ms-visibility": "advanced"
},
"inputs": {
"type": "array",
"items": {
"$ref": "#/definitions/SignerInputs"
},
"readOnly": true,
"x-ms-visibility": "advanced"
},
"use_stamp_for_approve_only": {
"title": "Signer Use Stamp For Approve Only",
"description": "Place an approval stamp on a document when a signer approves a document",
"type": "boolean",
"x-nullable": true,
"x-ms-visibility": "advanced"
},
"embed_url": {
"title": "Signer Embed Url",
"type": "string",
"format": "uri",
"readOnly": true,
"minLength": 1,
"x-ms-visibility": "advanced"
},
"attachments": {
"type": "array",
"items": {
"$ref": "#/definitions/SignerAttachment"
},
"readOnly": true,
"x-ms-visibility": "advanced"
},
"redirect_url": {
"title": "Signer Redirect Url",
"type": "string",
"format": "uri",
"maxLength": 2100,
"x-nullable": true,
"x-ms-visibility": "advanced"
},
"redirect_url_declined": {
"title": "Signer Redirect Url Declined",
"type": "string",
"format": "uri",
"maxLength": 2100,
"x-nullable": true,
"x-ms-visibility": "advanced"
},
"after_document": {
"title": "Signer After Document",
"type": "string",
"format": "uri",
"x-ms-visibility": "advanced"
},
"password": {
"title": "Signer Password",
"description": "Require the signer to enter this password before signing a document. This field is write only.",
"type": "string",
"minLength": 1,
"x-ms-visibility": "advanced"
}
}
},
"InlineSignRequest": {
"type": "object",
"properties": {
"from_email": {
"title": "Signrequest From Email",
"description": "Email of user sending the SignRequest (must be a validated email)",
"type": "string",
"format": "email",
"readOnly": true,
"minLength": 1,
"x-ms-visibility": "advanced"
},
"from_email_name": {
"title": "Signrequest From Email Name",
"description": "Name to be used in the `From` email header, e.g. `{from_email_name}
@michi88 Thanks for reporting. I will investigate.
I tried again today with specific regional endpoints and couldn't reproduce. Can you please try the following commands? paconn validate -d apiDefinition.swagger.json -u https://us.api.powerapps.com paconn validate -d apiDefinition.swagger.json -u https://europe.api.powerapps.com
Still the same:
$ paconn validate -d apiDefinition.swagger.json -u https://us.api.powerapps.com
{
"message": "No HTTP resource was found that matches the request URI 'https://us.api.powerapps.com/providers/Microsoft.PowerApps/objectIds/validateApiSwagger?api-version=2016-11-01&enableConnectorCertificationRules=true'."
}
404 Client Error: Not Found for url: https://us.api.powerapps.com/providers/Microsoft.PowerApps/objectIds/validateApiSwagger?api-version=2016-11-01&enableConnectorCertificationRules=true
$ paconn validate -d apiDefinition.swagger.json -u https://europe.api.powerapps.com
{
"message": "No HTTP resource was found that matches the request URI 'https://europe.api.powerapps.com/providers/Microsoft.PowerApps/objectIds/validateApiSwagger?api-version=2016-11-01&enableConnectorCertificationRules=true'."
}
404 Client Error: Not Found for url: https://europe.api.powerapps.com/providers/Microsoft.PowerApps/objectIds/validateApiSwagger?api-version=2016-11-01&enableConnectorCertificationRules=true
$ paconn validate -s settings.json -u https://europe.api.powerapps.com
{
"message": "No HTTP resource was found that matches the request URI 'https://preview.api.powerapps.com/providers/Microsoft.PowerApps/objectIds/validateApiSwagger?api-version=2016-11-01&enableConnectorCertificationRules=true'."
}
404 Client Error: Not Found for url: https://preview.api.powerapps.com/providers/Microsoft.PowerApps/objectIds/validateApiSwagger?api-version=2016-11-01&enableConnectorCertificationRules=true
$ paconn validate -d apiDefinition.swagger.json
{
"message": "No HTTP resource was found that matches the request URI 'https://api.powerapps.com/providers/Microsoft.PowerApps/objectIds/validateApiSwagger?api-version=2016-11-01&enableConnectorCertificationRules=true'."
}
404 Client Error: Not Found for url: https://api.powerapps.com/providers/Microsoft.PowerApps/objectIds/validateApiSwagger?api-version=2016-11-01&enableConnectorCertificationRules=true
paconn==0.0.11
azure-common==1.1.23
azure-core==1.0.0
azure-nspkg==3.0.2
azure-storage-blob==0.37.1
azure-storage-common==0.37.1
azure-storage-nspkg==3.1.0
msrestazure==0.6.2
Thanks for testing @michi88 I will investigate more.
The root cause of the problem is that the user may not have a paid subscription for this feature.
Having a paid subscription is important, because we will need you to have the ability to setup an environment where you can create, modify and test not only your custom connector but also your certified connector.
Here is a link to the Microsoft Power Apps and Power Automate Licensing Guide. Microsoft does offer standalone Power Automate (Flow) subscriptions that you can purchase in order to create environments needed for custom and certified connectors. Specifically, you will need an environment in the Preview region to test your certified connector that we create and deploy.
Once you buy a license and create an environment, you can import your postman file to create a custom connector that the CLI tool can access to create the artifact files needed for certification.
Describe the bug When attempting to validate a connector you get the below error
Navigating to the URL given in the error
https://api.powerapps.com/providers/Microsoft.PowerApps/objectIds/c03fcc17-7e4e-4a4a-bf0f-5f39e2844a83/validateApiSwagger?api-version=2016-11-01&enableConnectorCertificationRules=true
returns
{"message":"No HTTP resource was found that matches the request URI 'https://api.powerapps.com/providers/Microsoft.PowerApps/objectIds/c03fcc17-7e4e-4a4a-bf0f-5f39e2844a83/validateApiSwagger?api-version=2016-11-01&enableConnectorCertificationRules=true'."}
To Reproduce
paconn validate --api-def apiDefinition.swagger.json
Expected behavior A clear and concise description of what you expected to happen.
Environment summary paconn-cli version 0.0.10 running in Docker container on MacOS Mojave
docker run --rm -it -v $(pwd):/usr/app/paconn garryt/paconn-cli