dc-management-sdk-js
Version:
Amplience Dynamic Content Management SDK
221 lines • 14.3 kB
JavaScript
import { DefaultHalClient } from './hal/services/HalClient';
import { AxiosHttpClient } from './http/AxiosHttpClient';
import { ContentItem } from './model/ContentItem';
import { ContentRepository } from './model/ContentRepository';
import { ContentType } from './model/ContentType';
import { ContentTypeSchema } from './model/ContentTypeSchema';
import { Edition } from './model/Edition';
import { Event } from './model/Event';
import { Folder } from './model/Folder';
import { Hub, HubsPage } from './model/Hub';
import { Snapshot } from './model/Snapshot';
import { Oauth2AuthHeaderProvider } from './oauth2/services/Oauth2AuthHeaderProvider';
import { HierarchyParents } from './model/HierarchyParents';
import { HierarchyChildren } from './model/HierarchyChildren';
import { WorkflowState } from './model/WorkflowState';
import { Extension } from './model/Extension';
import { PatTokenAuthHeaderProvider } from './auth/PatTokenAuthHeaderProvider';
/**
* Amplience Dynamic Content API client.
*
* Your application should avoid where possible creating a new client for each request.
* Authentication tokens are cached by the client and only re-requested when
* they expire, allowing performance to be improved by reusing the client across requests.
*
* If multiple sets of credentials are required your application should create one client
* per credential set.
*
* Example:
*
* ```typescript
* const client = new DynamicContent({
* client_id: process.env.CLIENT_ID,
* client_secret: process.env.CLIENT_SECRET
* });
*
* const repository = await client.contentRepositories.get('<REPO-ID>');
*
* const contentItem = new ContentItem();
* contentItem.label = 'Homepage Article';
* contentItem.body = {
* _meta: {
* schema: "https://github.com/techiedarren/dc-examples/blob/master/content-types/blocks/text-block.json"
* },
* paragraphs: [
* "Example article text..."
* ]
* };
*
* await repository.related.contentItems.create(contentItem);
* ```
*/
export class DynamicContent {
/**
* Creates a Dynamic Content API client instance. You must provide credentials that will
* be used to authenticate with the API.
*
* @param clientCredentials Api credentials used to generate an authentication token
* @param dcConfig Optional configuration settings for Dynamic Content
* @param httpClient Optional request settings, can be used to provide proxy settings, add interceptors etc
*/
constructor(authCredentials, dcConfig, httpClient) {
/**
* Hub Resources
*/
this.hubs = {
/**
* Retrieve a hub resource by id
* @param id hub id, previously generated on creation
*/
get: (id) => this.client.fetchResource(`/hubs/${id}`, Hub),
/**
* Retrieve a list of hub resources shared with your client credentials.
* @param options Pagination options
*/
list: (options) => this.client.fetchLinkedResource({ href: '/hubs{?page,size}', templated: true }, options, HubsPage),
};
this.contentTypeSchemas = {
/**
* Gets a content type schemas
* @param id ContentTypeSchema id
*/
get: (id) => this.client.fetchResource(`/content-type-schemas/${id}`, ContentTypeSchema),
/**
* Gets a content type schemas
* @param id ContentTypeSchema id
* @param version Version
*/
getByVersion: (id, version) => this.client.fetchResource(`/content-type-schemas/${id}/${version}`, ContentTypeSchema),
};
/**
* Content Repository Resources
*/
this.contentRepositories = {
/**
* Retrieve a content repository resource by id
* @param id content repository id, previously generated on creation
*/
get: (id) => this.client.fetchResource(`/content-repositories/${id}`, ContentRepository),
};
/**
* Hierarchy Resources
*/
this.hierarchies = {
parents: {
/**
* Retrieve parents of the associated content item
* @param id content item id accociated content item
*/
get: (id) => this.client.fetchResource(`/hierarchy-node/${id}/parents`, HierarchyParents),
},
children: {
/**
* Retrieve children of the associated content item
* @param id content item id accociated content item
*/
get: (id) => this.client.fetchResource(`/hierarchy-node/${id}/children`, HierarchyChildren),
},
};
/**
* Content Item Resources
*/
this.contentItems = {
/**
* Retrieve a content item resource by id
* @param id content item id, previously generated on creation
*/
get: (id) => this.client.fetchResource(`/content-items/${id}`, ContentItem),
};
/**
* Content Type Resources
*/
this.contentTypes = {
/**
* Retrieve a content type resource by id
* @param id content type id, previously generated on creation
*/
get: (id) => this.client.fetchResource(`/content-types/${id}`, ContentType),
};
this.folders = {
/**
* Retrieve a folder resource by id
* @param id folder id, previously generated on creation
*/
get: (id) => this.client.fetchResource(`/folders/${id}`, Folder),
};
/**
* Snapshot Resources
*/
this.snapshots = {
/**
* Retrieve a snapshot resource by id
* @param id snapshot id, previously generated on creation
*/
get: (id) => this.client.fetchResource(`/snapshots/${id}`, Snapshot),
};
/**
* Event Resources
*/
this.events = {
/**
* Retrieve an event resource by id
* @param id event id, previously generated on creation
*/
get: (id) => this.client.fetchResource(`/events/${id}`, Event),
};
/**
* Edition Resources
*/
this.editions = {
/**
* Retrieve an edition resource by id
* @param id edition id, previously generated on creation
*/
get: (id) => this.client.fetchResource(`/editions/${id}`, Edition),
};
/**
* Extension Resources
*/
this.extensions = {
/**
* Retrieve an extension resource by id
* @param id extension id, previously generated on creation
*/
get: (id) => this.client.fetchResource(`/extensions/${id}`, Extension),
};
/**
* Workflow States
*/
this.workflowStates = {
/**
* Retrieve a Workflow State by id
* @param id of Workflow State, previously generated on creation
*/
get: (id) => this.client.fetchResource(`/workflow-states/${id}`, WorkflowState),
};
dcConfig = dcConfig || {};
dcConfig.apiUrl = dcConfig.apiUrl || 'https://api.amplience.net/v2/content';
dcConfig.authUrl = dcConfig.authUrl || 'https://auth.amplience.net';
let httpClientInstance;
if (httpClient !== undefined && 'request' in httpClient) {
httpClientInstance = httpClient;
}
else {
httpClientInstance = new AxiosHttpClient(httpClient === undefined ? {} : httpClient);
}
const tokenClient = this.createTokenClient(dcConfig, authCredentials, httpClientInstance);
this.client = this.createResourceClient(dcConfig, tokenClient, httpClientInstance);
}
createTokenClient(dcConfig, authCredentials, httpClient) {
if (authCredentials.patToken) {
return new PatTokenAuthHeaderProvider(authCredentials.patToken);
}
return new Oauth2AuthHeaderProvider(authCredentials, {
authUrl: dcConfig.authUrl,
}, httpClient);
}
createResourceClient(dcConfig, tokenProvider, httpClient) {
return new DefaultHalClient(dcConfig.apiUrl, httpClient, tokenProvider);
}
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRHluYW1pY0NvbnRlbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL0R5bmFtaWNDb250ZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxnQkFBZ0IsRUFBYSxNQUFNLDBCQUEwQixDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUV6RCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDbEQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDOUQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQzlELE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMxQyxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3RDLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QyxPQUFPLEVBQUUsR0FBRyxFQUFFLFFBQVEsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUc1QyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFFNUMsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sNENBQTRDLENBQUM7QUFDdEYsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDNUQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDOUQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3RELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUU5QyxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQXFCL0U7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQWlDRztBQUNILE1BQU0sT0FBTyxjQUFjO0lBNEx6Qjs7Ozs7OztPQU9HO0lBQ0gsWUFDRSxlQUE2QyxFQUM3QyxRQUErQixFQUMvQixVQUE0QztRQXRNOUM7O1dBRUc7UUFDYSxTQUFJLEdBQUc7WUFDckI7OztlQUdHO1lBQ0gsR0FBRyxFQUFFLENBQUMsRUFBVSxFQUFnQixFQUFFLENBQ2hDLElBQUksQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLFNBQVMsRUFBRSxFQUFFLEVBQUUsR0FBRyxDQUFDO1lBRS9DOzs7ZUFHRztZQUNILElBQUksRUFBRSxDQUFDLE9BQWtCLEVBQXNCLEVBQUUsQ0FDL0MsSUFBSSxDQUFDLE1BQU0sQ0FBQyxtQkFBbUIsQ0FDN0IsRUFBRSxJQUFJLEVBQUUsbUJBQW1CLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxFQUM5QyxPQUFPLEVBQ1AsUUFBUSxDQUNUO1NBQ0osQ0FBQztRQUVjLHVCQUFrQixHQUFHO1lBQ25DOzs7ZUFHRztZQUNILEdBQUcsRUFBRSxDQUFDLEVBQVUsRUFBOEIsRUFBRSxDQUM5QyxJQUFJLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FDdkIseUJBQXlCLEVBQUUsRUFBRSxFQUM3QixpQkFBaUIsQ0FDbEI7WUFFSDs7OztlQUlHO1lBQ0gsWUFBWSxFQUFFLENBQUMsRUFBVSxFQUFFLE9BQWUsRUFBOEIsRUFBRSxDQUN4RSxJQUFJLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FDdkIseUJBQXlCLEVBQUUsSUFBSSxPQUFPLEVBQUUsRUFDeEMsaUJBQWlCLENBQ2xCO1NBQ0osQ0FBQztRQUVGOztXQUVHO1FBQ2Esd0JBQW1CLEdBQUc7WUFDcEM7OztlQUdHO1lBQ0gsR0FBRyxFQUFFLENBQUMsRUFBVSxFQUE4QixFQUFFLENBQzlDLElBQUksQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUN2Qix5QkFBeUIsRUFBRSxFQUFFLEVBQzdCLGlCQUFpQixDQUNsQjtTQUNKLENBQUM7UUFFRjs7V0FFRztRQUNhLGdCQUFXLEdBQUc7WUFDNUIsT0FBTyxFQUFFO2dCQUNQOzs7bUJBR0c7Z0JBQ0gsR0FBRyxFQUFFLENBQUMsRUFBVSxFQUE2QixFQUFFLENBQzdDLElBQUksQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUN2QixtQkFBbUIsRUFBRSxVQUFVLEVBQy9CLGdCQUFnQixDQUNqQjthQUNKO1lBQ0QsUUFBUSxFQUFFO2dCQUNSOzs7bUJBR0c7Z0JBQ0gsR0FBRyxFQUFFLENBQUMsRUFBVSxFQUE4QixFQUFFLENBQzlDLElBQUksQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUN2QixtQkFBbUIsRUFBRSxXQUFXLEVBQ2hDLGlCQUFpQixDQUNsQjthQUNKO1NBQ0YsQ0FBQztRQUVGOztXQUVHO1FBQ2EsaUJBQVksR0FBRztZQUM3Qjs7O2VBR0c7WUFDSCxHQUFHLEVBQUUsQ0FBQyxFQUFVLEVBQXdCLEVBQUUsQ0FDeEMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsa0JBQWtCLEVBQUUsRUFBRSxFQUFFLFdBQVcsQ0FBQztTQUNqRSxDQUFDO1FBRUY7O1dBRUc7UUFDYSxpQkFBWSxHQUFHO1lBQzdCOzs7ZUFHRztZQUNILEdBQUcsRUFBRSxDQUFDLEVBQVUsRUFBd0IsRUFBRSxDQUN4QyxJQUFJLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxrQkFBa0IsRUFBRSxFQUFFLEVBQUUsV0FBVyxDQUFDO1NBQ2pFLENBQUM7UUFFYyxZQUFPLEdBQUc7WUFDeEI7OztlQUdHO1lBQ0gsR0FBRyxFQUFFLENBQUMsRUFBVSxFQUFtQixFQUFFLENBQ25DLElBQUksQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLFlBQVksRUFBRSxFQUFFLEVBQUUsTUFBTSxDQUFDO1NBQ3RELENBQUM7UUFFRjs7V0FFRztRQUNhLGNBQVMsR0FBRztZQUMxQjs7O2VBR0c7WUFDSCxHQUFHLEVBQUUsQ0FBQyxFQUFVLEVBQXFCLEVBQUUsQ0FDckMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsY0FBYyxFQUFFLEVBQUUsRUFBRSxRQUFRLENBQUM7U0FDMUQsQ0FBQztRQUVGOztXQUVHO1FBQ2EsV0FBTSxHQUFHO1lBQ3ZCOzs7ZUFHRztZQUNILEdBQUcsRUFBRSxDQUFDLEVBQVUsRUFBa0IsRUFBRSxDQUNsQyxJQUFJLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxXQUFXLEVBQUUsRUFBRSxFQUFFLEtBQUssQ0FBQztTQUNwRCxDQUFDO1FBRUY7O1dBRUc7UUFDYSxhQUFRLEdBQUc7WUFDekI7OztlQUdHO1lBQ0gsR0FBRyxFQUFFLENBQUMsRUFBVSxFQUFvQixFQUFFLENBQ3BDLElBQUksQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLGFBQWEsRUFBRSxFQUFFLEVBQUUsT0FBTyxDQUFDO1NBQ3hELENBQUM7UUFFRjs7V0FFRztRQUNhLGVBQVUsR0FBRztZQUMzQjs7O2VBR0c7WUFDSCxHQUFHLEVBQUUsQ0FBQyxFQUFVLEVBQXNCLEVBQUUsQ0FDdEMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsZUFBZSxFQUFFLEVBQUUsRUFBRSxTQUFTLENBQUM7U0FDNUQsQ0FBQztRQUVGOztXQUVHO1FBQ2EsbUJBQWMsR0FBRztZQUMvQjs7O2VBR0c7WUFDSCxHQUFHLEVBQUUsQ0FBQyxFQUFVLEVBQTBCLEVBQUUsQ0FDMUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsb0JBQW9CLEVBQUUsRUFBRSxFQUFFLGFBQWEsQ0FBQztTQUNyRSxDQUFDO1FBb0JBLFFBQVEsR0FBRyxRQUFRLElBQUksRUFBRSxDQUFDO1FBQzFCLFFBQVEsQ0FBQyxNQUFNLEdBQUcsUUFBUSxDQUFDLE1BQU0sSUFBSSxzQ0FBc0MsQ0FBQztRQUM1RSxRQUFRLENBQUMsT0FBTyxHQUFHLFFBQVEsQ0FBQyxPQUFPLElBQUksNEJBQTRCLENBQUM7UUFFcEUsSUFBSSxrQkFBOEIsQ0FBQztRQUNuQyxJQUFJLFVBQVUsS0FBSyxTQUFTLElBQUksU0FBUyxJQUFJLFVBQVUsRUFBRSxDQUFDO1lBQ3hELGtCQUFrQixHQUFHLFVBQXdCLENBQUM7UUFDaEQsQ0FBQzthQUFNLENBQUM7WUFDTixrQkFBa0IsR0FBRyxJQUFJLGVBQWUsQ0FDdEMsVUFBVSxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBRSxVQUFpQyxDQUNuRSxDQUFDO1FBQ0osQ0FBQztRQUVELE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FDeEMsUUFBUSxFQUNSLGVBQXNDLEVBQ3RDLGtCQUFrQixDQUNuQixDQUFDO1FBRUYsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsb0JBQW9CLENBQ3JDLFFBQVEsRUFDUixXQUFXLEVBQ1gsa0JBQWtCLENBQ25CLENBQUM7SUFDSixDQUFDO0lBRVMsaUJBQWlCLENBQ3pCLFFBQThCLEVBQzlCLGVBQW9DLEVBQ3BDLFVBQXNCO1FBRXRCLElBQUksZUFBZSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQzdCLE9BQU8sSUFBSSwwQkFBMEIsQ0FBQyxlQUFlLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDbEUsQ0FBQztRQUVELE9BQU8sSUFBSSx3QkFBd0IsQ0FDakMsZUFBc0QsRUFDdEQ7WUFDRSxPQUFPLEVBQUUsUUFBUSxDQUFDLE9BQU87U0FDMUIsRUFDRCxVQUFVLENBQ1gsQ0FBQztJQUNKLENBQUM7SUFFUyxvQkFBb0IsQ0FDNUIsUUFBOEIsRUFDOUIsYUFBaUMsRUFDakMsVUFBc0I7UUFFdEIsT0FBTyxJQUFJLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsVUFBVSxFQUFFLGFBQWEsQ0FBQyxDQUFDO0lBQzFFLENBQUM7Q0FDRiJ9