bitbucket-connect
v0.4.4
Published
Helpers for building add-ons using Bitbucket Connect
Downloads
23
Readme
bitbucket-connect
Get started building Bitbucket Connect add-ons with the bitbucket-connect
scaffolding tool.
Prerequisites
- Install ngrok and configure it to serve port 3000 (
ngrok 3000
)
Quick start
npm install -g bitbucket-connect
Generate scaffolding for your project:
bbconnect
Install your project's dependencies and create a test database:
cd <project dir>
npm install
npm run migrate
Run your app using your ngrok URL and OAuth consumer key:
CONNECT_BASE_URL=<ngrok url> npm run start
Registering a Connect module
You'll want to configure your add-on so that you can start displaying
custom content inside of Bitbucket. First create a new file to serve as the
template at server/views/hello.jade
with the following contents:
extends base.jade
block content
p #{message}
Now let's open server/routes.js
and add a route handler to serve some content:
export function helloWorld(req, res) {
res.render('hello', { message: 'Hello, world!' });
}
Next, let's open server/addon.js
and register a web panel, binding it to
our route handler we just added.
First, import the new route handler you just created:
import { helloWorld } from './routes';
Then, register your web panel just before the export default addon;
line:
addon.registerWebPanelRoute('/hello-world', {
location: Addon.WebPanelLocations.REPOSITORY_OVERVIEW_INFORMATION_PANEL,
}, helloWorld);
That's it! With these small additions to your add-on, you're now able to display custom content on the overview page for any repository owned by users of your add-on.
Installing your add-on
Let's install your add-on by going to Bitbucket, clicking our avatar in the top-right, selecting Bitbucket settings, then selecting Manage add-ons in the left sidebar and clicking Install add-on from URL.
Your add-on's descriptor is located at <ngrok url>/descriptor.json
.
Enter the descriptor URL in the text field and click "Install". You will be
prompted to grant the add-on access to your account. Once granted, the add-on
will be installed.
Go to the overview of one of your repositories to see your add-on in action!
HTTP client
It is possible to make server-side calls back to the Bitbucket API. First, in addon.js pass the addon to a handler factory function...
addon.registerFileViewsRoute(
'/fileView?repoUuid={repo_uuid}&fileCset={file_cset}&filePath={file_path}',
{...},
createFileViewHandler(addon)
);
Then in routes.js define that handler factory method with API calls back to bitbucket...
export function createFileViewHandler(addon) {
return (req, res) => {
const httpClient = req.createHttpClient(addon);
const { repoUuid, fileCset, filePath } = req.query;
const url = `/api/1.0/repositories/{}/${repoUuid}/raw/${fileCset}/${filePath}`;
httpClient.get(url).then(apiRes => {
const content = transformRawSource(apiRes.data);
res.render('base', { content });
});
};
}
API
Addon
class
constructor(props[, options])
registerContexts(contexts)
registerScopes(scopes)
registerLifecycle(lifecycle, url)
registerModule(type, props)
registerAdminPage(props)
registerConfigurePage(props)
registerFileViews(props)
registerOauthConsumer(props)
registerProfileTab(props)
registerRepoPage(props)
registerWebItem(props)
registerWebPanel(props)
registerWebhooks(props)
log(msg)
get(key)
set(key, value)
constructor(props[, options])
Create an instance of a Bitbucket Connect add-on
props
(Object) - Connect descriptor properties[options]
(Object) - Options hash for add-on instanceoptions.logger
(Function) - Custom logger function
registerContexts(contexts)
Validate and add contexts to add-on descriptor
contexts
(Array) - Array of contexts to be added
Returns the current add-on instance
registerScopes(scopes)
Validate and add API scopes to add-on descriptor
scopes
(Array) - Array of API scopes to be added
Returns the current add-on instance
registerLifecycle(lifecycle, url)
Validate and add a lifecycle hook to add-on descriptor
lifecycle
(string) - Lifecycle hook name to be addedurl
(string) - URL the lifecycle hook should POST to
Returns the current add-on instance
registerModule(type, props)
Validate and add a module definition to add-on descriptor
This method is primarily used to assist other proxy methods in registering different types of modules
type
(string) - Type of module being registered (webItem, repoPage, etc.)props
(Object) - Properties of module, as defined by Connect spec
Returns the current add-on instance
registerAdminPage(props)
Validate and add adminPage to add-on descriptor
props
(Object) - Properties of adminPage, as defined by Connect spec
Returns the current add-on instance
registerConfigurePage(props)
Validate and add configurePage to add-on descriptor
props
(Object) - Properties of configurePage, as defined by Connect spec
Returns the current add-on instance
registerFileViews(props)
Validate and add fileViews to add-on descriptor
props
(Object) - Properties of fileViews, as defined by Connect spec
Returns the current add-on instance
registerOauthConsumer(props)
Validate and add oauthConsumer to add-on descriptor
props
(Object) - Properties of oauthConsumer, as defined by Connect spec
Returns the current add-on instance
registerProfileTab(props)
Validate and add profileTab to add-on descriptor
props
(Object) - Properties of profileTab, as defined by Connect spec
Returns the current add-on instance
registerRepoPage(props)
Validate and add repoPage to add-on descriptor
props
(Object) - Properties of repoPage, as defined by Connect spec
Returns the current add-on instance
registerWebItem(props)
Validate and add webItem to add-on descriptor
props
(Object) - Properties of webItem, as defined by Connect spec
Returns the current add-on instance
registerWebPanel(props)
Validate and add webPanel to add-on descriptor
props
(Object) - Properties of webPanel, as defined by Connect spec
Returns the current add-on instance
registerWebhooks(props)
Validate and add webhooks to add-on descriptor
props
(Object) - Properties of webhooks, as defined by Connect spec
Returns the current add-on instance
log(msg)
Log message through either custom logger (if defined) or console.log
msg
(string) - Message to log
Returns the current add-on instance
get(key)
Get property value from add-on descriptor
key
(string) - The key of the property to fetch
Returns the value of the requested property
set(key, value)
Set property value on add-on descriptor
key
(string) - The key of the property to setvalue
(*) - the value of the property to set
Returns the current add-on instance
ExpressAddon
class
Class representing an Express Bitbucket Connect add-on
The primary purpose of this class is to define an API for binding Connect modules to Express route handlers
constructor(props[, options])
registerLifecycleRoute(url, lifecycle, ...handlers)
registerAdminPageRoute(url, props, ...handlers)
registerConfigurePageRoute(url, props, ...handlers)
registerFileViewsRoute(url, props, ...handlers)
registerProfileTabRoute(url, props, ...handlers)
registerRepoPageRoute(url, props, ...handlers)
registerWebItemRoute(url, props, ...handlers)
registerWebPanelRoute(url, props, ...handlers)
registerWebhooksRoute(url, props, ...handlers)
generateModuleProps(url, props[, keyPrefix])
constructor(props[, options])
Create an instance of an Express Bitbucket Connect add-on
props
(Object) - Connect descriptor properties[options]
(Object) - Options hash for Express Bitbucket Connect add-onoptions.logger
(Function) - Custom logger functionoptions.routerBaseUrl
(string) - The add-on's mount point in your Express appoptions.middleware
(Array) - Array of Express middleware for authenticated routes
registerLifecycleRoute(url, lifecycle, ...handlers)
Bind lifecycle hook to Express route handler
url
(string) - Express URL for lifecycle hook to POST tolifecycle
(string) - Name of lifecycle hook, as defined by Connect spec...handlers
(Function) - Express route handlers that receive hook
Returns the current add-on instance
registerAdminPageRoute(url, props, ...handlers)
Bind adminPage module to Express route handler
url
(string) - Express URL for moduleprops
(Object) - Properties of adminPage, as defined by Connect spec...handlers
(Function) - Express route handlers that serve module
Returns the current add-on instance
registerConfigurePageRoute(url, props, ...handlers)
Bind configurePage module to Express route handler
url
(string) - Express URL for moduleprops
(Object) - Properties of configurePage, as defined by Connect spec...handlers
(Function) - Express route handlers that serve module
Returns the current add-on instance
registerFileViewsRoute(url, props, ...handlers)
Bind fileViews module to Express route handler
url
(string) - Express URL for moduleprops
(Object) - Properties of fileViews, as defined by Connect spec...handlers
(Function) - Express route handlers that serve module
Returns the current add-on instance
registerProfileTabRoute(url, props, ...handlers)
Bind profileTab module to Express route handler
url
(string) - Express URL for moduleprops
(Object) - Properties of profileTab, as defined by Connect spec...handlers
(Function) - Express route handlers that serve module
Returns the current add-on instance
registerRepoPageRoute(url, props, ...handlers)
Bind repoPage module to Express route handler
url
(string) - Express URL for moduleprops
(Object) - Properties of repoPage, as defined by Connect spec...handlers
(Function) - Express route handlers that serve module
Returns the current add-on instance
registerWebItemRoute(url, props, ...handlers)
Bind webItem module to Express route handler
url
(string) - Express URL for moduleprops
(Object) - Properties of webItem, as defined by Connect spec...handlers
(Function) - Express route handlers that serve module
Returns the current add-on instance
registerWebPanelRoute(url, props, ...handlers)
Bind webPanel module to Express route handler
url
(string) - Express URL for moduleprops
(Object) - Properties of webPanel, as defined by Connect spec...handlers
(Function) - Express route handlers that serve module
Returns the current add-on instance
registerWebhooksRoute(url, props, ...handlers)
Bind webhooks module to Express route handler
url
(string) - Express URL for hook to POST toprops
(Object) - Properties of webhooks, as defined by Connect spec...handlers
(Function) - Express route handlers that receive the hook
Returns the current add-on instance
generateModuleProps(url, props[, keyPrefix])
Generate module properties object with auto-generated URL and key values based on arguments
url
(string) - Express URL patternprops
(Object) - Connect module properties[keyPrefix]
(string) - Prefix for module keys in Connect descriptor
Returns the generated set of properties for the Connect module
validateJwtToken
middleware
Express middleware generator used to validate JWT token
getSharedSecret
(Function) - Promise-returning function to retrieve shared secret. Accepts client key as its only argument.
Returns Express middleware function