@boostercloud/framework-provider-azure 0.28.3 → 0.28.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,3 +1,3 @@
1
1
  import { CosmosClient } from '@azure/cosmos';
2
- import { BoosterConfig, FilterFor, Logger, ReadModelListResult, SortFor } from '@boostercloud/framework-types';
3
- export declare function search(cosmosDb: CosmosClient, config: BoosterConfig, logger: Logger, containerName: string, filters: FilterFor<unknown>, limit?: number | undefined, afterCursor?: Record<string, string> | undefined, paginatedVersion?: boolean, order?: SortFor<unknown>): Promise<Array<any> | ReadModelListResult<any>>;
2
+ import { BoosterConfig, FilterFor, ReadModelListResult, SortFor } from '@boostercloud/framework-types';
3
+ export declare function search<TResult>(cosmosDb: CosmosClient, config: BoosterConfig, containerName: string, filters: FilterFor<unknown>, limit?: number | undefined, afterCursor?: Record<string, string> | undefined, paginatedVersion?: boolean, order?: SortFor<unknown>): Promise<Array<TResult> | ReadModelListResult<TResult>>;
@@ -2,7 +2,9 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.search = void 0;
4
4
  const framework_types_1 = require("@boostercloud/framework-types");
5
- async function search(cosmosDb, config, logger, containerName, filters, limit, afterCursor, paginatedVersion = false, order) {
5
+ const framework_common_helpers_1 = require("@boostercloud/framework-common-helpers");
6
+ async function search(cosmosDb, config, containerName, filters, limit, afterCursor, paginatedVersion = false, order) {
7
+ const logger = (0, framework_common_helpers_1.getLogger)(config, 'query-helper#search');
6
8
  const filterExpression = buildFilterExpression(filters);
7
9
  const queryDefinition = `SELECT * FROM c ${filterExpression !== '' ? `WHERE ${filterExpression}` : filterExpression}`;
8
10
  const queryWithOrder = queryDefinition + buildOrderExpression(order);
@@ -1,8 +1,7 @@
1
- import { EventEnvelope } from '@boostercloud/framework-types';
2
1
  import { CosmosClient } from '@azure/cosmos';
3
- import { BoosterConfig, Logger, UUID } from '@boostercloud/framework-types';
2
+ import { EventEnvelope, BoosterConfig, UUID } from '@boostercloud/framework-types';
4
3
  import { Context } from '@azure/functions';
5
4
  export declare function rawEventsToEnvelopes(context: Context): Array<EventEnvelope>;
6
- export declare function readEntityEventsSince(cosmosDb: CosmosClient, config: BoosterConfig, logger: Logger, entityTypeName: string, entityID: UUID, since?: string): Promise<Array<EventEnvelope>>;
7
- export declare function readEntityLatestSnapshot(cosmosDb: CosmosClient, config: BoosterConfig, logger: Logger, entityTypeName: string, entityID: UUID): Promise<EventEnvelope | null>;
8
- export declare function storeEvents(cosmosDb: CosmosClient, eventEnvelopes: Array<EventEnvelope>, config: BoosterConfig, logger: Logger): Promise<void>;
5
+ export declare function readEntityEventsSince(cosmosDb: CosmosClient, config: BoosterConfig, entityTypeName: string, entityID: UUID, since?: string): Promise<Array<EventEnvelope>>;
6
+ export declare function readEntityLatestSnapshot(cosmosDb: CosmosClient, config: BoosterConfig, entityTypeName: string, entityID: UUID): Promise<EventEnvelope | null>;
7
+ export declare function storeEvents(cosmosDb: CosmosClient, eventEnvelopes: Array<EventEnvelope>, config: BoosterConfig): Promise<void>;
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.storeEvents = exports.readEntityLatestSnapshot = exports.readEntityEventsSince = exports.rawEventsToEnvelopes = void 0;
4
+ const framework_common_helpers_1 = require("@boostercloud/framework-common-helpers");
4
5
  const constants_1 = require("../constants");
5
6
  const partition_keys_1 = require("./partition-keys");
6
7
  // eslint-disable-next-line @typescript-eslint/no-magic-numbers
@@ -9,7 +10,7 @@ function rawEventsToEnvelopes(context) {
9
10
  return context.bindings.rawEvent;
10
11
  }
11
12
  exports.rawEventsToEnvelopes = rawEventsToEnvelopes;
12
- async function readEntityEventsSince(cosmosDb, config, logger, entityTypeName, entityID, since) {
13
+ async function readEntityEventsSince(cosmosDb, config, entityTypeName, entityID, since) {
13
14
  const fromTime = since ? since : originOfTime;
14
15
  const querySpec = {
15
16
  query: `SELECT * FROM c WHERE c["${constants_1.eventsStoreAttributes.partitionKey}"] = @partitionKey ` +
@@ -33,7 +34,8 @@ async function readEntityEventsSince(cosmosDb, config, logger, entityTypeName, e
33
34
  return resources;
34
35
  }
35
36
  exports.readEntityEventsSince = readEntityEventsSince;
36
- async function readEntityLatestSnapshot(cosmosDb, config, logger, entityTypeName, entityID) {
37
+ async function readEntityLatestSnapshot(cosmosDb, config, entityTypeName, entityID) {
38
+ const logger = (0, framework_common_helpers_1.getLogger)(config, 'events-adapter#readEntityLatestSnapshot');
37
39
  const { resources } = await cosmosDb
38
40
  .database(config.resourceNames.applicationStack)
39
41
  .container(config.resourceNames.eventsStore)
@@ -59,7 +61,8 @@ async function readEntityLatestSnapshot(cosmosDb, config, logger, entityTypeName
59
61
  }
60
62
  }
61
63
  exports.readEntityLatestSnapshot = readEntityLatestSnapshot;
62
- async function storeEvents(cosmosDb, eventEnvelopes, config, logger) {
64
+ async function storeEvents(cosmosDb, eventEnvelopes, config) {
65
+ const logger = (0, framework_common_helpers_1.getLogger)(config, 'events-adapter#storeEvents');
63
66
  logger.debug('[EventsAdapter#storeEvents] Storing EventEnvelopes with eventEnvelopes:', eventEnvelopes);
64
67
  for (const eventEnvelope of eventEnvelopes) {
65
68
  await cosmosDb
@@ -1,3 +1,3 @@
1
- import { BoosterConfig, EventSearchParameters, EventSearchResponse, Logger } from '@boostercloud/framework-types';
1
+ import { BoosterConfig, EventSearchParameters, EventSearchResponse } from '@boostercloud/framework-types';
2
2
  import { CosmosClient } from '@azure/cosmos';
3
- export declare function searchEvents(cosmosDb: CosmosClient, config: BoosterConfig, logger: Logger, parameters: EventSearchParameters): Promise<Array<EventSearchResponse>>;
3
+ export declare function searchEvents(cosmosDb: CosmosClient, config: BoosterConfig, parameters: EventSearchParameters): Promise<Array<EventSearchResponse>>;
@@ -1,15 +1,17 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.searchEvents = void 0;
4
+ const framework_common_helpers_1 = require("@boostercloud/framework-common-helpers");
4
5
  const query_helper_1 = require("../helpers/query-helper");
5
6
  const events_searcher_builder_1 = require("./events-searcher-builder");
6
- async function searchEvents(cosmosDb, config, logger, parameters) {
7
+ async function searchEvents(cosmosDb, config, parameters) {
8
+ const logger = (0, framework_common_helpers_1.getLogger)(config, 'events-searcher-adapter#searchEvents');
7
9
  logger.debug('Initiating an events search. Filters: ', parameters);
8
10
  const eventStore = config.resourceNames.eventsStore;
9
11
  const timeFilterQuery = (0, events_searcher_builder_1.buildFiltersForByTime)(parameters.from, parameters.to);
10
12
  const eventFilterQuery = (0, events_searcher_builder_1.buildFiltersForByFilters)(parameters);
11
13
  const filterQuery = { ...eventFilterQuery, ...timeFilterQuery, kind: { eq: 'event' } };
12
- const result = (await (0, query_helper_1.search)(cosmosDb, config, logger, eventStore, filterQuery, parameters.limit, undefined, undefined, {
14
+ const result = (await (0, query_helper_1.search)(cosmosDb, config, eventStore, filterQuery, parameters.limit, undefined, undefined, {
13
15
  createdAt: 'DESC',
14
16
  }));
15
17
  const eventEnvelopes = (0, events_searcher_builder_1.resultToEventSearchResponse)(result);
@@ -1,3 +1,3 @@
1
- import { GraphQLRequestEnvelope, Logger, GraphQLRequestEnvelopeError } from '@boostercloud/framework-types';
1
+ import { GraphQLRequestEnvelope, GraphQLRequestEnvelopeError, BoosterConfig } from '@boostercloud/framework-types';
2
2
  import { Context } from '@azure/functions';
3
- export declare function rawGraphQLRequestToEnvelope(context: Context, logger: Logger): Promise<GraphQLRequestEnvelope | GraphQLRequestEnvelopeError>;
3
+ export declare function rawGraphQLRequestToEnvelope(config: BoosterConfig, context: Context): Promise<GraphQLRequestEnvelope | GraphQLRequestEnvelopeError>;
@@ -1,8 +1,10 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.rawGraphQLRequestToEnvelope = void 0;
4
- async function rawGraphQLRequestToEnvelope(context, logger) {
4
+ const framework_common_helpers_1 = require("@boostercloud/framework-common-helpers");
5
+ async function rawGraphQLRequestToEnvelope(config, context) {
5
6
  var _a, _b, _c, _d, _e, _f;
7
+ const logger = (0, framework_common_helpers_1.getLogger)(config, 'graphql-adapter#rawGraphQLRequestToEnvelope');
6
8
  logger.debug('Received GraphQL request: ', context.req);
7
9
  const requestID = context.executionContext.invocationId;
8
10
  const connectionID = undefined; // TODO: Add this when sockets are supported
@@ -27,8 +29,9 @@ async function rawGraphQLRequestToEnvelope(context, logger) {
27
29
  };
28
30
  }
29
31
  catch (e) {
32
+ const error = e;
30
33
  return {
31
- error: e,
34
+ error,
32
35
  requestID,
33
36
  connectionID,
34
37
  eventType,
@@ -1,5 +1,5 @@
1
1
  import { CosmosClient } from '@azure/cosmos';
2
- import { BoosterConfig, Logger, ReadModelInterface, ReadOnlyNonEmptyArray, UUID } from '@boostercloud/framework-types';
3
- export declare function fetchReadModel(db: CosmosClient, config: BoosterConfig, logger: Logger, readModelName: string, readModelID: UUID): Promise<ReadOnlyNonEmptyArray<ReadModelInterface>>;
4
- export declare function storeReadModel(db: CosmosClient, config: BoosterConfig, logger: Logger, readModelName: string, readModel: ReadModelInterface): Promise<void>;
5
- export declare function deleteReadModel(db: CosmosClient, config: BoosterConfig, logger: Logger, readModelName: string, readModel: ReadModelInterface): Promise<void>;
2
+ import { BoosterConfig, ReadModelInterface, ReadOnlyNonEmptyArray, UUID } from '@boostercloud/framework-types';
3
+ export declare function fetchReadModel(db: CosmosClient, config: BoosterConfig, readModelName: string, readModelID: UUID): Promise<ReadOnlyNonEmptyArray<ReadModelInterface>>;
4
+ export declare function storeReadModel(db: CosmosClient, config: BoosterConfig, readModelName: string, readModel: ReadModelInterface): Promise<void>;
5
+ export declare function deleteReadModel(db: CosmosClient, config: BoosterConfig, readModelName: string, readModel: ReadModelInterface): Promise<void>;
@@ -2,8 +2,10 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.deleteReadModel = exports.storeReadModel = exports.fetchReadModel = void 0;
4
4
  const framework_types_1 = require("@boostercloud/framework-types");
5
+ const framework_common_helpers_1 = require("@boostercloud/framework-common-helpers");
5
6
  const constants_1 = require("../constants");
6
- async function fetchReadModel(db, config, logger, readModelName, readModelID) {
7
+ async function fetchReadModel(db, config, readModelName, readModelID) {
8
+ const logger = (0, framework_common_helpers_1.getLogger)(config, 'read-model-adapter#fetchReadModel');
7
9
  const { resource } = await db
8
10
  .database(config.resourceNames.applicationStack)
9
11
  .container(config.resourceNames.forReadModel(readModelName))
@@ -23,8 +25,9 @@ async function fetchReadModel(db, config, logger, readModelName, readModelID) {
23
25
  ];
24
26
  }
25
27
  exports.fetchReadModel = fetchReadModel;
26
- async function insertReadModel(logger, readModel, db, config, readModelName) {
28
+ async function insertReadModel(readModel, db, config, readModelName) {
27
29
  var _a;
30
+ const logger = (0, framework_common_helpers_1.getLogger)(config, 'read-model-adapter#insertReadModel');
28
31
  try {
29
32
  const itemModel = {
30
33
  ...readModel,
@@ -37,17 +40,19 @@ async function insertReadModel(logger, readModel, db, config, readModelName) {
37
40
  logger.debug('[ReadModelAdapter#insertReadModel] Read model inserted');
38
41
  }
39
42
  catch (err) {
43
+ const error = err;
40
44
  // In case of conflict (The ID provided for a resource on a PUT or POST operation has been taken by an existing resource) we should retry it
41
- if ((err === null || err === void 0 ? void 0 : err.code) == constants_1.AZURE_CONFLICT_ERROR_CODE) {
45
+ if ((error === null || error === void 0 ? void 0 : error.code) == constants_1.AZURE_CONFLICT_ERROR_CODE) {
42
46
  logger.debug('[ReadModelAdapter#insertReadModel] Read model insert failed with a conflict failure');
43
- throw new framework_types_1.OptimisticConcurrencyUnexpectedVersionError(err === null || err === void 0 ? void 0 : err.message);
47
+ throw new framework_types_1.OptimisticConcurrencyUnexpectedVersionError(error === null || error === void 0 ? void 0 : error.message);
44
48
  }
45
49
  logger.error('[ReadModelAdapter#insertReadModel] Read model insert failed without a conflict failure');
46
- throw err;
50
+ throw error;
47
51
  }
48
52
  }
49
- async function updateReadModel(readModel, db, config, readModelName, logger) {
53
+ async function updateReadModel(readModel, db, config, readModelName) {
50
54
  var _a;
55
+ const logger = (0, framework_common_helpers_1.getLogger)(config, 'read-model-adapter#updateReadModel');
51
56
  /** upsert only occurs if the etag we are sending matches the etag on the server. i.e. Only replace if the item hasn't changed */
52
57
  const options = {
53
58
  accessCondition: { condition: ((_a = readModel.boosterMetadata) === null || _a === void 0 ? void 0 : _a.optimisticConcurrencyValue) || '*', type: 'IfMatch' },
@@ -60,25 +65,27 @@ async function updateReadModel(readModel, db, config, readModelName, logger) {
60
65
  logger.debug('[ReadModelAdapter#updateReadModel] Read model updated');
61
66
  }
62
67
  catch (err) {
68
+ const error = err;
63
69
  // If there is a precondition failure then we should retry it
64
- if ((err === null || err === void 0 ? void 0 : err.code) == constants_1.AZURE_PRECONDITION_FAILED_ERROR) {
70
+ if ((error === null || error === void 0 ? void 0 : error.code) == constants_1.AZURE_PRECONDITION_FAILED_ERROR) {
65
71
  logger.debug('[ReadModelAdapter#updateReadModel] Read model update failed with a pre-condition failure');
66
- throw new framework_types_1.OptimisticConcurrencyUnexpectedVersionError(err === null || err === void 0 ? void 0 : err.message);
72
+ throw new framework_types_1.OptimisticConcurrencyUnexpectedVersionError(error === null || error === void 0 ? void 0 : error.message);
67
73
  }
68
74
  logger.error('[ReadModelAdapter#updateReadModel] Read model update failed without a pre-condition failure');
69
75
  throw err;
70
76
  }
71
77
  }
72
- async function storeReadModel(db, config, logger, readModelName, readModel) {
78
+ async function storeReadModel(db, config, readModelName, readModel) {
73
79
  var _a, _b;
74
80
  const version = (_b = (_a = readModel.boosterMetadata) === null || _a === void 0 ? void 0 : _a.version) !== null && _b !== void 0 ? _b : 1;
75
81
  if (version === 1) {
76
- return await insertReadModel(logger, readModel, db, config, readModelName);
82
+ return await insertReadModel(readModel, db, config, readModelName);
77
83
  }
78
- return await updateReadModel(readModel, db, config, readModelName, logger);
84
+ return await updateReadModel(readModel, db, config, readModelName);
79
85
  }
80
86
  exports.storeReadModel = storeReadModel;
81
- async function deleteReadModel(db, config, logger, readModelName, readModel) {
87
+ async function deleteReadModel(db, config, readModelName, readModel) {
88
+ const logger = (0, framework_common_helpers_1.getLogger)(config, 'read-model-adapter#deleteReadModel');
82
89
  logger.debug(`[ReadModelAdapter#deleteReadModel] Entering to Read model deleted. ID = ${readModel.id}`);
83
90
  await db
84
91
  .database(config.resourceNames.applicationStack)
@@ -1,8 +1,8 @@
1
- import { Logger, ScheduledCommandEnvelope } from '@boostercloud/framework-types';
1
+ import { BoosterConfig, ScheduledCommandEnvelope } from '@boostercloud/framework-types';
2
2
  interface AzureScheduledCommandEnvelope {
3
3
  bindings: {
4
4
  [name: string]: unknown;
5
5
  };
6
6
  }
7
- export declare function rawScheduledInputToEnvelope(input: Partial<AzureScheduledCommandEnvelope>, logger: Logger): Promise<ScheduledCommandEnvelope>;
7
+ export declare function rawScheduledInputToEnvelope(config: BoosterConfig, input: Partial<AzureScheduledCommandEnvelope>): Promise<ScheduledCommandEnvelope>;
8
8
  export {};
@@ -2,7 +2,9 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.rawScheduledInputToEnvelope = void 0;
4
4
  const framework_types_1 = require("@boostercloud/framework-types");
5
- async function rawScheduledInputToEnvelope(input, logger) {
5
+ const framework_common_helpers_1 = require("@boostercloud/framework-common-helpers");
6
+ async function rawScheduledInputToEnvelope(config, input) {
7
+ const logger = (0, framework_common_helpers_1.getLogger)(config, 'scheduled-adapter#rawScheduledInputToEnvelope');
6
8
  logger.debug('Received AzureScheduledCommand request: ', input);
7
9
  if (!input.bindings || !Object.keys(input.bindings).length)
8
10
  throw new Error(`bindings is not defined or empty, scheduled command envelope should have the structure {bindings: [name: string]: string }, but you gave ${JSON.stringify(input)}`);
@@ -1,3 +1,3 @@
1
1
  import { CosmosClient } from '@azure/cosmos';
2
- import { BoosterConfig, FilterFor, Logger, ReadModelListResult, SortFor } from '@boostercloud/framework-types';
3
- export declare function searchReadModel(cosmosDb: CosmosClient, config: BoosterConfig, logger: Logger, readModelName: string, filters: FilterFor<unknown>, sortBy?: SortFor<unknown>, limit?: number, afterCursor?: Record<string, string> | undefined, paginatedVersion?: boolean): Promise<Array<any> | ReadModelListResult<any>>;
2
+ import { BoosterConfig, FilterFor, ReadModelListResult, SortFor } from '@boostercloud/framework-types';
3
+ export declare function searchReadModel(cosmosDb: CosmosClient, config: BoosterConfig, readModelName: string, filters: FilterFor<unknown>, sortBy?: SortFor<unknown>, limit?: number, afterCursor?: Record<string, string> | undefined, paginatedVersion?: boolean): Promise<Array<any> | ReadModelListResult<any>>;
@@ -2,7 +2,7 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.searchReadModel = void 0;
4
4
  const queryHelper = require("../helpers/query-helper");
5
- async function searchReadModel(cosmosDb, config, logger, readModelName, filters, sortBy, limit, afterCursor, paginatedVersion = false) {
6
- return await queryHelper.search(cosmosDb, config, logger, config.resourceNames.forReadModel(readModelName), filters, limit, afterCursor, paginatedVersion, sortBy);
5
+ async function searchReadModel(cosmosDb, config, readModelName, filters, sortBy, limit, afterCursor, paginatedVersion = false) {
6
+ return await queryHelper.search(cosmosDb, config, config.resourceNames.forReadModel(readModelName), filters, limit, afterCursor, paginatedVersion, sortBy);
7
7
  }
8
8
  exports.searchReadModel = searchReadModel;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@boostercloud/framework-provider-azure",
3
- "version": "0.28.3",
3
+ "version": "0.28.6",
4
4
  "description": "Handle Booster's integration with Azure",
5
5
  "keywords": [
6
6
  "framework-provider-azure"
@@ -22,10 +22,15 @@
22
22
  "dependencies": {
23
23
  "@azure/cosmos": "3.7.3",
24
24
  "@azure/functions": "^1.2.2",
25
- "@boostercloud/framework-types": "^0.28.3",
25
+ "@boostercloud/framework-common-helpers": "^0.28.6",
26
+ "@boostercloud/framework-types": "^0.28.6"
27
+ },
28
+ "devDependencies": {
26
29
  "chai": "4.2.0",
27
30
  "chai-as-promised": "7.1.1",
31
+ "faker": "5.1.0",
28
32
  "mocha": "8.4.0",
33
+ "sinon": "9.2.3",
29
34
  "sinon-chai": "3.5.0"
30
35
  },
31
36
  "scripts": {
@@ -41,5 +46,5 @@
41
46
  "bugs": {
42
47
  "url": "https://github.com/boostercloud/booster/issues"
43
48
  },
44
- "gitHead": "5423cc22854247e7f914521d04133ab7b7113ba4"
49
+ "gitHead": "47fbcfca9605d2e540e6aa0dd7e4edf8a7f4fc99"
45
50
  }