export type FulfillmentProviderAppMetadata = {
    /** @description The id for this integration */
    Id: string;
    /** @description The name of this integration */
    Name: string;
    /** @description The specification for authorizing with this fulfillment provider */
    AuthProcess: AuthSpecification;
    /** @description A list of branded fulfillment providers associated with this integration */
    FulfillmentProviders: FulfillmentProviderDefinition[];
};
/** @description Shipping service for a fulfillment provider */
export type FulfillmentServiceDefinition = {
    /** @description This is a unique GUID identifier for this shipping service */
    Id: string;
    /** @description Name of the shipping service */
    Name: string;
    /** @description Shortened name of the shipping service */
    Abbreviation: string;
    /** @description Api service code used for rates and labels */
    Code: string;
};
/** @description Defined metadata for a branded fulfillment provider */
export type FulfillmentProviderDefinition = {
    /** @description This is a unique GUID identifier for this fulfillment provider source */
    Id: string;
    /** @description The branded name for this fulfillment provider @example "FBA", "Shipwore" */
    Name: string;
    /** @description The long text description for this fulfillment provider */
    Description: string;
    /** @description The list of available fulfillment services */
    FulfillmentServices: FulfillmentServiceDefinition[];
    /** @description Specifies connection forms */
    AccountModals: {
        /** @description Defines fields for registration */
        RegistrationFormSchema: {
            JsonSchema: object;
            UiSchema: object;
        };
        /** @description Defines fields for changes to the connection */
        SettingsFormSchema: {
            JsonSchema: object;
            UiSchema: object;
        };
    };
    /** @description Images that will be used for this branded fulfillment provider */
    Images: {
        /** @description The full path to the logo used in modals and other areas of our platform for this fulfillment provider. Use join(__dirname, '../assets/logo.svg') @example "/dev/integration/assets/fulfillmentprovider1/logo.svg" */
        LogoUrl: string;
        /** @description The full path to the icon used for this fulfillment provider. Use join(__dirname, '../assets/logo.svg') @example "/dev/integration/assets/fulfillmentprovider1/icon.svg" */
        IconUrl: string;
    };
};
/** @description Used to specify information about an integrations authentication */
export declare class AuthSpecification {
    /** @description Identify the type of Auth being used by the integration */
    Identifier: AuthIdentifier;
    /** @description Added to allow oauth 1.0 to work. */
    access_token?: AccessToken;
    /** @description Authorization: the beginning of an OAuth2.0 flow that ensures the user is logged
     * in and approves access to the Resource. */
    authorization?: AuthorizationConfiguration;
    /** @description Request Token: server-server code for token exchange */
    request_token?: RequestTokenConfiguration;
    /** @description Refresh Token: server-server refresh token exchange for access token
     * **NOTE: sometimes a new RT is also created** */
    refresh_token?: RefreshTokenConfiguration;
    /** @description Advanced configurations used for oauth 1.0 */
    advanced_configuration?: Parameter[];
    /** @description Connections is an optional feature that an integration may provide. A common use
     * of connections is to provide the ability to connect to a sandbox or production endpoint.
     * Connection name values may be accessed in a flow e.g in the request_token section, the url is
     * dynamic.
     *
     *  "url_template": "{connection_name:$.url}/access/token/request", */
    connections?: ConnectionNamesConfiguration;
}
export declare class AuthIdentifier {
    AuthenticationType: AuthenticationType;
    Version?: string;
    IsSandbox?: boolean;
}
export declare enum AuthenticationType {
    OAuth = "oauth",
    Basic = "basic",
    ApiKey = "apikey"
}
export declare class AccessToken {
    /** @description OAuth1 only. The url to obtain the temporary Access (aka Request) Token to start a flow **/
    url_template: string;
}
export declare class AuthorizationConfiguration {
    /** @description The url to obtain the access token using the authorization code on the backend
     * @example "http://{auth_state:store_name}.store.com/admin/oauth/authorize", "http://store.com/oauth/authorize" */
    url_template: string;
    /** @description A list of query parameters that will be attached to the url */
    query_parameters?: Parameter[];
    /** @description Method to use when making the server-server code for token request @example "GET", "POST" */
    method?: string;
    /** @description List of parameters that are sent to the integration during the server-server
     * authorization request. These are built using the content type specified in the headers array. */
    body?: Parameter[];
    /** @description List of headers that are sent to the integration when authorizing a token */
    headers?: Parameter[];
    /** @description A nonce query parameter included on the accept request, then returned and validated on the redirect request */
    nonce?: NonceConfiguration;
}
export declare class Parameter {
    /** @description The name of the parameter */
    name: string;
    /** @description The value associated with the parameter */
    value: string;
}
export declare class NonceConfiguration {
    name: string;
}
export declare class RequestTokenConfiguration {
    /** @description The url to obtain the access token using the authorization code on the backend @example "http://{auth_state:store_name}.store.com/admin/oauth/request", "http://store.com/oauth/request" */
    url_template: string;
    /** @description A list of query parameters that will be attached to the url */
    query_parameters?: Parameter[];
    /** @description Method to use when making the server-server code for token request @example "GET", "POST" */
    method?: string;
    /** @description List of parameters that are sent to the integration when exchanging the code for the token. These are built using ContentType */
    body?: Parameter[];
    /** @description List of headers that are sent to the integration when requesting a token */
    headers?: Parameter[];
    /** @description Response payload parsing */
    response?: ResponseTransformationConfiguration;
}
export declare class ResponseTransformationConfiguration {
    /** @description JSONPath to the JSON element for access_token. */
    access_token: string;
    /** @description JSONPath to the JSON element for token_type */
    token_type: string;
    /** @description JSONPath to the JSON element for refresh_token */
    refresh_token?: string;
    /** @description JSONPath to the JSON element for expires_in. Mutually exclusive with expires_at */
    expires_in?: string;
    /** @description Configuration for parsing a date-time, when the integration is lacking expires_in.
     * Mutually exclusive with expires_in.
     */
    expires_at?: DateTimeConfiguration;
    /** @description Optional collection of properties to include in the connection_context sent back with the auth flow result.
     *  Property value may be JSONPath or a string literal.
     *  E.g.
     *  "connection_context": {
     *    "store_id": "$.data.store_id"
     *  }
     */
    connection_context?: MapOfStrings;
}
export declare class DateTimeConfiguration {
    /** @description JSONPath to the JSON element containing the date-time */
    path: string;
    /** @description DateTime format string compliant with
     * https://docs.microsoft.com/en-us/dotnet/standard/base-types/custom-date-and-time-format-strings */
    date_time_format: string;
}
export type MapOfStrings = {
    [key: string]: string;
};
export declare class RefreshTokenConfiguration {
    /** @description The url to refresh the access token using the authorization code on the backend @example "http://{auth_state:store_name}.store.com/admin/oauth/refresh", "http://store.com/oauth/refresh" */
    url_template: string;
    /** @description A list of query parameters that will be attached to the url */
    query_parameters?: Parameter[];
    /** @description Method to use when making the server-server code for token request @example "GET", "POST" */
    method?: string;
    /** @description List of parameters that are sent to the integration during the server-server refresh token request. These are built using the content type specified in the headers array. */
    body?: Parameter[];
    /** @description List of headers that are sent to the integration when refreshing a token */
    headers?: Parameter[];
    /** @description Response payload parsing */
    response?: ResponseTransformationConfiguration;
}
export declare class ConnectionNamesConfiguration {
    /** @description A unique list of connection names that the integration supports. */
    connection_names: MapOfObjects;
    /** @description The connection name that will be used when none is selected. */
    default_connection_name: string;
}
export type MapOfObjects = {
    [key: string]: any;
};
