Skip to content

Instantly share code, notes, and snippets.

@NeilHanlon
Last active August 19, 2023 05:28
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save NeilHanlon/7f86ac9607d3fe77afc37d49db8777cd to your computer and use it in GitHub Desktop.
Save NeilHanlon/7f86ac9607d3fe77afc37d49db8777cd to your computer and use it in GitHub Desktop.
async function qualification(component: Input): Promise<Output> {
const url = component.domain?.url;
const token = component.domain?.token;
if (!(url && token)) {
return {
result: 'failure',
message: 'url and token are required'
}
}
const res = await fetch(`${url}/api`, {
method: 'GET',
headers: {
authorization: `Token ${token}`
}
});
const data = await res.json();
if (typeof data !== 'object') {
// This is a generic catch all, as a valid response should be a json object
return {
result: 'failure',
message: "something went wrong with the request"
};
}
const keys = Object.keys(data);
if (data.hasOwnProperty('details')) {
// an error will return the reason the request failed in the details field, e.g.
// {"detail":"Invalid token"}
return {
result: 'failure',
message:data.details;
};
}
console.log(data);
return {
result: 'success',
message: 'Component qualified'
};
}
function createAsset() {
// Inputs
const url = new SocketDefinitionBuilder()
.setName("Url")
.setArity("one")
.setValueFrom(new ValueFromBuilder()
.setKind("inputSocket")
.setSocketName("Url")
.build())
.build();
const token = new SocketDefinitionBuilder()
.setName("Token")
.setArity("one")
.setValueFrom(new ValueFromBuilder()
.setKind("inputSocket")
.setSocketName("Token")
.build())
.build();
const locationInputSocket = new SocketDefinitionBuilder()
.setName("Location")
.setArity("one")
.build();
// Outputs
const locationOutputSocket = new SocketDefinitionBuilder()
.setName("Location")
.setArity("many")
.setValueFrom( new ValueFromBuilder()
.setKind("prop")
.setPropPath(["root", "domain", "name"])
.build())
.build();
// Props
const site = new SocketDefinitionBuilder()
.setName("Site")
.setArity("one")
.build();
const name = new PropBuilder()
.setName("name")
.setKind("string")
.build();
const slug = new PropBuilder()
.setName("slug")
.setKind("string")
.build();
const validStatusOptions = ["Planned", "Staging", "Active", "Decomissioning", "Retired"]
const statusOptionWidget = new PropWidgetDefinitionBuilder()
.setKind("comboBox");
validStatusOptions.forEach(option => {
statusOptionWidget.addOption(option, option)
})
const status = new PropBuilder()
.setName("status")
.setKind("string")
.setWidget(statusOptionWidget.build())
.build();
const setNameProp = new SiPropValueFromDefinitionBuilder()
.setKind("name")
.setValueFrom(new ValueFromBuilder()
.setKind("prop")
.setPropPath(["root", "domain", "name"])
.build())
.build();
return new AssetBuilder()
.addProp(name)
.addProp(slug)
.addProp(status)
.addInputSocket(token)
.addInputSocket(url)
.addOutputSocket(locationOutputSocket)
.addInputSocket(locationInputSocket)
.addInputSocket(site)
.addSiPropValueFrom(setNameProp)
.build()
}
function createAsset() {
const url = new PropBuilder()
.setName("url")
.setKind("string")
.build();
const token = new PropBuilder()
.setName("token")
.setKind("string")
.build();
const urlOutputSoket = new SocketDefinitionBuilder()
.setName("Url")
.setArity("many")
.setValueFrom( new ValueFromBuilder()
.setKind("prop")
.setPropPath(["root", "domain", "url"])
.build())
.build();
const tokenOutputSoket = new SocketDefinitionBuilder()
.setName("Token")
.setArity("many")
.setValueFrom( new ValueFromBuilder()
.setKind("prop")
.setPropPath(["root", "domain", "token"])
.build())
.build();
const setNameProp = new SiPropValueFromDefinitionBuilder()
.setKind("name")
.setValueFrom(new ValueFromBuilder()
.setKind("prop")
.setPropPath(["root", "domain", "url"])
.build())
.build();
return new AssetBuilder()
.addProp(url)
.addProp(token)
.addOutputSocket(tokenOutputSoket)
.addOutputSocket(urlOutputSoket)
.addSiPropValueFrom(urlPropFunc)
.addSiPropValueFrom(tokenPropFunc)
.build()
}
function createAsset() {
// Inputs
const url = new SocketDefinitionBuilder()
.setName("Url")
.setArity("one")
.setValueFrom(new ValueFromBuilder()
.setKind("inputSocket")
.setSocketName("Url")
.build())
.build();
const token = new SocketDefinitionBuilder()
.setName("Token")
.setArity("one")
.setValueFrom(new ValueFromBuilder()
.setKind("inputSocket")
.setSocketName("Token")
.build())
.build();
const regionInputSocket = new SocketDefinitionBuilder()
.setName("Region")
.setArity("one")
.build();
// Outputs
const regionOutputSocket = new SocketDefinitionBuilder()
.setName("Region")
.setArity("many")
.setValueFrom( new ValueFromBuilder()
.setKind("prop")
.setPropPath(["root", "domain", "name"])
.build())
.build();
// Props
const name = new PropBuilder()
.setName("name")
.setKind("string")
.build();
const slug = new PropBuilder()
.setName("slug")
.setKind("string")
.build();
const setNameProp = new SiPropValueFromDefinitionBuilder()
.setKind("name")
.setValueFrom(new ValueFromBuilder()
.setKind("prop")
.setPropPath(["root", "domain", "name"])
.build())
.build();
return new AssetBuilder()
.addProp(name)
.addProp(slug)
.addInputSocket(token)
.addInputSocket(url)
.addOutputSocket(regionOutputSocket)
.addInputSocket(regionInputSocket)
.addSiPropValueFrom(setNameProp)
.build()
}
function createAsset() {
// Inputs
const url = new SocketDefinitionBuilder()
.setName("Url")
.setArity("one")
.setValueFrom(new ValueFromBuilder()
.setKind("inputSocket")
.setSocketName("Url")
.build())
.build();
const token = new SocketDefinitionBuilder()
.setName("Token")
.setArity("one")
.setValueFrom(new ValueFromBuilder()
.setKind("inputSocket")
.setSocketName("Token")
.build())
.build();
const region = new SocketDefinitionBuilder()
.setName("Token")
.setArity("one")
.build();
// Outputs
const site = new SocketDefinitionBuilder()
.setName("Site")
.setArity("many")
.setValueFrom( new ValueFromBuilder()
.setKind("prop")
.setPropPath(["root", "domain", "name"])
.build())
.build();
// Props
const name = new PropBuilder()
.setName("name")
.setKind("string")
.build();
const slug = new PropBuilder()
.setName("slug")
.setKind("string")
.build();
const validStatusOptions = ["Planned", "Staging", "Active", "Decomissioning", "Retired"]
const statusOptionWidget = new PropWidgetDefinitionBuilder()
.setKind("comboBox");
validStatusOptions.forEach(option => {
statusOptionWidget.addOption(option, option)
})
const status = new PropBuilder()
.setName("status")
.setKind("string")
.setWidget(statusOptionWidget.build())
.build();
// Dynamic Props
const setNameProp = new SiPropValueFromDefinitionBuilder()
.setKind("name")
.setValueFrom(new ValueFromBuilder()
.setKind("prop")
.setPropPath(["root", "domain", "name"])
.build())
.build();
return new AssetBuilder()
.addProp(name)
.addProp(slug)
.addProp(status)
.addInputSocket(token)
.addInputSocket(url)
.addInputSocket(region)
.addOutputSocket(site)
.addSiPropValueFrom(setNameProp)
.build()
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment