@or-sdk/ccp 1.1.2-beta.2882.0 → 1.1.3

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.
Files changed (66) hide show
  1. package/CHANGELOG.md +18 -0
  2. package/dist/cjs/Ccp.js +5 -0
  3. package/dist/cjs/Ccp.js.map +1 -1
  4. package/dist/cjs/api/accountsApi.js +79 -0
  5. package/dist/cjs/api/accountsApi.js.map +1 -0
  6. package/dist/cjs/api/categoriesApi.js +78 -0
  7. package/dist/cjs/api/categoriesApi.js.map +1 -0
  8. package/dist/cjs/api/customersApi.js +1 -1
  9. package/dist/cjs/api/customersApi.js.map +1 -1
  10. package/dist/cjs/api/environmentsApi.js +79 -0
  11. package/dist/cjs/api/environmentsApi.js.map +1 -0
  12. package/dist/cjs/api/index.js +11 -1
  13. package/dist/cjs/api/index.js.map +1 -1
  14. package/dist/cjs/api/mappingApi.js +78 -0
  15. package/dist/cjs/api/mappingApi.js.map +1 -0
  16. package/dist/cjs/api/reportingApi.js +94 -0
  17. package/dist/cjs/api/reportingApi.js.map +1 -0
  18. package/dist/cjs/utils.js +16 -0
  19. package/dist/cjs/utils.js.map +1 -0
  20. package/dist/esm/Ccp.js +6 -1
  21. package/dist/esm/Ccp.js.map +1 -1
  22. package/dist/esm/api/accountsApi.js +26 -0
  23. package/dist/esm/api/accountsApi.js.map +1 -0
  24. package/dist/esm/api/categoriesApi.js +25 -0
  25. package/dist/esm/api/categoriesApi.js.map +1 -0
  26. package/dist/esm/api/customersApi.js +1 -1
  27. package/dist/esm/api/customersApi.js.map +1 -1
  28. package/dist/esm/api/environmentsApi.js +26 -0
  29. package/dist/esm/api/environmentsApi.js.map +1 -0
  30. package/dist/esm/api/index.js +5 -0
  31. package/dist/esm/api/index.js.map +1 -1
  32. package/dist/esm/api/mappingApi.js +25 -0
  33. package/dist/esm/api/mappingApi.js.map +1 -0
  34. package/dist/esm/api/reportingApi.js +36 -0
  35. package/dist/esm/api/reportingApi.js.map +1 -0
  36. package/dist/esm/utils.js +11 -0
  37. package/dist/esm/utils.js.map +1 -0
  38. package/dist/types/Ccp.d.ts +6 -1
  39. package/dist/types/Ccp.d.ts.map +1 -1
  40. package/dist/types/api/accountsApi.d.ts +7 -0
  41. package/dist/types/api/accountsApi.d.ts.map +1 -0
  42. package/dist/types/api/categoriesApi.d.ts +7 -0
  43. package/dist/types/api/categoriesApi.d.ts.map +1 -0
  44. package/dist/types/api/environmentsApi.d.ts +7 -0
  45. package/dist/types/api/environmentsApi.d.ts.map +1 -0
  46. package/dist/types/api/index.d.ts +5 -0
  47. package/dist/types/api/index.d.ts.map +1 -1
  48. package/dist/types/api/mappingApi.d.ts +7 -0
  49. package/dist/types/api/mappingApi.d.ts.map +1 -0
  50. package/dist/types/api/reportingApi.d.ts +8 -0
  51. package/dist/types/api/reportingApi.d.ts.map +1 -0
  52. package/dist/types/types.d.ts +58 -0
  53. package/dist/types/types.d.ts.map +1 -1
  54. package/dist/types/utils.d.ts +4 -0
  55. package/dist/types/utils.d.ts.map +1 -0
  56. package/package.json +3 -2
  57. package/src/Ccp.ts +11 -1
  58. package/src/api/accountsApi.ts +23 -0
  59. package/src/api/categoriesApi.ts +16 -0
  60. package/src/api/customersApi.ts +1 -1
  61. package/src/api/environmentsApi.ts +21 -0
  62. package/src/api/index.ts +5 -0
  63. package/src/api/mappingApi.ts +16 -0
  64. package/src/api/reportingApi.ts +43 -0
  65. package/src/types.ts +66 -0
  66. package/src/utils.ts +9 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"categoriesApi.js","sourceRoot":"","sources":["../../../src/api/categoriesApi.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAGpC,MAAM,CAAC,OAAO,OAAO,aAAc,SAAQ,OAAO;IAAlD;;QACmB,gBAAW,GAAG,mBAAmB,CAAC;IAWrD,CAAC;IANc,aAAa;;YACxB,OAAO,MAAM,IAAI,CAAC,OAAO,CAAC;gBACxB,MAAM,EAAE,KAAK;gBACb,KAAK,EAAE,GAAG,IAAI,CAAC,WAAW,EAAE;aAC7B,CAAC,CAAC;QACL,CAAC;KAAA;CACF"}
