Source: management/index.js

  1. import urljoin from 'url-join';
  2. import RequestBuilder from '../helper/request-builder';
  3. import assert from '../helper/assert';
  4. import responseHandler from '../helper/response-handler';
  5. /**
  6. * Auth0 Management API Client (methods allowed to be called from the browser only)
  7. * @constructor
  8. * @param {Object} options
  9. * @param {Object} options.domain your Auth0 acount domain
  10. * @param {Object} options.token a valid API token
  11. */
  12. function Management(options) {
  13. /* eslint-disable */
  14. assert.check(
  15. options,
  16. { type: 'object', message: 'options parameter is not valid' },
  17. {
  18. domain: { type: 'string', message: 'domain option is required' },
  19. token: { type: 'string', message: 'token option is required' },
  20. _sendTelemetry: {
  21. optional: true,
  22. type: 'boolean',
  23. message: '_sendTelemetry option is not valid'
  24. },
  25. _telemetryInfo: {
  26. optional: true,
  27. type: 'object',
  28. message: '_telemetryInfo option is not valid'
  29. }
  30. }
  31. );
  32. /* eslint-enable */
  33. this.baseOptions = options;
  34. this.baseOptions.headers = {
  35. Authorization: 'Bearer ' + this.baseOptions.token
  36. };
  37. this.request = new RequestBuilder(this.baseOptions);
  38. this.baseOptions.rootUrl = urljoin(
  39. 'https://' + this.baseOptions.domain,
  40. 'api',
  41. 'v2'
  42. );
  43. }
  44. /**
  45. * @callback userCallback
  46. * @param {Error} [err] failure reason for the failed request to Management API
  47. * @param {Object} [result] user profile
  48. * @memberof Management.prototype
  49. */
  50. /**
  51. * Returns the user profile
  52. *
  53. * @method getUser
  54. * @param {String} userId identifier of the user to retrieve
  55. * @param {userCallback} cb
  56. * @see https://auth0.com/docs/api/management/v2#!/Users/get_users_by_id
  57. * @memberof Management.prototype
  58. */
  59. Management.prototype.getUser = function(userId, cb) {
  60. var url;
  61. assert.check(userId, {
  62. type: 'string',
  63. message: 'userId parameter is not valid'
  64. });
  65. assert.check(cb, { type: 'function', message: 'cb parameter is not valid' });
  66. url = urljoin(this.baseOptions.rootUrl, 'users', userId);
  67. return this.request.get(url).end(responseHandler(cb, { ignoreCasing: true }));
  68. };
  69. /**
  70. * Updates the user metdata. It will patch the user metdata with the attributes sent.
  71. *
  72. *
  73. * @method patchUserMetadata
  74. * @param {String} userId
  75. * @param {Object} userMetadata
  76. * @param {userCallback} cb
  77. * @see {@link https://auth0.com/docs/api/management/v2#!/Users/patch_users_by_id}
  78. * @memberof Management.prototype
  79. */
  80. Management.prototype.patchUserMetadata = function(userId, userMetadata, cb) {
  81. var url;
  82. assert.check(userId, {
  83. type: 'string',
  84. message: 'userId parameter is not valid'
  85. });
  86. assert.check(userMetadata, {
  87. type: 'object',
  88. message: 'userMetadata parameter is not valid'
  89. });
  90. assert.check(cb, { type: 'function', message: 'cb parameter is not valid' });
  91. url = urljoin(this.baseOptions.rootUrl, 'users', userId);
  92. return this.request
  93. .patch(url)
  94. .send({ user_metadata: userMetadata })
  95. .end(responseHandler(cb, { ignoreCasing: true }));
  96. };
  97. /**
  98. * Updates the user attributes. It will patch the user attributes that the server allows it.
  99. *
  100. * @method patchUserAttributes
  101. * @param {String} userId
  102. * @param {Object} user
  103. * @param {userCallback} cb
  104. * @see {@link https://auth0.com/docs/api/management/v2#!/Users/patch_users_by_id}
  105. * @memberof Management.prototype
  106. */
  107. Management.prototype.patchUserAttributes = function(userId, user, cb) {
  108. var url;
  109. assert.check(userId, {
  110. type: 'string',
  111. message: 'userId parameter is not valid'
  112. });
  113. assert.check(user, {
  114. type: 'object',
  115. message: 'user parameter is not valid'
  116. });
  117. assert.check(cb, { type: 'function', message: 'cb parameter is not valid' });
  118. url = urljoin(this.baseOptions.rootUrl, 'users', userId);
  119. return this.request
  120. .patch(url)
  121. .send(user)
  122. .end(responseHandler(cb, { ignoreCasing: true }));
  123. };
  124. /**
  125. * Link two users
  126. *
  127. * @method linkUser
  128. * @param {String} userId
  129. * @param {String} secondaryUserToken
  130. * @param {userCallback} cb
  131. * @see {@link https://auth0.com/docs/api/management/v2#!/Users/post_identities}
  132. * @memberof Management.prototype
  133. */
  134. Management.prototype.linkUser = function(userId, secondaryUserToken, cb) {
  135. var url;
  136. /* eslint-disable */
  137. assert.check(userId, {
  138. type: 'string',
  139. message: 'userId parameter is not valid'
  140. });
  141. assert.check(secondaryUserToken, {
  142. type: 'string',
  143. message: 'secondaryUserToken parameter is not valid'
  144. });
  145. assert.check(cb, { type: 'function', message: 'cb parameter is not valid' });
  146. /* eslint-enable */
  147. url = urljoin(this.baseOptions.rootUrl, 'users', userId, 'identities');
  148. return this.request
  149. .post(url)
  150. .send({ link_with: secondaryUserToken })
  151. .end(responseHandler(cb, { ignoreCasing: true }));
  152. };
  153. export default Management;