<ConnectionManager Name="Azure DevOps" RuntimeVersion="" Help="http://www.cozyroc.com/ssis/azure-devops-connection" xmlns="http://www.cozyroc.com/schema/rcm-config-1.0.xsd">
	<Service EndPoint="https://dev.azure.com/[organization]" />
	<Authentication Name="OAuth" >
		<Documentation>https://docs.microsoft.com/en-us/azure/devops/integrate/get-started/authentication/oauth?view=vsts</Documentation>
		<User>
			<Parameter Name="Scope" Default="vso.build_execute vso.code_full vso.code_status vso.dashboards_manage vso.entitlements vso.extension.data_write vso.extension_manage vso.gallery_acquire vso.gallery_manage vso.graph_manage vso.identity_manage vso.loadtest_write vso.machinegroup_manage vso.memberentitlementmanagement_write vso.notification_diagnostics vso.notification_manage vso.packaging_manage vso.profile_write vso.project_manage vso.release_manage vso.security_manage vso.serviceendpoint_manage vso.symbols_manage vso.taskgroups_manage vso.test_write vso.tokenadministration vso.tokens vso.variablegroups_manage vso.wiki_write vso.work_full" />
			<Parameter Name="ApiVersion" Default="5.1" />
		</User>
		<Test Url="/_apis/projects" />
		<Token Url="{{=OAuth2.sign_in_url}}" Result="{{=response.access_token}}">
			<Parameters>
				<Parameter Name="client_id" Value="{{=OAuth2.client_id}}" />
				<Parameter Name="response_type" Value="{{=OAuth2.sign_in_response_type}}" />
				<Parameter Name="state" Value="user" />
				<Parameter Name="scope" Value="{{=token.Scope}}" />
				<Parameter Name="redirect_uri" Value="{{=OAuth2.redirect_uri}}" />
			</Parameters>
			<Authorized Id="{{=OAuth2.redirect_uri}}" Result="{{=connection.execute({
				url: OAuth2.authorization_url,
				method: OAuth2.authorization_method,
				parameters: {
					client_assertion_type: OAuth2.client_assertion_type,
					client_assertion: OAuth2.client_assertion,
					grant_type: OAuth2.grant_type,
					assertion: response.code,
					redirect_uri: OAuth2.redirect_uri
				}
			})}}" />
			<Refresh Url="{{=OAuth2.refresh_token_url}}" Method="POST" Result="{{=response.refresh_token}}" Expiration="{{=Date.now() + (response.expires_in - 300) * 1000}}">
				<Parameters>
					<Parameter Name="client_assertion_type" Value="{{=OAuth2.client_assertion_type}}" />
					<Parameter Name="client_assertion" Value="{{=OAuth2.client_assertion}}" />
					<Parameter Name="grant_type" Value="refresh_token" />
					<Parameter Name="assertion" Value="{{=token.Refresh}}" />
					<Parameter Name="redirect_uri" Value="{{=OAuth2.redirect_uri}}" />
				</Parameters>
			</Refresh>
		</Token>
		<Parameters>
			<Parameter Name="Authorization" Value="Bearer {{=token.Access}}" Type="HttpHeader" />
			<Parameter Name="api-version" Value="{{=token.ApiVersion}}" Type="QueryString" />
		</Parameters>
	</Authentication>
	<Authentication Name="PAT" >
		<Documentation>https://docs.microsoft.com/en-us/azure/devops/integrate/get-started/authentication/pats?view=vsts</Documentation>
		<User>
			<Parameter Name="PersonalAccessToken" Type="password" />
			<Parameter Name="ApiVersion" Default="5.1" />
		</User>
		<Test Url="/_apis/projects" />
		<Parameters>
			<Parameter Name="Authorization" Value="Basic {{=Base64.encode(connection.user.PersonalAccessToken)}}" Type="HttpHeader" />
			<Parameter Name="api-version" Value="{{=connection.user.ApiVersion}}" Type="QueryString" />
		</Parameters>
	</Authentication>
	<Resources>
		<Template>
			<Field Name="ShortText" DataType="DT_WSTR" Length="255" />
			<Field Name="LongText" DataType="DT_WSTR" Length="1000" />
			<Field Name="DateTime" DataType="DT_DBTIMESTAMP" />
			<Resource Name="Base">
				<Read>
					<Parameters>
						<Parameter Name="_includeUserParameters" Value="{{=parameters}}" />
					</Parameters>
				</Read>
				<Create Method="POST">
					<Parameters>
						<Parameter Name="_includeUserParameters" Value="{{=parameters}}" />
						<Parameter Name="application/json" Value="{{=item}}" Type="Body" />
					</Parameters>
				</Create>
				<Update Method="PUT">
					<Parameters>
						<Parameter Name="_includeUserParameters" Value="{{=parameters}}" />
						<Parameter Name="application/json" Value="{{=item}}" Type="Body" />
					</Parameters>
				</Update>
				<Delete Method="DELETE" />
			</Resource>
		</Template>
	</Resources>
	<Script>
		<Module Name="Main">
			<![CDATA[
require('underscore');

]]>
		</Module>
		<Module Name="PAT">
			<![CDATA[
require('base64');

]]>
		</Module>
		<Module Name="OAuth">
			<![CDATA[ 
var OAuth2 = {
	client_id: "1C0B6F1A-03ED-41DC-A2A0-3CFFB7D292BB",
	client_assertion_type: "urn:ietf:params:oauth:client-assertion-type:jwt-bearer",
	client_assertion: "eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsIng1dCI6Im9PdmN6NU1fN3AtSGpJS2xGWHo5M3VfVjBabyJ9.eyJjaWQiOiIxYzBiNmYxYS0wM2VkLTQxZGMtYTJhMC0zY2ZmYjdkMjkyYmIiLCJjc2kiOiJmNTFmMmQyMi1mZGE4LTQ1NDMtYmZkZS1iMmJkNWUxNDJjY2EiLCJuYW1laWQiOiI1MzkyMmJhYi05NzI5LTZiYmMtOTRjYi04YzliNTRiMTc0OWMiLCJpc3MiOiJhcHAudnN0b2tlbi52aXN1YWxzdHVkaW8uY29tIiwiYXVkIjoiYXBwLnZzdG9rZW4udmlzdWFsc3R1ZGlvLmNvbSIsIm5iZiI6MTU3OTU1MjQwMywiZXhwIjoxNzM3NDA1MjAzfQ.SceqVPP-i_f46gMVVC0Z0Gb1McEElmv9-RG0bibFHREMCHRwp1ptwRnBet56EFj8GtBPjAgUXjy2gZtVMccTMv89mpFP_M3WekAYuJUtsPSpWftiJ5KfUFv9JKXZAegQu4DNAQssJe2SGm2gTNGkL5E_xdsU8yt_fAlBAi89odD3TWC6H0-GuouIjmJ-ZNBqfunVaPiOePQySmxX4oNZjLHhc8Yi-1suMusD5Ea10-GypOlx3W6Lu8IzDNctH5nime8WKjsCFOkY2PUx9I_H23a5sELdBp0KzK_i7syNpHYiCFtSWWBr72olymKqFhNNY08zvvg_DBWs0PkgR3PUAA",
	sign_in_url: "https://app.vssps.visualstudio.com/oauth2/authorize", 
	sign_in_response_type: "Assertion",
	authorization_url: "https://app.vssps.visualstudio.com/oauth2/token",
	authorization_method: "POST",
	redirect_uri: "https://www.cozyroc.com/oauth_callback",
	grant_type: "urn:ietf:params:oauth:grant-type:jwt-bearer",
	refresh_token_url: "https://app.vssps.visualstudio.com/oauth2/token"
};
]]>
		</Module>
	</Script>
</ConnectionManager>