@@ -17,7 +17,7 @@ export default class CustomersApi extends BaseApi {
17
17
  return __awaiter(this, void 0, void 0, function* () {
18
18
  return yield this.apiCall({
19
19
  method: 'GET',
20
- route: `${this.apiBasePath}/`,
20
+ route: `${this.apiBasePath}`,
21
21
  });
22
22
  });
23
23
  }
@@ -1 +1 @@
1
- {"version":3,"file":"customersApi.js","sourceRoot":"","sources":["../../../src/api/customersApi.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAGpC,MAAM,CAAC,OAAO,OAAO,YAAa,SAAQ,OAAO;IAAjD;;QACmB,gBAAW,GAAG,kBAAkB,CAAC;IAqBpD,CAAC;IAhBc,eAAe;;YAC1B,OAAO,MAAM,IAAI,CAAC,OAAO,CAAC;gBACxB,MAAM,EAAE,KAAK;gBACb,KAAK,EAAE,GAAG,IAAI,CAAC,WAAW,GAAG;aAC9B,CAAC,CAAC;QACL,CAAC;KAAA;IAKY,eAAe;;YAC1B,OAAO,MAAM,IAAI,CAAC,OAAO,CAAC;gBACxB,MAAM,EAAE,KAAK;gBACb,KAAK,EAAE,GAAG,IAAI,CAAC,WAAW,OAAO;aAClC,CAAC,CAAC;QACL,CAAC;KAAA;CACF"}
1
+ {"version":3,"file":"customersApi.js","sourceRoot":"","sources":["../../../src/api/customersApi.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAGpC,MAAM,CAAC,OAAO,OAAO,YAAa,SAAQ,OAAO;IAAjD;;QACmB,gBAAW,GAAG,kBAAkB,CAAC;IAqBpD,CAAC;IAhBc,eAAe;;YAC1B,OAAO,MAAM,IAAI,CAAC,OAAO,CAAC;gBACxB,MAAM,EAAE,KAAK;gBACb,KAAK,EAAE,GAAG,IAAI,CAAC,WAAW,EAAE;aAC7B,CAAC,CAAC;QACL,CAAC;KAAA;IAKY,eAAe;;YAC1B,OAAO,MAAM,IAAI,CAAC,OAAO,CAAC;gBACxB,MAAM,EAAE,KAAK;gBACb,KAAK,EAAE,GAAG,IAAI,CAAC,WAAW,OAAO;aAClC,CAAC,CAAC;QACL,CAAC;KAAA;CACF"}
@@ -0,0 +1,26 @@
1
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3
+ return new (P || (P = Promise))(function (resolve, reject) {
4
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
7
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
8
+ });
9
+ };
10
+ import { BaseApi } from './baseApi';
11
+ export default class EnvironmentsApi extends BaseApi {
12
+ constructor() {
13
+ super(...arguments);
14
+ this.apiBasePath = 'api/v1/environments';
15
+ }
16
+ getEnvironments(params) {
17
+ return __awaiter(this, void 0, void 0, function* () {
18
+ return yield this.apiCall({
19
+ method: 'GET',
20
+ route: `${this.apiBasePath}`,
21
+ params,
22
+ });
23
+ });
24
+ }
25
+ }
26
+ //# sourceMappingURL=environmentsApi.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"environmentsApi.js","sourceRoot":"","sources":["../../../src/api/environmentsApi.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAGpC,MAAM,CAAC,OAAO,OAAO,eAAgB,SAAQ,OAAO;IAApD;;QACmB,gBAAW,GAAG,qBAAqB,CAAC;IAgBvD,CAAC;IAPc,eAAe,CAAC,MAAgC;;YAC3D,OAAO,MAAM,IAAI,CAAC,OAAO,CAAC;gBACxB,MAAM,EAAE,KAAK;gBACb,KAAK,EAAE,GAAG,IAAI,CAAC,WAAW,EAAE;gBAC5B,MAAM;aACP,CAAC,CAAC;QACL,CAAC;KAAA;CACF"}
@@ -1,2 +1,7 @@
1
1
  export { default as CustomersApi } from './customersApi';
2
+ export { default as EnvironmentsApi } from './environmentsApi';
3
+ export { default as AccountsApi } from './accountsApi';
4
+ export { default as CategoriesApi } from './categoriesApi';
5
+ export { default as MappingApi } from './mappingApi';
6
+ export { default as ReportingApi } from './reportingApi';
2
7
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/api/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,gBAAgB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/api/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,gBAAgB,CAAC;AACzD,OAAO,EAAE,OAAO,IAAI,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAC/D,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,eAAe,CAAC;AACvD,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAC3D,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,cAAc,CAAC;AACrD,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,gBAAgB,CAAC"}
@@ -0,0 +1,25 @@
1
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3
+ return new (P || (P = Promise))(function (resolve, reject) {
4
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
7
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
8
+ });
9
+ };
10
+ import { BaseApi } from './baseApi';
11
+ export default class MappingApi extends BaseApi {
12
+ constructor() {
13
+ super(...arguments);
14
+ this.apiBasePath = 'api/v1/mapping';
15
+ }
16
+ getMapping() {
17
+ return __awaiter(this, void 0, void 0, function* () {
18
+ return yield this.apiCall({
19
+ method: 'GET',
20
+ route: `${this.apiBasePath}`,
21
+ });
22
+ });
23
+ }
24
+ }
25
+ //# sourceMappingURL=mappingApi.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mappingApi.js","sourceRoot":"","sources":["../../../src/api/mappingApi.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAGpC,MAAM,CAAC,OAAO,OAAO,UAAW,SAAQ,OAAO;IAA/C;;QACmB,gBAAW,GAAG,gBAAgB,CAAC;IAWlD,CAAC;IANc,UAAU;;YACrB,OAAO,MAAM,IAAI,CAAC,OAAO,CAAC;gBACxB,MAAM,EAAE,KAAK;gBACb,KAAK,EAAE,GAAG,IAAI,CAAC,WAAW,EAAE;aAC7B,CAAC,CAAC;QACL,CAAC;KAAA;CACF"}
@@ -0,0 +1,36 @@
1
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3
+ return new (P || (P = Promise))(function (resolve, reject) {
4
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
7
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
8
+ });
9
+ };
10
+ import { BaseApi } from './baseApi';
11
+ import { adaptParams } from '../utils';
12
+ export default class ReportingApi extends BaseApi {
13
+ constructor() {
14
+ super(...arguments);
15
+ this.apiBasePath = 'api/v1';
16
+ }
17
+ getUsage(params) {
18
+ return __awaiter(this, void 0, void 0, function* () {
19
+ return yield this.apiCall({
20
+ method: 'GET',
21
+ route: `${this.apiBasePath}/usage`,
22
+ params: adaptParams(params),
23
+ });
24
+ });
25
+ }
26
+ getUsageTotal(params) {
27
+ return __awaiter(this, void 0, void 0, function* () {
28
+ return yield this.apiCall({
29
+ method: 'GET',
30
+ route: `${this.apiBasePath}/usage/total`,
31
+ params: adaptParams(params),
32
+ });
33
+ });
34
+ }
35
+ }
36
+ //# sourceMappingURL=reportingApi.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reportingApi.js","sourceRoot":"","sources":["../../../src/api/reportingApi.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,OAAO,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAEvC,MAAM,CAAC,OAAO,OAAO,YAAa,SAAQ,OAAO;IAAjD;;QACmB,gBAAW,GAAG,QAAQ,CAAC;IAqC1C,CAAC;IAzBc,QAAQ,CAAC,MAA0B;;YAC9C,OAAO,MAAM,IAAI,CAAC,OAAO,CAAC;gBACxB,MAAM,EAAE,KAAK;gBACb,KAAK,EAAE,GAAG,IAAI,CAAC,WAAW,QAAQ;gBAClC,MAAM,EAAE,WAAW,CAAqB,MAAM,CAAC;aAChD,CAAC,CAAC;QACL,CAAC;KAAA;IAYY,aAAa,CAAC,MAA0B;;YACnD,OAAO,MAAM,IAAI,CAAC,OAAO,CAAC;gBACxB,MAAM,EAAE,KAAK;gBACb,KAAK,EAAE,GAAG,IAAI,CAAC,WAAW,cAAc;gBACxC,MAAM,EAAE,WAAW,CAAqB,MAAM,CAAC;aAChD,CAAC,CAAC;QACL,CAAC;KAAA;CACF"}
@@ -0,0 +1,11 @@
1
+ export function adaptParams(params) {
2
+ const p = {};
3
+ Object.entries(params).forEach(([k, v]) => {
4
+ if (Array.isArray(v))
5
+ p[k] = v.join();
6
+ else
7
+ p[k] = v;
8
+ });
9
+ return p;
10
+ }
11
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/utils.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,WAAW,CAAoC,MAAS;IACtE,MAAM,CAAC,GAAG,EAAiC,CAAC;IAE3C,MAAM,CAAC,OAAO,CAAC,MAAM,CAA+B,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE;QACvE,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;YAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;;YACjC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IAChB,CAAC,CAAC,CAAC;IACH,OAAO,CAAC,CAAC;AACX,CAAC"}
@@ -1,8 +1,13 @@
1
1
  import { AxiosError, Base, CalApiParams } from '@or-sdk/base';
