I will create a hello world function:
echo "module.exports = function(ctx, cb) { cb(null, 'hello'); }" > hello.js
wt create hello.js
Try browsing it, works fine. Ready to share it with the rest of the word:
To share it we will create a function.json with manifest (secrets, description, readme.md, etc).
{
"title": "Hello World",
"name": "hello",
"version": "1.0.0",
"author": "auth0",
"description": "Hello World.",
"logoUrl": "https://cdn.auth0.com/extensions/auth0-user-invite-extension/assets/logo.svg",
"repository": "https://github.com/auth0-extensions/auth0-user-invite-extension",
"keywords": [
"foo",
"bar"
]
"secrets": {
"FOO": {
"example": "example secret",
"description": "Foo Secret",
"required": true
}
}
}
Although a default could be created using fpm init
.
We can publish now to the registry:
fpm publish
It will now be searchable:
https://<fpm.com>/hello
This publish a public function that anybody can access.
If another webtask user wants to use this function, she can do:
fpm install hello
Behind the scenes it will install the function in the webtask. This would be the equivalent of doing:
wget -qO- https://func.com/hello.tar.gz | tar xvz
wt create hello.js
If the function requires secrets, it will ask for them or they can be provided by default
fpm install hello --secret FOO=bar
This could be extended to use other faas providers (serverless, azure functions, etc). We would need a plugin architecture for fpm
fpm plugin add webtask
The function.json would specify which provider can be used and multiple would be allowed. The user would have to pick which one they want (by default).
Now we want to release an improved version.
echo "module.exports = function(ctx, cb) { cb(null, 'hello II'); }" > hello.js
wt create hello.js
We will bump function.json
version, using:
fpm version minor
Let's publish it again:
fpm publish
Now, v1.1.0 is the latest.
I will tell a friend to install this function:
fpm install [email protected]
or
fpm install hello@latest
Let's say now I want to create a new function but make it available only for my company.
fpm init --scope=@auth0
fpm publish
Now this function is made available only for @auth0
https://<fpm.com>/@auth0/hello
Only users belonging to this org can install/access this function.
fpm install @auth0/hello
TBD
"auth0": {
"createClient": true,
"onUninstallPath": "/.extensions/on-uninstall",
"scopes": "read:connections read:users create:users update:users"
},
TBD
module.exports = function(ctx, cb) {
var foo = frequire('[email protected]');
foo.run(input, function(err, output) {
cb(null, 'hello');
});
}
I might depednd
{
"title": "Hello World",
"name": "hello",
"version": "1.0.0",
...
"dependencies" : {
"foo": "1.1.0"
"bar": "1.0.0"
}
}
If I had installed foo
already in the container, fpm install
should install