JSPM

crowd-ts

1.0.3
  • ESM via JSPM
  • ES Module Entrypoint
  • Export Map
  • Keywords
  • License
  • Repository URL
  • TypeScript Types
  • README
  • Created
  • Published
  • Downloads 16
  • Score
    100M100P100Q32066F
  • License ISC

Atlassian Crowd typescript

Package Exports

  • crowd-ts

This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (crowd-ts) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.

Readme

Promise-based typescript library to communicate with an Atlassian Crowd server with Node. Simple, hopefully intuitive namespaced API. Built on top of axios, with built-in rate limiting via p-queue. This is a wrapper on CROWD REST Apis.

Installation

npm install --save crowd-ts

Usage

Creating Client

The client uses axios and p-queue. An axios instance is created via the config passed to the client. The one configuration property exception being, concurrency. Concurrency is passed to p-queue to allow for ratelimiting if desired, by default, there is no rate limiting. Both the instance and queue are available as properties.

import { CrowdApplication } from 'crowd-ts';

const crowd = new CrowdApplication({
  baseURL: 'https://crowd.test.org',
  auth: {
    username: 'test-application',
    password: 'test-password'
  },
  concurrency: 10 // If rate-limiting desired
});

crowd.instance; // Axios instance reference
crowd.queue; // pQueue instance reference

Basic Usage Examples

(async () => {

  // Create a user 
  const params = {
    active: true,
    name: 'testuser',
    password: 'testpassword',
    firstName: 'tom',
    lastName: 'jerry',
    displayName: 'tom and jerry',
    email: 'test@test.com'
  };

  const user = await crowd.user.add(params);

  // Update a user
  user.email = 'update@test.com';
  await crowd.user.update(user);

  // Add Group
  const group = await crowd.group.add({ name: 'testgroup' });

  // Add Group to User
  await crowd.group.addUser({ name: group.name, username: user.name });

  // Remove Group from User
  await crowd.group.removeUser({ name: group.name, username: user.name });

  // Returning all users with attributes
  const users = await crowd.user.list();

  // Add all users to group
  await Promise.all(users.map( ({ name }) => crowd.user.addGroup({ name, groupname: group.name })));

  // Returning users fitting some CQL restriction
  const users2 = await crowd.user.search({ restriction: '<restriction>' });

  // Returning list of all groups, just names
  const groups = await crowd.group.list({ expand: false })

  // Returning all group memberships as JSON
  // Structured as { [groupname: string]: { users: string[], groups: string[] }}
  const memberships = await crowd.getMemberships();

  // Remove all users
  await Promise.all(users.map( user => crowd.user.remove(user) ));

  // Remove all groups
  await Promise.all(groups.map( group => crowd.group.remove(group) ));

})()

Notes:

  • Objects don't map directly to those in the examples shown in the Crowd documentation. I remapped properties with hyphens to allow dot notation.
  • Expand sometimes accepts either boolean or string[]. Passing true will do full expansion allowed, if you'd like to only expand user or group, you can pass that as a string param

Source: crowd-ts

Client documentation: crowd-ts

Acknowledgements

Takes inspiration from atlassian-crowd-client and node-bitbucket.