2
- import { CustomersApi } from './api';
2
+ import { CustomersApi, EnvironmentsApi, AccountsApi, CategoriesApi, MappingApi, ReportingApi } from './api';
3
3
  import { CcpConfig } from './types';
4
4
  export declare class Ccp extends Base {
5
5
  readonly customersApi: CustomersApi;
6
+ readonly environmentsApi: EnvironmentsApi;
7
+ readonly accountsApi: AccountsApi;
8
+ readonly categoriesApi: CategoriesApi;
9
+ readonly mappingApi: MappingApi;
10
+ readonly reportingApi: ReportingApi;
6
11
  private withApiErrorLog;
7
12
  constructor(params: CcpConfig);
8
13
  callApi<T>(params: CalApiParams): Promise<T>;
@@ -1 +1 @@
1
- {"version":3,"file":"Ccp.d.ts","sourceRoot":"","sources":["../../src/Ccp.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC9D,OAAO,EAAE,YAAY,EAAE,MAAM,OAAO,CAAC;AAErC,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAUpC,qBAAa,GAAI,SAAQ,IAAI;IAC3B,SAAgB,YAAY,EAAE,YAAY,CAAC;IAC3C,OAAO,CAAC,eAAe,CAAU;gBAQrB,MAAM,EAAE,SAAS;IAiB7B,OAAO,CAAC,CAAC,EAAE,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,CAAC,CAAC;IAM5C,UAAU,CAAC,CAAC,EAAE,UAAU,GAAG,KAAK;IAahC,OAAO,CAAC,WAAW;CAYpB"}
1
+ {"version":3,"file":"Ccp.d.ts","sourceRoot":"","sources":["../../src/Ccp.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC9D,OAAO,EAAE,YAAY,EAAE,eAAe,EAAE,WAAW,EAAE,aAAa,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,OAAO,CAAC;AAE5G,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAUpC,qBAAa,GAAI,SAAQ,IAAI;IAC3B,SAAgB,YAAY,EAAE,YAAY,CAAC;IAC3C,SAAgB,eAAe,EAAE,eAAe,CAAC;IACjD,SAAgB,WAAW,EAAE,WAAW,CAAC;IACzC,SAAgB,aAAa,EAAE,aAAa,CAAC;IAC7C,SAAgB,UAAU,EAAE,UAAU,CAAC;IACvC,SAAgB,YAAY,EAAE,YAAY,CAAC;IAC3C,OAAO,CAAC,eAAe,CAAU;gBAQrB,MAAM,EAAE,SAAS;IAsB7B,OAAO,CAAC,CAAC,EAAE,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,CAAC,CAAC;IAM5C,UAAU,CAAC,CAAC,EAAE,UAAU,GAAG,KAAK;IAahC,OAAO,CAAC,WAAW;CAYpB"}
@@ -0,0 +1,7 @@
1
+ import { BaseApi } from './baseApi';
2
+ import { Account, AccountRequestParams } from '../types';
3
+ export default class AccountsApi extends BaseApi {
4
+ private readonly apiBasePath;
5
+ getAccounts(params: AccountRequestParams): Promise<Account[]>;
6
+ }
7
+ //# sourceMappingURL=accountsApi.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"accountsApi.d.ts","sourceRoot":"","sources":["../../../src/api/accountsApi.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,OAAO,EAAE,oBAAoB,EAAE,MAAM,UAAU,CAAC;AAEzD,MAAM,CAAC,OAAO,OAAO,WAAY,SAAQ,OAAO;IAC9C,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAqB;IAWpC,WAAW,CAAC,MAAM,EAAE,oBAAoB,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;CAO3E"}
@@ -0,0 +1,7 @@
1
+ import { BaseApi } from './baseApi';
2
+ import { Category } from '../types';
3
+ export default class CategoriesApi extends BaseApi {
4
+ private readonly apiBasePath;
5
+ getCategories(): Promise<Category[]>;
6
+ }
7
+ //# sourceMappingURL=categoriesApi.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"categoriesApi.d.ts","sourceRoot":"","sources":["../../../src/api/categoriesApi.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AAEpC,MAAM,CAAC,OAAO,OAAO,aAAc,SAAQ,OAAO;IAChD,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAuB;IAKtC,aAAa,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;CAMlD"}
@@ -0,0 +1,7 @@
1
+ import { BaseApi } from './baseApi';
2
+ import { Environment, EnvironmentRequestParams } from '../types';
3
+ export default class EnvironmentsApi extends BaseApi {
4
+ private readonly apiBasePath;
5
+ getEnvironments(params: EnvironmentRequestParams): Promise<Environment[]>;
6
+ }
7
+ //# sourceMappingURL=environmentsApi.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"environmentsApi.d.ts","sourceRoot":"","sources":["../../../src/api/environmentsApi.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,WAAW,EAAE,wBAAwB,EAAE,MAAM,UAAU,CAAC;AAEjE,MAAM,CAAC,OAAO,OAAO,eAAgB,SAAQ,OAAO;IAClD,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAyB;IASxC,eAAe,CAAC,MAAM,EAAE,wBAAwB,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;CAOvF"}
@@ -1,2 +1,7 @@
1
1
  export { default as CustomersApi } from './customersApi';
2
+ export { default as EnvironmentsApi } from './environmentsApi';
3
+ export { default as AccountsApi } from './accountsApi';
4
+ export { default as CategoriesApi } from './categoriesApi';
5
+ export { default as MappingApi } from './mappingApi';
6
+ export { default as ReportingApi } from './reportingApi';
2
7
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/api/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,gBAAgB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/api/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,gBAAgB,CAAC;AACzD,OAAO,EAAE,OAAO,IAAI,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAC/D,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,eAAe,CAAC;AACvD,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAC3D,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,cAAc,CAAC;AACrD,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,gBAAgB,CAAC"}
@@ -0,0 +1,7 @@
1
+ import { BaseApi } from './baseApi';
2
+ import { Mapping } from '../types';
3
+ export default class MappingApi extends BaseApi {
4
+ private readonly apiBasePath;
5
+ getMapping(): Promise<Mapping>;
6
+ }
7
+ //# sourceMappingURL=mappingApi.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mappingApi.d.ts","sourceRoot":"","sources":["../../../src/api/mappingApi.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AAEnC,MAAM,CAAC,OAAO,OAAO,UAAW,SAAQ,OAAO;IAC7C,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAoB;IAKnC,UAAU,IAAI,OAAO,CAAC,OAAO,CAAC;CAM5C"}
@@ -0,0 +1,8 @@
1
+ import { BaseApi } from './baseApi';
2
+ import { UsageRequestParams, Usage } from '../types';
3
+ export default class ReportingApi extends BaseApi {
4
+ private readonly apiBasePath;
5
+ getUsage(params: UsageRequestParams): Promise<Usage[]>;
6
+ getUsageTotal(params: UsageRequestParams): Promise<number>;
7
+ }
8
+ //# sourceMappingURL=reportingApi.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reportingApi.d.ts","sourceRoot":"","sources":["../../../src/api/reportingApi.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,kBAAkB,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AAGrD,MAAM,CAAC,OAAO,OAAO,YAAa,SAAQ,OAAO;IAC/C,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAY;IAY3B,QAAQ,CAAC,MAAM,EAAE,kBAAkB,GAAG,OAAO,CAAC,KAAK,EAAE,CAAC;IAkBtD,aAAa,CAAC,MAAM,EAAE,kBAAkB,GAAG,OAAO,CAAC,MAAM,CAAC;CAOxE"}
@@ -31,4 +31,62 @@ export interface Customer {
31
31
  BillingAddress?: CustomerBillingAddress;
32
32
  IdwCustomerId?: string;
33
33
  }
34
+ export type ApiRequestParams = {
35
+ clientId: string;
36
+ };
37
+ export type EnvironmentStatus = 'ACTIVE' | 'NOT ACTIVE';
38
+ export type EnvironmentRequestParams = ApiRequestParams & {
39
+ id?: string;
40
+ environmentName?: string;
41
+ status?: EnvironmentStatus;
42
+ };
43
+ export interface Environment {
44
+ id: string;
45
+ environmentName: string;
46
+ customer: string;
47
+ status: EnvironmentStatus;
48
+ }
49
+ export type AccountStatus = 'ACTIVE' | 'INACTIVE';
50
+ export type AccountRequestParams = ApiRequestParams & {
51
+ id?: string;
52
+ accountName?: string;
53
+ environmentId?: string;
54
+ billable?: boolean;
55
+ status?: AccountStatus;
56
+ };
57
+ export interface Account {
58
+ id: string;
59
+ accountName: string;
60
+ customerId: string;
61
+ environmentId: string;
62
+ billable: boolean;
63
+ status?: AccountStatus;
64
+ }
65
+ export interface Category {
66
+ name: string;
67
+ value: string;
68
+ }
69
+ export interface Mapping {
70
+ [key: string]: {
71
+ [key: string]: string;
72
+ };
73
+ }
74
+ export type UsageRequestParams = ApiRequestParams & {
75
+ dateFrom: Date;
76
+ dateTo: Date;
77
+ tiers?: boolean;
78
+ environments?: string[];
79
+ accounts?: string[];
80
+ categories?: string[];
81
+ };
82
+ export interface Usage {
83
+ date: Date;
84
+ sku: string;
85
+ category: string;
86
+ units: number;
87
+ rate: number;
88
+ cost: number;
89
+ account_id: string;
90
+ environment_id: string;
91
+ }
34
92
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,cAAc,CAAC;AAErC,MAAM,MAAM,SAAS,GAAG;IAItB,KAAK,EAAE,KAAK,CAAC;IAIb,YAAY,CAAC,EAAE,MAAM,CAAC;IAItB,SAAS,CAAC,EAAE,MAAM,CAAC;IAInB,UAAU,CAAC,EAAE,MAAM,CAAC;IAKpB,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B,CAAC;AAEF,oBAAY,cAAc;IACxB,MAAM,WAAW;IACjB,QAAQ,aAAa;IACrB,SAAS,cAAc;IACvB,OAAO,YAAY;IACnB,KAAK,UAAU;CAChB;AAED,MAAM,WAAW,sBAAsB;IACrC,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;CAC3B;AAED,MAAM,WAAW,QAAQ;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,cAAc,CAAC;IACvB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,cAAc,CAAC,EAAE,sBAAsB,CAAC;IACxC,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,cAAc,CAAC;AAErC,MAAM,MAAM,SAAS,GAAG;IAItB,KAAK,EAAE,KAAK,CAAC;IAIb,YAAY,CAAC,EAAE,MAAM,CAAC;IAItB,SAAS,CAAC,EAAE,MAAM,CAAC;IAInB,UAAU,CAAC,EAAE,MAAM,CAAC;IAKpB,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B,CAAC;AAEF,oBAAY,cAAc;IACxB,MAAM,WAAW;IACjB,QAAQ,aAAa;IACrB,SAAS,cAAc;IACvB,OAAO,YAAY;IACnB,KAAK,UAAU;CAChB;AAED,MAAM,WAAW,sBAAsB;IACrC,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;CAC3B;AAED,MAAM,WAAW,QAAQ;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,cAAc,CAAC;IACvB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,cAAc,CAAC,EAAE,sBAAsB,CAAC;IACxC,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,MAAM,gBAAgB,GAAG;IAC7B,QAAQ,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG,QAAQ,GAAG,YAAY,CAAC;AAExD,MAAM,MAAM,wBAAwB,GAAG,gBAAgB,GAAG;IACxD,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,MAAM,CAAC,EAAE,iBAAiB,CAAC;CAC5B,CAAC;AAEF,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,eAAe,EAAE,MAAM,CAAC;IACxB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,iBAAiB,CAAC;CAC3B;AAED,MAAM,MAAM,aAAa,GAAG,QAAQ,GAAG,UAAU,CAAC;AAElD,MAAM,MAAM,oBAAoB,GAAG,gBAAgB,GAAG;IACpD,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,MAAM,CAAC,EAAE,aAAa,CAAC;CACxB,CAAC;AAEF,MAAM,WAAW,OAAO;IACtB,EAAE,EAAE,MAAM,CAAC;IACX,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;IACtB,QAAQ,EAAE,OAAO,CAAC;IAClB,MAAM,CAAC,EAAE,aAAa,CAAC;CACxB;AAED,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,OAAO;IACtB,CAAC,GAAG,EAAE,MAAM,GAAG;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAC;KAAE,CAAC;CAC3C;AAED,MAAM,MAAM,kBAAkB,GAAG,gBAAgB,GAAG;IAClD,QAAQ,EAAE,IAAI,CAAC;IACf,MAAM,EAAE,IAAI,CAAC;IACb,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;CACvB,CAAC;AAEF,MAAM,WAAW,KAAK;IACpB,IAAI,EAAE,IAAI,CAAC;IACX,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,MAAM,CAAC;CACxB"}
@@ -0,0 +1,4 @@
1
+ export declare function adaptParams<T extends Record<string, unknown>>(params: T): {
2
+ [K in keyof T]: unknown;
3
+ };
4
+ //# sourceMappingURL=utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/utils.ts"],"names":[],"mappings":"AAAA,wBAAgB,WAAW,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC,GAAG;KAAG,CAAC,IAAI,MAAM,CAAC,GAAG,OAAO;CAAE,CAQrG"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@or-sdk/ccp",
3
- "version": "1.1.2-beta.2882.0",
3
+ "version": "1.1.3",
4
4
  "license": "Apache-2.0",
5
5
  "main": "dist/cjs/index.js",
6
6
  "module": "dist/esm/index.js",
@@ -26,5 +26,6 @@
26
26
  },
27
27
  "publishConfig": {
28
28
  "access": "public"
29
- }
29
+ },
30
+ "gitHead": "bb327c0ce61889fcb015cef6cb5a808e26079a2f"
30
31
  }
package/src/Ccp.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  import { AxiosError, Base, CalApiParams } from '@or-sdk/base';
2
- import { CustomersApi } from './api';
2
+ import { CustomersApi, EnvironmentsApi, AccountsApi, CategoriesApi, MappingApi, ReportingApi } from './api';
3
3
  import { ApiError } from './apiError';
4
4
  import { CcpConfig } from './types';
5
5
  import { SERVICE_KEY } from './constants';
@@ -13,6 +13,11 @@ import { SERVICE_KEY } from './constants';
13
13
  */
14
14
  export class Ccp extends Base {
15
15
  public readonly customersApi: CustomersApi;
16
+ public readonly environmentsApi: EnvironmentsApi;
17
+ public readonly accountsApi: AccountsApi;
18
+ public readonly categoriesApi: CategoriesApi;
19
+ public readonly mappingApi: MappingApi;
20
+ public readonly reportingApi: ReportingApi;
16
21
  private withApiErrorLog: boolean;
17
22
 
18
23
  /**
@@ -36,6 +41,11 @@ export class Ccp extends Base {
36
41
  this.withApiErrorLog = Boolean(params.withApiErrorLog);
37
42
 
38
43
  this.customersApi = new CustomersApi(apiCall);
44
+ this.environmentsApi = new EnvironmentsApi(apiCall);
45
+ this.accountsApi = new AccountsApi(apiCall);
46
+ this.categoriesApi = new CategoriesApi(apiCall);
47
+ this.mappingApi = new MappingApi(apiCall);
48
+ this.reportingApi = new ReportingApi(apiCall);
39
49
  }
40
50
 
41
51
  callApi<T>(params: CalApiParams): Promise<T> {
@@ -0,0 +1,23 @@
1
+ import { BaseApi } from './baseApi';
2
+ import { Account, AccountRequestParams } from '../types';
3
+
4
+ export default class AccountsApi extends BaseApi {
5
+ private readonly apiBasePath = 'api/v1/accounts';
6
+
7
+ /**
8
+ * @description get client's accounts
9
+ * @param clientId
10
+ * @param id
11
+ * @param accountName
12
+ * @param billable
13
+ * @param environmentId
14
+ * @param status
15
+ */
16
+ public async getAccounts(params: AccountRequestParams): Promise<Account[]> {
17
+ return await this.apiCall({
18
+ method: 'GET',
19
+ route: `${this.apiBasePath}`,
20
+ params,
21
+ });
22
+ }
23
+ }
@@ -0,0 +1,16 @@
1
+ import { BaseApi } from './baseApi';
2
+ import { Category } from '../types';
3
+
4
+ export default class CategoriesApi extends BaseApi {
5
+ private readonly apiBasePath = 'api/v1/categories';
6
+
7
+ /**
8
+ * @description get categories
9
+ */
10
+ public async getCategories(): Promise<Category[]> {
11
+ return await this.apiCall({
12
+ method: 'GET',
13
+ route: `${this.apiBasePath}`,
14
+ });
15
+ }
16
+ }
@@ -10,7 +10,7 @@ export default class CustomersApi extends BaseApi {
10
10
  public async currentCustomer(): Promise<Customer> {
11
11
  return await this.apiCall({
12
12
  method: 'GET',
13
- route: `${this.apiBasePath}/`,
13
+ route: `${this.apiBasePath}`,
14
14
  });
15
15
  }
16
16
 
@@ -0,0 +1,21 @@
1
+ import { BaseApi } from './baseApi';
2
+ import { Environment, EnvironmentRequestParams } from '../types';
3
+
4
+ export default class EnvironmentsApi extends BaseApi {
5
+ private readonly apiBasePath = 'api/v1/environments';
6
+
7
+ /**
8
+ * @description get client's environments
9
+ * @param clientId
10
+ * @param id
11
+ * @param environmentName
12
+ * @param status
13
+ */
14
+ public async getEnvironments(params: EnvironmentRequestParams): Promise<Environment[]> {
15
+ return await this.apiCall({
16
+ method: 'GET',
17
+ route: `${this.apiBasePath}`,
18
+ params,
19
+ });
20
+ }
21
+ }
package/src/api/index.ts CHANGED
@@ -1 +1,6 @@
1
1
  export { default as CustomersApi } from './customersApi';
2
+ export { default as EnvironmentsApi } from './environmentsApi';
3
+ export { default as AccountsApi } from './accountsApi';
4
+ export { default as CategoriesApi } from './categoriesApi';
5
+ export { default as MappingApi } from './mappingApi';
6
+ export { default as ReportingApi } from './reportingApi';
@@ -0,0 +1,16 @@
1
+ import { BaseApi } from './baseApi';
2
+ import { Mapping } from '../types';
3
+
4
+ export default class MappingApi extends BaseApi {
5
+ private readonly apiBasePath = 'api/v1/mapping';
6
+
7
+ /**
8
+ * @description get mapping
9
+ */
10
+ public async getMapping(): Promise<Mapping> {
11
+ return await this.apiCall({
12
+ method: 'GET',
13
+ route: `${this.apiBasePath}`,
14
+ });
15
+ }
16
+ }
@@ -0,0 +1,43 @@
1
+ import { BaseApi } from './baseApi';
2
+ import { UsageRequestParams, Usage } from '../types';
3
+ import { adaptParams } from '../utils';
4
+
5
+ export default class ReportingApi extends BaseApi {
6
+ private readonly apiBasePath = 'api/v1';
7
+
8
+ /**
9
+ * @description get usage traffic
10
+ * @param clientId string
11
+ * @param dateFrom Date
12
+ * @param dateTo Date
13
+ * @param tiers boolean
14
+ * @param environments string[]
15
+ * @param accounts string[]
16
+ * @param categories string[]
17
+ */
18
+ public async getUsage(params: UsageRequestParams): Promise<Usage[]> {
19
+ return await this.apiCall({
20
+ method: 'GET',
21
+ route: `${this.apiBasePath}/usage`,
22
+ params: adaptParams<UsageRequestParams>(params),
23
+ });
24
+ }
25
+
26
+ /**
27
+ * @description get usage traffic total cost
28
+ * @param clientId string
29
+ * @param dateFrom Date
30
+ * @param dateTo Date
31
+ * @param tiers boolean
32
+ * @param environments string[]
33
+ * @param accounts string[]
34
+ * @param categories string[]
35
+ */
36
+ public async getUsageTotal(params: UsageRequestParams): Promise<number> {
37
+ return await this.apiCall({
38
+ method: 'GET',
39
+ route: `${this.apiBasePath}/usage/total`,
40
+ params: adaptParams<UsageRequestParams>(params),
41
+ });
42
+ }
43
+ }
package/src/types.ts CHANGED
@@ -52,3 +52,69 @@ export interface Customer {
52
52
  IdwCustomerId?: string;
53
53
  }
54
54
 
55
+ export type ApiRequestParams = {
56
+ clientId: string;
57
+ };
58
+
59
+ export type EnvironmentStatus = 'ACTIVE' | 'NOT ACTIVE';
60
+
61
+ export type EnvironmentRequestParams = ApiRequestParams & {
62
+ id?: string;
63
+ environmentName?: string;
64
+ status?: EnvironmentStatus;
65
+ };
66
+
67
+ export interface Environment {
68
+ id: string;
69
+ environmentName: string;
70
+ customer: string;
71
+ status: EnvironmentStatus;
72
+ }
73
+
74
+ export type AccountStatus = 'ACTIVE' | 'INACTIVE';
75
+
76
+ export type AccountRequestParams = ApiRequestParams & {
77
+ id?: string;
78
+ accountName?: string;
79
+ environmentId?: string;
80
+ billable?: boolean;
81
+ status?: AccountStatus;
82
+ };
83
+
84
+ export interface Account {
85
+ id: string;
86
+ accountName: string;
87
+ customerId: string;
88
+ environmentId: string;
89
+ billable: boolean;
90
+ status?: AccountStatus;
91
+ }
92
+
93
+ export interface Category {
94
+ name: string;
95
+ value: string;
96
+ }
97
+
98
+ export interface Mapping {
99
+ [key: string]: { [key: string]: string; };
100
+ }
101
+
102
+ export type UsageRequestParams = ApiRequestParams & {
103
+ dateFrom: Date;
104
+ dateTo: Date;
105
+ tiers?: boolean;
106
+ environments?: string[];
107
+ accounts?: string[];
108
+ categories?: string[];
109
+ };
110
+
111
+ export interface Usage {
112
+ date: Date;
113
+ sku: string;
114
+ category: string;
115
+ units: number;
116
+ rate: number;
117
+ cost: number;
118
+ account_id: string;
119
+ environment_id: string;
120
+ }
package/src/utils.ts ADDED
@@ -0,0 +1,9 @@
1
+ export function adaptParams<T extends Record<string, unknown>>(params: T): { [K in keyof T]: unknown } {
2
+ const p = {} as { [K in keyof T]: unknown };
3
+
4
+ (Object.entries(params) as Array<[keyof T, unknown]>).forEach(([k, v]) => {
5
+ if (Array.isArray(v)) p[k] = v.join();
6
+ else p[k] = v;
7
+ });
8
+ return p;
9
+ }