@labdigital/commercetools-mock 0.5.13 → 0.5.14

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 (104) hide show
  1. package/README.md +6 -2
  2. package/dist/commercetools-mock.cjs.development.js +3058 -1645
  3. package/dist/commercetools-mock.cjs.development.js.map +1 -1
  4. package/dist/commercetools-mock.cjs.production.min.js +1 -1
  5. package/dist/commercetools-mock.cjs.production.min.js.map +1 -1
  6. package/dist/commercetools-mock.esm.js +3058 -1645
  7. package/dist/commercetools-mock.esm.js.map +1 -1
  8. package/dist/ctMock.d.ts +1 -0
  9. package/dist/repositories/abstract.d.ts +9 -7
  10. package/dist/repositories/cart-discount.d.ts +9 -0
  11. package/dist/repositories/cart.d.ts +16 -3
  12. package/dist/repositories/category.d.ts +18 -0
  13. package/dist/repositories/channel.d.ts +6 -0
  14. package/dist/repositories/custom-object.d.ts +2 -2
  15. package/dist/repositories/customer-group.d.ts +11 -0
  16. package/dist/repositories/customer.d.ts +2 -2
  17. package/dist/repositories/discount-code.d.ts +8 -0
  18. package/dist/repositories/errors.d.ts +2 -2
  19. package/dist/repositories/extension.d.ts +8 -0
  20. package/dist/repositories/inventory-entry.d.ts +2 -2
  21. package/dist/repositories/order.d.ts +2 -2
  22. package/dist/repositories/payment.d.ts +4 -3
  23. package/dist/repositories/product-projection.d.ts +2 -2
  24. package/dist/repositories/product-type.d.ts +5 -4
  25. package/dist/repositories/product.d.ts +2 -2
  26. package/dist/repositories/project.d.ts +8 -0
  27. package/dist/repositories/shipping-method.d.ts +7 -5
  28. package/dist/repositories/shopping-list.d.ts +2 -2
  29. package/dist/repositories/state.d.ts +5 -4
  30. package/dist/repositories/store.d.ts +6 -3
  31. package/dist/repositories/subscription.d.ts +6 -0
  32. package/dist/repositories/tax-category.d.ts +6 -5
  33. package/dist/repositories/type.d.ts +5 -3
  34. package/dist/repositories/zone.d.ts +8 -0
  35. package/dist/services/abstract.d.ts +4 -3
  36. package/dist/services/cart-discount.d.ts +9 -0
  37. package/dist/services/category.d.ts +9 -0
  38. package/dist/services/channel.d.ts +9 -0
  39. package/dist/services/customer-group.d.ts +9 -0
  40. package/dist/services/discount-code.d.ts +9 -0
  41. package/dist/services/extension.d.ts +9 -0
  42. package/dist/services/my-cart.d.ts +11 -0
  43. package/dist/services/project.d.ts +11 -0
  44. package/dist/services/subscription.d.ts +9 -0
  45. package/dist/services/zone.d.ts +9 -0
  46. package/dist/storage.d.ts +10 -1
  47. package/dist/types.d.ts +2 -1
  48. package/package.json +20 -20
  49. package/src/ctMock.ts +44 -17
  50. package/src/oauth/server.ts +3 -1
  51. package/src/repositories/abstract.ts +39 -33
  52. package/src/repositories/cart-discount.ts +140 -0
  53. package/src/repositories/cart.ts +247 -3
  54. package/src/repositories/category.ts +140 -0
  55. package/src/repositories/channel.ts +23 -0
  56. package/src/repositories/custom-object.ts +2 -2
  57. package/src/repositories/customer-group.ts +42 -0
  58. package/src/repositories/customer.ts +2 -2
  59. package/src/repositories/discount-code.ts +143 -0
  60. package/src/repositories/errors.ts +7 -2
  61. package/src/repositories/extension.ts +65 -0
  62. package/src/repositories/inventory-entry.ts +2 -2
  63. package/src/repositories/order.ts +2 -2
  64. package/src/repositories/payment.ts +10 -6
  65. package/src/repositories/product-projection.ts +2 -2
  66. package/src/repositories/product-type.ts +57 -4
  67. package/src/repositories/product.ts +4 -2
  68. package/src/repositories/project.ts +150 -0
  69. package/src/repositories/shipping-method.ts +149 -13
  70. package/src/repositories/shopping-list.ts +2 -2
  71. package/src/repositories/state.ts +48 -4
  72. package/src/repositories/store.ts +69 -4
  73. package/src/repositories/subscription.ts +50 -0
  74. package/src/repositories/tax-category.ts +80 -6
  75. package/src/repositories/type.ts +133 -3
  76. package/src/repositories/zone.ts +77 -0
  77. package/src/server.ts +6 -1
  78. package/src/services/abstract.ts +16 -15
  79. package/src/services/cart-discount.ts +17 -0
  80. package/src/services/cart.test.ts +314 -3
  81. package/src/services/category.test.ts +37 -0
  82. package/src/services/category.ts +17 -0
  83. package/src/services/channel.ts +17 -0
  84. package/src/services/custom-object.test.ts +3 -3
  85. package/src/services/customer-group.ts +17 -0
  86. package/src/services/discount-code.ts +17 -0
  87. package/src/services/extension.ts +17 -0
  88. package/src/services/inventory-entry.test.ts +3 -3
  89. package/src/services/my-cart.test.ts +93 -0
  90. package/src/services/my-cart.ts +44 -0
  91. package/src/services/my-payment.test.ts +2 -2
  92. package/src/services/order.test.ts +4 -4
  93. package/src/services/payment.test.ts +2 -2
  94. package/src/services/product-projection.test.ts +1 -5
  95. package/src/services/product-type.test.ts +2 -2
  96. package/src/services/product.test.ts +6 -2
  97. package/src/services/project.ts +42 -0
  98. package/src/services/shipping-method.test.ts +3 -3
  99. package/src/services/state.test.ts +2 -2
  100. package/src/services/subscription.ts +17 -0
  101. package/src/services/tax-category.test.ts +3 -3
  102. package/src/services/zone.ts +17 -0
  103. package/src/storage.ts +69 -1
  104. package/src/types.ts +2 -1
@@ -1 +1 @@
1
- {"version":3,"file":"commercetools-mock.cjs.development.js","sources":["../src/helpers.ts","../src/exceptions.ts","../src/repositories/errors.ts","../src/repositories/abstract.ts","../src/repositories/helpers.ts","../src/repositories/shopping-list.ts","../src/services/abstract.ts","../src/services/shopping-list.ts","../src/lib/filterParser.ts","../src/repositories/product-projection.ts","../src/services/product-projection.ts","../src/repositories/product-type.ts","../src/services/product-type.ts","../src/repositories/shipping-method.ts","../src/services/shipping-method.ts","../src/repositories/state.ts","../src/services/state.ts","../src/repositories/tax-category.ts","../src/services/tax-category.ts","../src/repositories/payment.ts","../src/services/payment.ts","../src/lib/expandParser.ts","../src/lib/haversine.ts","../src/lib/predicateParser.ts","../src/storage.ts","../src/repositories/type.ts","../src/services/type.ts","../src/repositories/custom-object.ts","../src/services/custom-object.ts","../src/repositories/customer.ts","../src/services/customer.ts","../src/repositories/cart.ts","../src/services/cart.ts","../src/repositories/inventory-entry.ts","../src/services/inventory-entry.ts","../src/repositories/order.ts","../src/services/order.ts","../src/repositories/store.ts","../src/services/store.ts","../src/oauth/store.ts","../src/oauth/helpers.ts","../src/oauth/server.ts","../src/constants.ts","../src/projectAPI.ts","../src/lib/proxy.ts","../src/repositories/product.ts","../src/services/product.ts","../src/services/my-payment.ts","../src/ctMock.ts"],"sourcesContent":["import { v4 as uuidv4 } from 'uuid'\n\nexport const getBaseResourceProperties = () => {\n return {\n id: uuidv4(),\n createdAt: new Date().toISOString(),\n lastModifiedAt: new Date().toISOString(),\n version: 0,\n }\n}\n","export abstract class BaseError {\n abstract message: string\n}\n\nexport class CommercetoolsError<T extends BaseError> extends Error {\n info: T\n statusCode: number\n\n constructor(info: T, statusCode = 400) {\n super(info.message)\n this.info = info\n this.statusCode = statusCode || 500\n }\n}\n\nexport interface InvalidRequestError {\n readonly code: 'invalid_request'\n readonly message: string\n}\n","import {\n BaseResource,\n ConcurrentModificationError,\n} from '@commercetools/platform-sdk'\nimport { CommercetoolsError } from '../exceptions'\n\nexport const checkConcurrentModification = (\n resource: BaseResource,\n expectedVersion: number\n) => {\n if (resource.version === expectedVersion) return\n\n throw new CommercetoolsError<ConcurrentModificationError>(\n {\n message: `Object ${resource.id} has a different version than expected. Expected: ${expectedVersion} - Actual: ${resource.version}.`,\n currentVersion: resource.version,\n code: 'ConcurrentModification',\n },\n 409\n )\n}\n","import { RepositoryTypes } from './../types'\nimport deepEqual from 'deep-equal'\n\nimport {\n BaseResource,\n InvalidOperationError,\n UpdateAction,\n} from '@commercetools/platform-sdk'\nimport { AbstractStorage } from '../storage'\nimport { checkConcurrentModification } from './errors'\nimport { CommercetoolsError } from '../exceptions'\n\nexport type QueryParams = {\n expand?: string[]\n where?: string[]\n}\n\nexport type GetParams = {\n expand?: string[]\n}\n\nexport default abstract class AbstractRepository {\n protected _storage: AbstractStorage\n\n protected actions: {\n [key: string]: (projectKey: string, resource: any, actions: any) => void\n } = {}\n\n constructor(storage: AbstractStorage) {\n this._storage = storage\n this._storage.assertStorage(this.getTypeId())\n }\n\n abstract getTypeId(): RepositoryTypes\n abstract create(projectKey: string, draft: any): BaseResource\n\n query(projectKey: string, params: QueryParams = {}) {\n return this._storage.query(projectKey, this.getTypeId(), {\n expand: params.expand,\n where: params.where,\n })\n }\n\n get(\n projectKey: string,\n id: string,\n params: GetParams = {}\n ): BaseResource | null {\n return this._storage.get(projectKey, this.getTypeId(), id, params)\n }\n\n getByKey(\n projectKey: string,\n key: string,\n params: GetParams = {}\n ): BaseResource | null {\n return this._storage.getByKey(projectKey, this.getTypeId(), key, params)\n }\n\n delete(\n projectKey: string,\n id: string,\n params: GetParams = {}\n ): BaseResource | null {\n return this._storage.delete(projectKey, this.getTypeId(), id, params)\n }\n\n save(projectKey: string, resource: BaseResource) {\n const typeId = this.getTypeId()\n\n const current = this.get(projectKey, resource.id)\n\n if (current) {\n checkConcurrentModification(current, resource.version)\n } else {\n if (resource.version !== 0) {\n throw new CommercetoolsError<InvalidOperationError>(\n {\n code: 'InvalidOperation',\n message: 'version on create must be 0',\n },\n 400\n )\n }\n }\n\n // @ts-ignore\n resource.version += 1\n this._storage.add(projectKey, typeId, resource as any)\n }\n\n processUpdateActions(\n projectKey: string,\n resource: BaseResource,\n actions: UpdateAction[]\n ): BaseResource {\n // Deep-copy\n const modifiedResource = JSON.parse(JSON.stringify(resource))\n\n actions.forEach(action => {\n const updateFunc = this.actions[action.action]\n if (!updateFunc) {\n console.error(`No mock implemented for update action ${action.action}`)\n return\n }\n updateFunc(projectKey, modifiedResource, action)\n })\n\n if (!deepEqual(modifiedResource, resource)) {\n this.save(projectKey, modifiedResource)\n }\n return modifiedResource\n }\n}\n","import { v4 as uuidv4 } from 'uuid'\nimport {\n CustomFields,\n CustomFieldsDraft,\n Money,\n Price,\n PriceDraft,\n Reference,\n ResourceIdentifier,\n Store,\n StoreKeyReference,\n StoreResourceIdentifier,\n Type,\n TypedMoney,\n} from '@commercetools/platform-sdk'\nimport { AbstractStorage } from '../storage'\n\nexport const createCustomFields = (\n draft: CustomFieldsDraft | undefined,\n projectKey: string,\n storage: AbstractStorage\n): CustomFields | undefined => {\n if (!draft) return undefined\n if (!draft.type) return undefined\n if (!draft.type.typeId) return undefined\n if (!draft.fields) return undefined\n\n const typeResource = storage.getByResourceIdentifier(\n projectKey,\n draft.type\n ) as Type\n\n if (!typeResource) {\n throw new Error(\n `No type '${draft.type.typeId}' with id=${draft.type.id} or key=${draft.type.key}`\n )\n }\n\n return {\n type: {\n typeId: draft.type.typeId,\n id: typeResource.id,\n },\n fields: draft.fields,\n }\n}\n\nexport const createPrice = (draft: PriceDraft): Price => {\n return {\n id: uuidv4(),\n value: createTypedMoney(draft.value),\n }\n}\n\nexport const createTypedMoney = (value: Money): TypedMoney => {\n return {\n type: 'centPrecision',\n fractionDigits: 2,\n ...value,\n }\n}\n\nexport const resolveStoreReference = (\n ref: StoreResourceIdentifier | undefined,\n projectKey: string,\n storage: AbstractStorage\n): StoreKeyReference | undefined => {\n if (!ref) return undefined\n const resource = storage.getByResourceIdentifier(projectKey, ref)\n if (!resource) {\n throw new Error('No such store')\n }\n\n const store = resource as Store\n return {\n typeId: 'store',\n key: store.key,\n }\n}\n\nexport const getReferenceFromResourceIdentifier = <T extends Reference>(\n resourceIdentifier: ResourceIdentifier,\n projectKey: string,\n storage: AbstractStorage\n): T => {\n const resource = storage.getByResourceIdentifier(\n projectKey,\n resourceIdentifier\n )\n if (!resource)\n throw new Error(\n `resource type ${resourceIdentifier.typeId} with id ${resourceIdentifier.id} and key ${resourceIdentifier.key} not found`\n )\n\n return ({\n typeId: resourceIdentifier.typeId,\n id: resource?.id,\n } as unknown) as T\n}\n","import {\n CustomerReference,\n ReferenceTypeId,\n ShoppingList,\n ShoppingListDraft,\n} from '@commercetools/platform-sdk'\nimport { getBaseResourceProperties } from '../helpers'\nimport AbstractRepository from './abstract'\nimport {\n createCustomFields,\n getReferenceFromResourceIdentifier,\n} from './helpers'\n\nexport class ShoppingListRepository extends AbstractRepository {\n getTypeId(): ReferenceTypeId {\n return 'shopping-list'\n }\n create(projectKey: string, draft: ShoppingListDraft): ShoppingList {\n // const product =\n\n const resource: ShoppingList = {\n ...getBaseResourceProperties(),\n ...draft,\n custom: createCustomFields(draft.custom, projectKey, this._storage),\n textLineItems: [],\n lineItems: draft.lineItems?.map(e => ({\n ...getBaseResourceProperties(),\n ...e,\n addedAt: e.addedAt ?? '',\n productId: e.productId ?? '',\n name: {},\n quantity: e.quantity ?? 1,\n productType: { typeId: 'product-type', id: '' },\n custom: createCustomFields(e.custom, projectKey, this._storage),\n })),\n customer: draft.customer\n ? getReferenceFromResourceIdentifier<CustomerReference>(\n draft.customer,\n projectKey,\n this._storage\n )\n : undefined,\n store: draft.store?.key\n ? { typeId: 'store', key: draft.store.key! }\n : undefined,\n }\n this.save(projectKey, resource)\n return resource\n }\n}\n","import { QueryParams } from './../repositories/abstract'\nimport { Update } from '@commercetools/platform-sdk'\nimport { ParsedQs } from 'qs'\nimport { Request, Response, Router } from 'express'\nimport AbstractRepository from '../repositories/abstract'\n\nexport default abstract class AbstractService {\n protected abstract getBasePath(): string\n public abstract repository: AbstractRepository\n\n constructor(parent: Router) {\n this.registerRoutes(parent)\n }\n\n extraRoutes(router: Router) {}\n\n registerRoutes(parent: Router) {\n const basePath = this.getBasePath()\n const router = Router({ mergeParams: true })\n\n // Bind this first since the `/:id` routes are currently a bit to greedy\n this.extraRoutes(router)\n\n router.get('/', this.get.bind(this))\n router.get('/key=:key', this.getWithKey.bind(this)) // same thing goes for the key routes\n router.get('/:id', this.getWithId.bind(this))\n\n router.delete('/key=:key', this.deletewithKey.bind(this))\n router.delete('/:id', this.deletewithId.bind(this))\n\n router.post('/', this.post.bind(this))\n router.post('/key=:key', this.postWithKey.bind(this))\n router.post('/:id', this.postWithId.bind(this))\n\n parent.use(`/${basePath}`, router)\n }\n\n get(request: Request, response: Response) {\n const result = this.repository.query(request.params.projectKey, {\n expand: this._parseParam(request.query.expand),\n where: this._parseParam(request.query.where),\n })\n return response.status(200).send(result)\n }\n\n getWithId(request: Request, response: Response) {\n return this._expandWithId(request, response, request.params['id'])\n }\n\n getWithKey(request: Request, response: Response) {\n const result = this.repository.getByKey(\n request.params.projectKey,\n request.params['key'],\n { expand: this._parseParam(request.query.expand) }\n )\n if (!result) return response.status(404).send()\n return response.status(200).send(result)\n }\n\n deletewithId(request: Request, response: Response) {\n const result = this.repository.delete(\n request.params.projectKey,\n request.params['id'],\n {\n expand: this._parseParam(request.query.expand),\n }\n )\n if (!result) {\n return response.status(404).send('Not found')\n }\n return response.status(200).send(result)\n }\n\n deletewithKey(request: Request, response: Response) {\n return response.status(500).send('Not implemented')\n }\n\n post(request: Request, response: Response) {\n const draft = request.body\n const resource = this.repository.create(request.params.projectKey, draft)\n return this._expandWithId(request, response, resource.id)\n }\n\n postWithId(request: Request, response: Response) {\n const updateRequest: Update = request.body\n const resource = this.repository.get(\n request.params.projectKey,\n request.params['id']\n )\n if (!resource) {\n return response.status(404).send('Not found')\n }\n\n if (resource.version !== updateRequest.version) {\n return response.status(409).send('Concurrent modification')\n }\n\n const updatedResource = this.repository.processUpdateActions(\n request.params.projectKey,\n resource,\n updateRequest.actions\n )\n\n return this._expandWithId(request, response, updatedResource.id)\n }\n\n postWithKey(request: Request, response: Response) {\n return response.status(500).send('Not implemented')\n }\n\n protected _expandWithId(\n request: Request,\n response: Response,\n resourceId: string\n ) {\n const result = this.repository.get(request.params.projectKey, resourceId, {\n expand: this._parseParam(request.query.expand),\n })\n if (!result) {\n return response.status(404).send('Not found')\n }\n return response.status(200).send(result)\n }\n\n // No idea what i'm doing\n private _parseParam(\n value: string | ParsedQs | string[] | ParsedQs[] | undefined\n ): string[] | undefined {\n if (Array.isArray(value)) {\n // @ts-ignore\n return value\n } else if (value !== undefined) {\n return [`${value}`]\n }\n return undefined\n }\n}\n","import { ShoppingListRepository } from './../repositories/shopping-list'\nimport AbstractService from './abstract'\nimport { Router } from 'express'\nimport { AbstractStorage } from '../storage'\n\nexport class ShoppingListService extends AbstractService {\n public repository: ShoppingListRepository\n\n constructor(parent: Router, storage: AbstractStorage) {\n super(parent)\n this.repository = new ShoppingListRepository(storage)\n }\n\n getBasePath() {\n return 'shopping-lists'\n }\n}\n","export const parseFilterExpression = (filter: string | string[]) => {\n if (typeof filter === 'object') {\n const filters = filter.map(parse)\n return filters.join(' and ')\n }\n return parse(filter)\n}\n\nconst parse = (filter: string) => {\n let parsed = filter.replace(/:/g, '=')\n\n do {\n parsed = parsed.replace(/(.*)\\.(.*)=(.*)$/g, '$1($2=$3)')\n } while (parsed.includes('.'))\n\n return parsed\n}\n","import { ParsedQs } from 'qs'\nimport {\n ProductDraft,\n ProductProjection,\n ProductVariant,\n ProductVariantDraft,\n} from '@commercetools/platform-sdk'\nimport { getBaseResourceProperties } from '../helpers'\nimport AbstractRepository from './abstract'\nimport { RepositoryTypes } from '../types'\nimport { parseFilterExpression } from '../lib/filterParser'\n\nexport class ProductProjectionRepository extends AbstractRepository {\n getTypeId(): RepositoryTypes {\n return 'product-projection'\n }\n\n create(projectKey: string, draft: ProductDraft): ProductProjection {\n if (!draft.masterVariant) {\n throw new Error(\n `must provider mastervariant for product projection with key ${draft.key}`\n )\n }\n\n if (!draft.productType.id) {\n throw new Error(\n `must provider product type id for product projection with key ${draft.key}`\n )\n }\n\n const resource: ProductProjection = {\n ...getBaseResourceProperties(),\n name: draft.name,\n slug: draft.slug,\n categories: [],\n productType: { ...draft.productType, id: draft.productType.id! },\n masterVariant: variantFromDraft(0, draft.masterVariant!),\n variants:\n draft.variants?.map((variant, index) => {\n return variantFromDraft(index + 1, variant)\n }) ?? [],\n\n // @ts-ignore\n searchKeywords: draft.searchKeywords,\n }\n\n this.save(projectKey, resource)\n\n return resource\n }\n\n search(projectKey: string, query: ParsedQs) {\n const wherePredicate = parseFilterExpression(query.filter as any)\n\n const results = this._storage.query(projectKey, this.getTypeId(), {\n where: wherePredicate,\n }) //TODO: this is a partial implementation, but I don't really have the time to implement an actual search API right now\n\n return results\n }\n\n actions = {}\n}\n\nconst variantFromDraft = (\n variantId: number,\n variant: ProductVariantDraft\n): ProductVariant => {\n return {\n id: variantId,\n sku: variant?.sku,\n attributes: variant?.attributes,\n }\n}\n","import { ProductProjectionRepository } from './../repositories/product-projection'\nimport AbstractService from './abstract'\nimport { AbstractStorage } from '../storage'\nimport { Request, Response, Router } from 'express'\n\nexport class ProductProjectionService extends AbstractService {\n public repository: ProductProjectionRepository\n\n constructor(parent: Router, storage: AbstractStorage) {\n super(parent)\n this.repository = new ProductProjectionRepository(storage)\n }\n\n getBasePath() {\n return 'product-projections'\n }\n\n extraRoutes(router: Router) {\n router.get('/search', this.search.bind(this))\n }\n\n search(request: Request, response: Response) {\n const resource = this.repository.search(\n request.params.projectKey,\n request.query\n )\n return response.status(200).send(resource)\n }\n}\n","import { getBaseResourceProperties } from '../helpers'\nimport {\n AttributeDefinition,\n AttributeDefinitionDraft,\n ProductType,\n ProductTypeDraft,\n ReferenceTypeId,\n} from '@commercetools/platform-sdk'\nimport AbstractRepository from './abstract'\n\nexport class ProductTypeRepository extends AbstractRepository {\n getTypeId(): ReferenceTypeId {\n return 'product-type'\n }\n\n create(projectKey: string, draft: ProductTypeDraft): ProductType {\n const resource: ProductType = {\n ...getBaseResourceProperties(),\n ...draft,\n attributes: (draft.attributes ?? []).map(a =>\n this.attributeDefinitionFromAttributeDefinitionDraft(projectKey, a)\n ),\n }\n\n this.save(projectKey, resource)\n return resource\n }\n\n attributeDefinitionFromAttributeDefinitionDraft = (\n _projectKey: string,\n draft: AttributeDefinitionDraft\n ): AttributeDefinition => ({\n ...draft,\n attributeConstraint: draft.attributeConstraint ?? 'None',\n inputHint: draft.inputHint ?? 'SingleLine',\n isSearchable: draft.isSearchable ?? true,\n })\n\n getWithKey(projectKey: string, key: string): ProductType | undefined {\n const result = this._storage.query(projectKey, this.getTypeId(), {\n where: [`key=\"${key}\"`],\n })\n if (result.count === 1) {\n return result.results[0] as ProductType\n }\n\n // Catch this for now, should be checked when creating/updating\n if (result.count > 1) {\n throw new Error('Duplicate product type key')\n }\n\n return\n }\n\n actions = {}\n}\n","import { ProductTypeRepository } from '../repositories/product-type'\nimport AbstractService from './abstract'\nimport { Request, Response, Router } from 'express'\nimport { AbstractStorage } from '../storage'\n\nexport class ProductTypeService extends AbstractService {\n public repository: ProductTypeRepository\n\n constructor(parent: Router, storage: AbstractStorage) {\n super(parent)\n this.repository = new ProductTypeRepository(storage)\n }\n\n getBasePath() {\n return 'product-types'\n }\n\n extraRoutes(router: Router) {\n router.get('/key=:key', this.getWithKey.bind(this))\n }\n\n getWithKey(request: Request, response: Response) {\n const resource = this.repository.getWithKey(\n request.params.projectKey,\n request.params.key\n )\n if (resource) {\n return response.status(200).send(resource)\n }\n return response.status(404).send('Not found')\n }\n}\n","import {\n createCustomFields,\n createTypedMoney,\n getReferenceFromResourceIdentifier,\n} from './helpers'\nimport {\n ReferenceTypeId,\n ShippingMethod,\n ShippingMethodDraft,\n ZoneRate,\n ZoneRateDraft,\n} from '@commercetools/platform-sdk'\nimport { getBaseResourceProperties } from '../helpers'\nimport AbstractRepository from './abstract'\n\nexport class ShippingMethodRepository extends AbstractRepository {\n getTypeId(): ReferenceTypeId {\n return 'shipping-method'\n }\n\n create(projectKey: string, draft: ShippingMethodDraft): ShippingMethod {\n const resource: ShippingMethod = {\n ...getBaseResourceProperties(),\n ...draft,\n taxCategory: getReferenceFromResourceIdentifier(\n draft.taxCategory,\n projectKey,\n this._storage\n ),\n zoneRates: draft.zoneRates.map(z =>\n this.zoneRateFromZoneRateDraft(projectKey, z)\n ),\n custom: createCustomFields(draft.custom, projectKey, this._storage),\n }\n this.save(projectKey, resource)\n return resource\n }\n\n zoneRateFromZoneRateDraft = (\n projectKey: string,\n draft: ZoneRateDraft\n ): ZoneRate => ({\n ...draft,\n zone: getReferenceFromResourceIdentifier(\n draft.zone,\n projectKey,\n this._storage\n ),\n shippingRates: draft.shippingRates.map(s => ({\n ...s,\n price: createTypedMoney(s.price),\n freeAbove: s.freeAbove && createTypedMoney(s.freeAbove),\n tiers: s.tiers || [],\n })),\n })\n\n actions = {}\n}\n","import { ShippingMethodRepository } from '../repositories/shipping-method'\nimport AbstractService from './abstract'\nimport { Router } from 'express'\nimport { AbstractStorage } from '../storage'\n\nexport class ShippingMethodService extends AbstractService {\n public repository: ShippingMethodRepository\n\n constructor(parent: Router, storage: AbstractStorage) {\n super(parent)\n this.repository = new ShippingMethodRepository(storage)\n }\n\n getBasePath() {\n return 'shipping-methods'\n }\n}\n","import { getBaseResourceProperties } from '../helpers'\nimport { getReferenceFromResourceIdentifier } from './helpers'\nimport { ReferenceTypeId, State, StateDraft } from '@commercetools/platform-sdk'\nimport AbstractRepository from './abstract'\n\nexport class StateRepository extends AbstractRepository {\n getTypeId(): ReferenceTypeId {\n return 'state'\n }\n\n create(projectKey: string, draft: StateDraft): State {\n const resource: State = {\n ...getBaseResourceProperties(),\n ...draft,\n builtIn: false,\n initial: draft.initial || false,\n transitions: (draft.transitions || []).map(t =>\n getReferenceFromResourceIdentifier(t, projectKey, this._storage)\n ),\n }\n\n this.save(projectKey, resource)\n return resource\n }\n\n actions = {}\n}\n","import { StateRepository } from '../repositories/state'\nimport AbstractService from './abstract'\nimport { Router } from 'express'\nimport { AbstractStorage } from '../storage'\n\nexport class StateService extends AbstractService {\n public repository: StateRepository\n\n constructor(parent: Router, storage: AbstractStorage) {\n super(parent)\n this.repository = new StateRepository(storage)\n }\n\n getBasePath() {\n return 'states'\n }\n}\n","import {\n ReferenceTypeId,\n TaxCategory,\n TaxCategoryDraft,\n TaxRate,\n TaxRateDraft,\n} from '@commercetools/platform-sdk'\nimport { getBaseResourceProperties } from '../helpers'\nimport AbstractRepository from './abstract'\nimport { v4 as uuidv4 } from 'uuid'\n\nexport class TaxCategoryRepository extends AbstractRepository {\n getTypeId(): ReferenceTypeId {\n return 'tax-category'\n }\n\n create(projectKey: string, draft: TaxCategoryDraft): TaxCategory {\n const resource: TaxCategory = {\n ...getBaseResourceProperties(),\n ...draft,\n rates: draft.rates.map(this.taxRateFromTaxRateDraft),\n }\n this.save(projectKey, resource)\n return resource\n }\n\n taxRateFromTaxRateDraft = (draft: TaxRateDraft): TaxRate => ({\n ...draft,\n id: uuidv4(),\n amount: draft.amount || 0,\n })\n\n getWithKey(projectKey: string, key: string): TaxCategory | undefined {\n const result = this._storage.query(projectKey, this.getTypeId(), {\n where: [`key=\"${key}\"`],\n })\n if (result.count === 1) {\n return result.results[0] as TaxCategory\n }\n\n // Catch this for now, should be checked when creating/updating\n if (result.count > 1) {\n throw new Error('Duplicate tax categorie key')\n }\n\n return\n }\n\n actions = {}\n}\n","import { TaxCategoryRepository } from '../repositories/tax-category'\nimport AbstractService from './abstract'\nimport { AbstractStorage } from '../storage'\nimport { Request, Response, Router } from 'express'\n\nexport class TaxCategoryService extends AbstractService {\n public repository: TaxCategoryRepository\n\n constructor(parent: Router, storage: AbstractStorage) {\n super(parent)\n this.repository = new TaxCategoryRepository(storage)\n }\n\n getBasePath() {\n return 'tax-categories'\n }\n\n extraRoutes(router: Router) {\n router.get('/key=:key', this.getWithKey.bind(this))\n }\n\n getWithKey(request: Request, response: Response) {\n const resource = this.repository.getWithKey(\n request.params.projectKey,\n request.params.key\n )\n if (resource) {\n return response.status(200).send(resource)\n }\n return response.status(404).send('Not found')\n }\n}\n","import {\n Payment,\n PaymentAddTransactionAction,\n PaymentDraft,\n PaymentSetCustomFieldAction,\n PaymentSetCustomTypeAction,\n ReferenceTypeId,\n StateReference,\n TransactionDraft,\n} from '@commercetools/platform-sdk'\nimport AbstractRepository from './abstract'\nimport {\n createCustomFields,\n createTypedMoney,\n getReferenceFromResourceIdentifier,\n} from './helpers'\nimport { getBaseResourceProperties } from '../helpers'\nimport { v4 as uuidv4 } from 'uuid'\nimport { Writable } from '../types'\n\nexport class PaymentRepository extends AbstractRepository {\n getTypeId(): ReferenceTypeId {\n return 'payment'\n }\n\n create(projectKey: string, draft: PaymentDraft): Payment {\n const resource: Payment = {\n ...getBaseResourceProperties(),\n amountPlanned: createTypedMoney(draft.amountPlanned),\n paymentMethodInfo: draft.paymentMethodInfo!,\n paymentStatus: draft.paymentStatus\n ? {\n ...draft.paymentStatus,\n state: draft.paymentStatus.state\n ? getReferenceFromResourceIdentifier<StateReference>(\n draft.paymentStatus.state,\n projectKey,\n this._storage\n )\n : undefined,\n }\n : {},\n transactions: (draft.transactions || []).map(\n this.transactionFromTransactionDraft\n ),\n interfaceInteractions: (draft.interfaceInteractions || []).map(\n interaction =>\n createCustomFields(interaction, projectKey, this._storage)!\n ),\n custom: createCustomFields(draft.custom, projectKey, this._storage),\n }\n\n this.save(projectKey, resource)\n return resource\n }\n\n transactionFromTransactionDraft = (draft: TransactionDraft) => ({\n ...draft,\n id: uuidv4(),\n amount: createTypedMoney(draft.amount),\n })\n\n actions = {\n setCustomField: (\n projectKey: string,\n resource: Payment,\n { name, value }: PaymentSetCustomFieldAction\n ) => {\n if (!resource.custom) {\n throw new Error('Resource has no custom field')\n }\n\n resource.custom.fields[name] = value\n },\n setCustomType: (\n projectKey: string,\n resource: Writable<Payment>,\n { type, fields }: PaymentSetCustomTypeAction\n ) => {\n if (!type) {\n resource.custom = undefined\n } else {\n const resolvedType = this._storage.getByResourceIdentifier(\n projectKey,\n type\n )\n if (!resolvedType) {\n throw new Error(`Type ${type} not found`)\n }\n\n resource.custom = {\n type: {\n typeId: 'type',\n id: resolvedType.id,\n },\n fields: fields || [],\n }\n }\n },\n addTransaction: (\n projectKey: string,\n resource: Writable<Payment>,\n { transaction }: PaymentAddTransactionAction\n ) => {\n resource.transactions = [\n ...resource.transactions,\n this.transactionFromTransactionDraft(transaction),\n ]\n },\n // addInterfaceInteraction: () => {},\n // changeAmountPlanned: () => {},\n // changeTransactionInteractionId: () => {},\n // changeTransactionState: () => {},\n // changeTransactionTimestamp: () => {},\n // setAmountPaid: () => {},\n // setAmountRefunded: () => {},\n // setAnonymousId: () => {},\n // setAuthorization: () => {},\n // setCustomer: () => {},\n // setExternalId: () => {},\n // setInterfaceId: () => {},\n // setKey: () => {},\n // setMethodInfoInterface: () => {},\n // setMethodInfoMethod: () => {},\n // setMethodInfoName: () => {},\n // setStatusInterfaceCode: () => {},\n // setStatusInterfaceText: () => {},\n // transitionState: () => {},\n }\n}\n","import AbstractService from './abstract'\nimport { Router } from 'express'\nimport { AbstractStorage } from '../storage'\nimport { PaymentRepository } from '../repositories/payment'\n\nexport class PaymentService extends AbstractService {\n public repository: PaymentRepository\n\n constructor(parent: Router, storage: AbstractStorage) {\n super(parent)\n this.repository = new PaymentRepository(storage)\n }\n\n getBasePath() {\n return 'payments'\n }\n}\n","/**\n * This module implements the reference expansion as imeplemented by\n * commercetools.\n *\n * See https://docs.commercetools.com/api/general-concepts#reference-expansion\n *\n * TODO: implement support for multi-dimensional array\n */\ntype ExpandResult = {\n element: string\n index?: string | number\n rest?: string\n}\n\nexport const parseExpandClause = (clause: string): ExpandResult => {\n const result: ExpandResult = {\n element: clause,\n index: undefined,\n rest: undefined,\n }\n\n const pos = clause.indexOf('.')\n if (pos > 0) {\n result.element = clause.substring(0, pos)\n result.rest = clause.substring(pos + 1)\n }\n\n const match = result.element.match(/\\[([^\\]+])]/)\n if (match) {\n result.index = match[1] === '*' ? '*' : parseInt(match[1], 10)\n result.element = result.element.substring(0, match.index)\n }\n return result\n}\n","export type Location = {\n latitude: number\n longitude: number\n}\n\n/**\n * Returns the distance between src and dst as meters\n */\nexport const haversineDistance = (src: Location, dst: Location) => {\n const RADIUS_OF_EARTH_IN_KM = 6371\n const toRadian = (deg: number) => deg * (Math.PI / 180)\n\n const dLat = toRadian(dst.latitude - src.latitude)\n const dLon = toRadian(dst.longitude - src.longitude)\n\n var a =\n Math.sin(dLat / 2) * Math.sin(dLat / 2) +\n Math.cos(toRadian(src.latitude)) *\n Math.cos(toRadian(dst.latitude)) *\n Math.sin(dLon / 2) *\n Math.sin(dLon / 2)\n var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a))\n return RADIUS_OF_EARTH_IN_KM * c * 1000\n}\n","/**\n * This module implements the commercetools query predicate filter expression.\n * Support should be 100% complete.\n *\n * See https://docs.commercetools.com/api/predicates/query\n */\nimport perplex from 'perplex'\nimport { ITokenPosition, Parser } from 'pratt'\nimport { haversineDistance } from './haversine'\n\nexport class PredicateError {\n message: string\n\n constructor(message: string) {\n this.message = message\n }\n}\n\ntype MatchFunc = (target: any, variables: VariableMap) => boolean\ntype VariableMap = {\n [key: string]: any\n}\n\nexport const matchesPredicate = (\n predicate: string | string[] | undefined,\n target: any,\n variables?: VariableMap\n): boolean => {\n if (!predicate) {\n return true\n }\n\n if (Array.isArray(predicate)) {\n return predicate.every(item => {\n const func = generateMatchFunc(item)\n return func(target, variables || {})\n })\n } else {\n const func = generateMatchFunc(predicate)\n return func(target, variables || {})\n }\n}\n\nexport const parseQueryExpression = (\n predicate: string | string[]\n): MatchFunc => {\n if (Array.isArray(predicate)) {\n const callbacks = predicate.map(item => generateMatchFunc(item))\n return (target: any, variables: VariableMap) => {\n return callbacks.every(callback => callback(target, variables))\n }\n } else {\n return generateMatchFunc(predicate)\n }\n}\n\ntype Symbol = {\n type: 'var' | 'boolean' | 'string' | 'float' | 'int' | 'identifier'\n value: any\n pos?: ITokenPosition\n}\n\nconst validateSymbol = (val: Symbol) => {\n if (!val.type) {\n throw new PredicateError('Internal error')\n }\n\n if (val.type === 'identifier') {\n const char = val.value.charAt(0)\n const line = val.pos?.start.line\n const column = val.pos?.start.column\n\n throw new PredicateError(\n `Invalid input '${char}', expected input parameter or primitive value (line ${line}, column ${column})`\n )\n }\n}\n\nconst resolveSymbol = (val: Symbol, vars: VariableMap): any => {\n if (val.type === 'var') {\n if (!(val.value in vars)) {\n throw new PredicateError(`Missing parameter value for ${val.value}`)\n }\n return vars[val.value]\n }\n\n return val.value\n}\n\nconst resolveValue = (obj: any, val: Symbol): any => {\n if (val.type !== 'identifier') {\n throw new PredicateError('Internal error')\n }\n\n if (!(val.value in obj)) {\n if (Array.isArray(obj)) {\n return Object.values(obj)\n .filter(v => val.value in v)\n .map(v => v[val.value])\n }\n throw new PredicateError(`The field '${val.value}' does not exist.`)\n }\n\n return obj[val.value]\n}\n\nconst getLexer = (value: string) => {\n return new perplex(value)\n\n .token('AND', /and(?![-_a-z0-9]+)/i)\n .token('OR', /or(?![-_a-z0-9]+)/i)\n .token('NOT', /not(?![-_a-z0-9]+)/i)\n\n .token('WITHIN', /within(?![-_a-z0-9]+)/i)\n .token('IN', /in(?![-_a-z0-9]+)/i)\n .token('MATCHES_IGNORE_CASE', /matches\\s+ignore\\s+case(?![-_a-z0-9]+)/i)\n .token('CONTAINS', /contains(?![-_a-z0-9]+)/i)\n .token('ALL', /all(?![-_a-z0-9]+)/i)\n .token('ANY', /any(?![-_a-z0-9]+)/i)\n .token('EMPTY', /empty(?![-_a-z0-9]+)/i)\n .token('IS', /is(?![-_a-z0-9]+)/i)\n .token('DEFINED', /defined(?![-_a-z0-9]+)/i)\n\n .token('FLOAT', /\\d+\\.\\d+/)\n .token('INT', /\\d+/)\n .token('VARIABLE', /:([-_A-Za-z0-9]+)/)\n .token('IDENTIFIER', /[-_A-Za-z0-9]+/)\n .token('STRING', /\"((?:\\\\.|[^\"\\\\])*)\"/)\n .token('STRING', /'((?:\\\\.|[^'\\\\])*)'/)\n\n .token('COMMA', ',')\n .token('(', '(')\n .token(')', ')')\n .token('>=', '>=')\n .token('<=', '<=')\n .token('>', '>')\n .token('<', '<')\n .token('!=', '!=')\n .token('=', '=')\n .token('\"', '\"')\n .token('WS', /\\s+/, true) // skip\n}\n\n/**\n * This function converts a query expression in to a callable which returns a\n * boolean to indicate if the given object matches or not.\n *\n * This currently parses the predicate each time it is called, but it should be\n * straight-forward to add a query cache (lru-cache)\n */\nconst generateMatchFunc = (predicate: string): MatchFunc => {\n const lexer = getLexer(predicate)\n const parser = new Parser(lexer)\n .builder()\n .nud('IDENTIFIER', 100, t => {\n return {\n type: 'identifier',\n value: t.token.match,\n pos: t.token.strpos(),\n } as Symbol\n })\n .nud('VARIABLE', 100, t => {\n return {\n type: 'var',\n // @ts-ignore\n value: t.token.groups[1],\n pos: t.token.strpos(),\n } as Symbol\n })\n .nud('STRING', 100, t => {\n return {\n type: 'string',\n // @ts-ignore\n value: t.token.groups[1],\n pos: t.token.strpos(),\n } as Symbol\n })\n .nud('INT', 1, t => {\n return {\n type: 'int',\n value: parseInt(t.token.match, 10),\n pos: t.token.strpos(),\n } as Symbol\n })\n .nud('FLOAT', 1, t => {\n return {\n type: 'float',\n value: parseFloat(t.token.match),\n pos: t.token.strpos(),\n } as Symbol\n })\n .nud('NOT', 100, ({ bp }) => {\n const expr = parser.parse({ terminals: [bp - 1] })\n return (obj: any) => {\n return !expr(obj)\n }\n })\n .nud('EMPTY', 10, ({ bp }) => {\n return 'empty'\n })\n .nud('DEFINED', 10, ({ bp }) => {\n return 'defined'\n })\n\n .led('AND', 5, ({ left, bp }) => {\n const expr = parser.parse({ terminals: [bp - 1] })\n return (obj: any) => {\n return left(obj) && expr(obj)\n }\n })\n .led('OR', 5, ({ left, token, bp }) => {\n const expr = parser.parse({ terminals: [bp - 1] })\n return (obj: any, vars: object) => {\n return left(obj, vars) || expr(obj, vars)\n }\n })\n .led('COMMA', 1, ({ left, token, bp }) => {\n const expr: any = parser.parse({ terminals: [bp - 1] })\n if (Array.isArray(expr)) {\n return [left, ...expr]\n } else {\n return [left, expr]\n }\n })\n .nud('(', 100, t => {\n const expr: any = parser.parse({ terminals: [')'] })\n return expr\n })\n .led('(', 100, ({ left, bp }) => {\n const expr = parser.parse()\n lexer.expect(')')\n return (obj: any, vars: object) => {\n const value = resolveValue(obj, left)\n if (value) {\n return expr(value)\n }\n return false\n }\n })\n .bp(')', 0)\n .led('=', 20, ({ left, bp }) => {\n const expr = parser.parse({ terminals: [bp - 1] })\n validateSymbol(expr)\n\n return (obj: any, vars: VariableMap) => {\n const resolvedValue = resolveValue(obj, left)\n const resolvedSymbol = resolveSymbol(expr, vars)\n if (Array.isArray(resolvedValue)) {\n return !!resolvedValue.some(elem => elem === resolvedSymbol)\n }\n return resolvedValue === resolvedSymbol\n }\n })\n .led('!=', 20, ({ left, bp }) => {\n const expr = parser.parse({ terminals: [bp - 1] })\n validateSymbol(expr)\n\n return (obj: any, vars: VariableMap) => {\n return resolveValue(obj, left) !== resolveSymbol(expr, vars)\n }\n })\n .led('>', 20, ({ left, bp }) => {\n const expr = parser.parse({ terminals: [bp - 1] })\n validateSymbol(expr)\n\n return (obj: any, vars: object) => {\n return resolveValue(obj, left) > resolveSymbol(expr, vars)\n }\n })\n .led('>=', 20, ({ left, bp }) => {\n const expr = parser.parse({ terminals: [bp - 1] })\n validateSymbol(expr)\n\n return (obj: any, vars: object) => {\n return resolveValue(obj, left) >= resolveSymbol(expr, vars)\n }\n })\n .led('<', 20, ({ left, bp }) => {\n const expr = parser.parse({ terminals: [bp - 1] })\n validateSymbol(expr)\n\n return (obj: any, vars: object) => {\n return resolveValue(obj, left) < resolveSymbol(expr, vars)\n }\n })\n .led('<=', 20, ({ left, bp }) => {\n const expr = parser.parse({ terminals: [bp - 1] })\n validateSymbol(expr)\n\n return (obj: any, vars: object) => {\n return resolveValue(obj, left) <= resolveSymbol(expr, vars)\n }\n })\n .led('IS', 20, ({ left, bp }) => {\n let invert = false\n\n // Peek if this is a `is not` statement\n const next = lexer.peek()\n if (next.type === 'NOT') {\n invert = true\n lexer.next()\n }\n\n const expr: any = parser.parse({ terminals: [bp - 1] })\n\n switch (expr) {\n case 'empty': {\n if (!invert) {\n return (obj: any, vars: VariableMap) => {\n const val = resolveValue(obj, left)\n return val.length === 0\n }\n } else {\n return (obj: any, vars: VariableMap) => {\n const val = resolveValue(obj, left)\n return val.length !== 0\n }\n }\n }\n case 'defined': {\n if (!invert) {\n return (obj: any, vars: VariableMap) => {\n const val = resolveValue(obj, left)\n return val !== undefined\n }\n } else {\n return (obj: any, vars: VariableMap) => {\n const val = resolveValue(obj, left)\n return val === undefined\n }\n }\n }\n default: {\n throw new Error('Unexpected')\n }\n }\n })\n .led('IN', 20, ({ left, bp }) => {\n const expr = parser.parse({ terminals: [bp - 1] })\n return (obj: any, vars: object) => {\n let symbols = expr\n if (!Array.isArray(symbols)) {\n symbols = [expr]\n }\n\n const inValues = symbols.map((item: Symbol) =>\n resolveSymbol(item, vars)\n )\n return inValues.includes(resolveValue(obj, left))\n }\n })\n .led('MATCHES_IGNORE_CASE', 20, ({ left, bp }) => {\n const expr = parser.parse({ terminals: [bp - 1] })\n validateSymbol(expr)\n\n return (obj: any, vars: VariableMap) => {\n const value = resolveValue(obj, left)\n const other = resolveSymbol(expr, vars)\n\n if (typeof value != 'string') {\n throw new PredicateError(\n `The field '${left.value}' does not support this expression.`\n )\n }\n return value.toLowerCase() === other.toLowerCase()\n }\n })\n .led('WITHIN', 20, ({ left, bp }) => {\n const type = lexer.next()\n\n if (type.match !== 'circle') {\n throw new PredicateError(\n `Invalid input '${type.match}', expected circle`\n )\n }\n\n lexer.expect('(')\n const expr = parser.parse({ terminals: [')'] })\n\n return (obj: any, vars: object) => {\n const value = resolveValue(obj, left)\n if (!value) return false\n\n const maxDistance = resolveSymbol(expr[2], vars)\n const distance = haversineDistance(\n {\n longitude: value[0],\n latitude: value[1],\n },\n {\n longitude: resolveSymbol(expr[0], vars),\n latitude: resolveSymbol(expr[1], vars),\n }\n )\n return distance <= maxDistance\n }\n })\n .led('CONTAINS', 20, ({ left, bp }) => {\n const keyword = lexer.next()\n\n let expr = parser.parse()\n if (!Array.isArray(expr)) {\n expr = [expr]\n }\n\n return (obj: any, vars: object) => {\n const value = resolveValue(obj, left)\n\n if (!Array.isArray(value)) {\n throw new PredicateError(\n `The field '${left.value}' does not support this expression.`\n )\n }\n\n const array = expr.map((item: Symbol) => resolveSymbol(item, vars))\n if (keyword.type === 'ALL') {\n return array.every((item: any) => value.includes(item))\n } else {\n return array.some((item: any) => value.includes(item))\n }\n }\n })\n\n .build()\n\n const result = parser.parse()\n\n if (typeof result !== 'function') {\n const lines = predicate.split('\\n')\n const column = lines[lines.length - 1].length\n\n throw new PredicateError(\n `Unexpected end of input, expected SphereIdentifierChar, comparison ` +\n `operator, not, in, contains, is, within or matches` +\n ` (line ${lines.length}, column ${column})`\n )\n }\n return result\n}\n","import assert from 'assert'\nimport {\n BaseResource,\n Cart,\n Customer,\n CustomObject,\n InventoryEntry,\n Order,\n PagedQueryResponse,\n QueryParam,\n Reference,\n ResourceIdentifier,\n Product,\n Store,\n Type,\n Payment,\n State,\n TaxCategory,\n ShippingMethod,\n ProductType,\n InvalidInputError,\n ProductProjection,\n ShoppingList,\n} from '@commercetools/platform-sdk'\nimport { parseExpandClause } from './lib/expandParser'\nimport { RepositoryTypes, ResourceMap, Writable } from './types'\nimport { parseQueryExpression } from './lib/predicateParser'\nimport { CommercetoolsError } from './exceptions'\n\ntype GetParams = {\n expand?: string[]\n}\n\ntype QueryParams = {\n expand?: string | string[]\n sort?: string | string[]\n limit?: number\n offset?: number\n withTotal?: boolean\n where?: string | string[]\n [key: string]: QueryParam\n}\n\nexport abstract class AbstractStorage {\n abstract clear(): void\n\n abstract assertStorage(typeId: RepositoryTypes): void\n\n abstract all(projectKey: string, typeId: RepositoryTypes): Array<BaseResource>\n\n abstract add<RepositoryTypes extends keyof ResourceMap>(\n projectKey: string,\n typeId: RepositoryTypes,\n obj: ResourceMap[RepositoryTypes]\n ): void\n\n abstract get<RepositoryTypes extends keyof ResourceMap>(\n projectKey: string,\n typeId: RepositoryTypes,\n id: string,\n params: GetParams\n ): ResourceMap[RepositoryTypes] | null\n\n abstract getByKey<RepositoryTypes extends keyof ResourceMap>(\n projectKey: string,\n typeId: RepositoryTypes,\n key: string,\n params: GetParams\n ): ResourceMap[RepositoryTypes] | null\n\n abstract delete(\n projectKey: string,\n typeId: RepositoryTypes,\n id: string,\n params: GetParams\n ): BaseResource | null\n\n abstract query(\n projectKey: string,\n typeId: RepositoryTypes,\n params: QueryParams\n ): PagedQueryResponse\n\n abstract getByResourceIdentifier(\n projectKey: string,\n identifier: ResourceIdentifier\n ): BaseResource | undefined\n}\n\ntype ProjectStorage = Partial<\n {\n [index in RepositoryTypes]: Map<string, BaseResource>\n }\n>\n\nexport class InMemoryStorage extends AbstractStorage {\n protected resources: {\n [projectKey: string]: ProjectStorage\n } = {}\n\n private forProjectKey(projectKey: string) {\n let projectStorage = this.resources[projectKey]\n if (!projectStorage) {\n projectStorage = this.resources[projectKey] = {\n cart: new Map<string, Cart>(),\n customer: new Map<string, Customer>(),\n 'inventory-entry': new Map<string, InventoryEntry>(),\n 'key-value-document': new Map<string, CustomObject>(),\n order: new Map<string, Order>(),\n payment: new Map<string, Payment>(),\n 'product-type': new Map<string, ProductType>(),\n product: new Map<string, Product>(),\n 'product-projection': new Map<string, ProductProjection>(),\n 'shipping-method': new Map<string, ShippingMethod>(),\n state: new Map<string, State>(),\n store: new Map<string, Store>(),\n 'shopping-list': new Map<string, ShoppingList>(),\n 'tax-category': new Map<string, TaxCategory>(),\n type: new Map<string, Type>(),\n }\n }\n return projectStorage\n }\n\n clear() {\n for (const [, projectStorage] of Object.entries(this.resources)) {\n for (const [, value] of Object.entries(projectStorage)) {\n value?.clear()\n }\n }\n }\n\n assertStorage(typeId: RepositoryTypes) {}\n\n all(projectKey: string, typeId: RepositoryTypes) {\n const store = this.forProjectKey(projectKey)[typeId]\n if (store) {\n return Array.from(store.values())\n }\n return []\n }\n\n add<RepositoryTypes extends keyof ResourceMap>(\n projectKey: string,\n typeId: RepositoryTypes,\n obj: ResourceMap[RepositoryTypes],\n params: GetParams = {}\n ): ResourceMap[RepositoryTypes] {\n this.forProjectKey(projectKey)[typeId]?.set(obj.id, obj)\n\n const resource = this.get(projectKey, typeId, obj.id, params)\n assert(resource, `resource of type ${typeId} with id ${obj.id} not created`)\n return resource\n }\n\n get<RepositoryTypes extends keyof ResourceMap>(\n projectKey: string,\n typeId: RepositoryTypes,\n id: string,\n params: GetParams = {}\n ): ResourceMap[RepositoryTypes] | null {\n const resource = this.forProjectKey(projectKey)[typeId]?.get(id)\n if (resource) {\n return this.expand(\n projectKey,\n resource,\n params.expand\n ) as ResourceMap[RepositoryTypes]\n }\n return null\n }\n\n getByKey<RepositoryTypes extends keyof ResourceMap>(\n projectKey: string,\n typeId: RepositoryTypes,\n key: string,\n params: GetParams = {}\n ): ResourceMap[RepositoryTypes] | null {\n const store = this.forProjectKey(projectKey)[typeId]\n if (!store) {\n throw new Error('No type')\n }\n\n const resources: any[] = Array.from(store.values())\n const resource = resources.find(e => e.key === key)\n if (params.expand) return this.expand(projectKey, resource, params.expand)\n return resource\n }\n\n delete(\n projectKey: string,\n typeId: RepositoryTypes,\n id: string,\n params: GetParams = {}\n ): BaseResource | null {\n const resource = this.get(projectKey, typeId, id)\n\n if (resource) {\n this.forProjectKey(projectKey)[typeId]?.delete(id)\n return this.expand(\n projectKey,\n resource,\n params.expand\n ) as ResourceMap[RepositoryTypes]\n }\n return resource\n }\n\n query(\n projectKey: string,\n typeId: RepositoryTypes,\n params: QueryParams\n ): PagedQueryResponse {\n const store = this.forProjectKey(projectKey)[typeId]\n if (!store) {\n throw new Error('No type')\n }\n\n let resources = Array.from(store.values())\n\n // Apply predicates\n if (params.where) {\n try {\n const filterFunc = parseQueryExpression(params.where)\n resources = resources.filter(resource => filterFunc(resource, {}))\n } catch (err) {\n throw new CommercetoolsError<InvalidInputError>(\n {\n code: 'InvalidInput',\n message: err.message,\n },\n 400\n )\n }\n }\n\n // Get the total before slicing the array\n const totalResources = resources.length\n\n // Apply offset, limit\n const offset = params.offset || 0\n const limit = params.limit || 20\n resources = resources.slice(offset, offset + limit)\n\n // Expand the resources\n if (params.expand !== undefined) {\n resources = resources.map(resource => {\n return this.expand(projectKey, resource, params.expand)\n })\n }\n\n return {\n count: totalResources,\n total: resources.length,\n offset: offset,\n limit: limit,\n results: resources,\n }\n }\n\n getByResourceIdentifier<RepositoryTypes extends keyof ResourceMap>(\n projectKey: string,\n identifier: ResourceIdentifier\n ): ResourceMap[RepositoryTypes] | undefined {\n if (identifier.id) {\n const resource = this.get(projectKey, identifier.typeId, identifier.id)\n if (resource) {\n return resource as ResourceMap[RepositoryTypes]\n }\n console.error(\n `No resource found with typeId=${identifier.typeId}, id=${identifier.id}`\n )\n return undefined\n }\n\n if (identifier.key) {\n const store = this.forProjectKey(projectKey)[identifier.typeId]\n\n if (store) {\n // TODO: BaseResource has no key attribute, but the subclasses should\n // have them all.\n const resource = Array.from(store.values()).find(\n // @ts-ignore\n r => r.key === identifier.key\n )\n if (resource) {\n return resource as ResourceMap[RepositoryTypes]\n }\n } else {\n throw new Error(\n `No storage found for resource type: ${identifier.typeId}`\n )\n }\n }\n return undefined\n }\n\n private expand = <T>(\n projectKey: string,\n obj: T,\n clause: undefined | string | string[]\n ): T => {\n if (!clause) return obj\n const newObj = JSON.parse(JSON.stringify(obj))\n if (Array.isArray(clause)) {\n clause.forEach(c => {\n this._resolveResource(projectKey, newObj, c)\n })\n } else {\n this._resolveResource(projectKey, newObj, clause)\n }\n return newObj\n }\n\n private _resolveResource = (projectKey: string, obj: any, expand: string) => {\n const params = parseExpandClause(expand)\n\n if (!params.index) {\n const reference = obj[params.element]\n if (reference === undefined) {\n return\n }\n this._resolveReference(projectKey, reference, params.rest)\n } else if (params.index === '*') {\n const reference = obj[params.element]\n if (reference === undefined || !Array.isArray(reference)) return\n reference.forEach((itemRef: Writable<Reference>) => {\n this._resolveReference(projectKey, itemRef, params.rest)\n })\n } else {\n const reference = obj[params.element][params.index]\n if (reference === undefined) return\n this._resolveReference(projectKey, reference, params.rest)\n }\n }\n\n private _resolveReference(\n projectKey: string,\n reference: any,\n expand: string | undefined\n ) {\n if (reference === undefined) return\n\n if (\n reference.typeId !== undefined &&\n (reference.id !== undefined || reference.key !== undefined)\n ) {\n // @ts-ignore\n reference.obj = this.getByResourceIdentifier(projectKey, {\n typeId: reference.typeId,\n id: reference.id,\n key: reference.key,\n } as ResourceIdentifier)\n if (expand) {\n this._resolveResource(projectKey, reference.obj, expand)\n }\n } else {\n if (expand) {\n this._resolveResource(projectKey, reference, expand)\n }\n }\n }\n}\n","import { Type, TypeDraft, ReferenceTypeId } from '@commercetools/platform-sdk'\nimport { getBaseResourceProperties } from '../helpers'\nimport AbstractRepository from './abstract'\n\nexport class TypeRepository extends AbstractRepository {\n getTypeId(): ReferenceTypeId {\n return 'type'\n }\n\n create(projectKey: string, draft: TypeDraft): Type {\n const resource: Type = {\n ...getBaseResourceProperties(),\n key: draft.key,\n name: draft.name,\n resourceTypeIds: draft.resourceTypeIds,\n fieldDefinitions: draft.fieldDefinitions || [],\n description: draft.description,\n }\n this.save(projectKey, resource)\n return resource\n }\n}\n","import AbstractService from './abstract'\nimport { Router } from 'express'\nimport { TypeRepository } from '../repositories/type'\nimport { AbstractStorage } from '../storage'\n\nexport class TypeService extends AbstractService {\n public repository: TypeRepository\n\n constructor(parent: Router, storage: AbstractStorage) {\n super(parent)\n this.repository = new TypeRepository(storage)\n }\n\n getBasePath() {\n return 'types'\n }\n}\n","import {\n CustomObject,\n CustomObjectDraft,\n ReferenceTypeId,\n} from '@commercetools/platform-sdk'\nimport { checkConcurrentModification } from './errors'\nimport AbstractRepository from './abstract'\nimport { Writable } from '../types'\nimport { getBaseResourceProperties } from '../helpers'\n\nexport class CustomObjectRepository extends AbstractRepository {\n getTypeId(): ReferenceTypeId {\n return 'key-value-document'\n }\n\n create(projectKey: string, draft: Writable<CustomObjectDraft>): CustomObject {\n const current = this.getWithContainerAndKey(\n projectKey,\n draft.container,\n draft.key\n )\n\n const baseProperties = getBaseResourceProperties()\n if (current) {\n baseProperties.id = current.id\n\n if (!draft.version) {\n draft.version = current.version\n }\n\n checkConcurrentModification(current, draft.version)\n if (draft.value === current.value) {\n return current\n }\n\n baseProperties.version = current.version\n } else {\n if (draft.version) {\n baseProperties.version = draft.version\n }\n }\n\n const resource: CustomObject = {\n ...baseProperties,\n container: draft.container,\n key: draft.key,\n value: draft.value,\n }\n\n this.save(projectKey, resource)\n return resource\n }\n\n getWithContainerAndKey(projectKey: string, container: string, key: string) {\n const items = this._storage.all(projectKey, this.getTypeId()) as Array<\n CustomObject\n >\n return items.find(item => item.container === container && item.key === key)\n }\n}\n","import AbstractService from './abstract'\nimport { Request, Response, Router } from 'express'\nimport { CustomObjectRepository } from '../repositories/custom-object'\nimport { AbstractStorage } from '../storage'\nimport { CustomObjectDraft } from '@commercetools/platform-sdk'\n\nexport class CustomObjectService extends AbstractService {\n public repository: CustomObjectRepository\n\n constructor(parent: Router, storage: AbstractStorage) {\n super(parent)\n this.repository = new CustomObjectRepository(storage)\n }\n\n getBasePath() {\n return 'custom-objects'\n }\n\n extraRoutes(router: Router) {\n router.get('/:container/:key', this.getWithContainerAndKey.bind(this))\n router.post('/:container/:key', this.createWithContainerAndKey.bind(this))\n router.delete('/:container/:key', this.deleteWithContainerAndKey.bind(this))\n }\n\n getWithContainerAndKey(request: Request, response: Response) {\n const result = this.repository.getWithContainerAndKey(\n request.params.projectKey,\n request.params.container,\n request.params.key\n )\n\n if (!result) {\n return response.status(404).send('Not Found')\n }\n return response.status(200).send(result)\n }\n\n createWithContainerAndKey(request: Request, response: Response) {\n const draft: CustomObjectDraft = {\n ...request.body,\n key: request.params.key,\n container: request.params.container,\n }\n\n const result = this.repository.create(request.params.projectKey, draft)\n return response.status(200).send(result)\n }\n\n deleteWithContainerAndKey(request: Request, response: Response) {\n const current = this.repository.getWithContainerAndKey(\n request.params.projectKey,\n request.params.container,\n request.params.key\n )\n\n if (!current) {\n return response.status(404).send('Not Found')\n }\n\n const result = this.repository.delete(request.params.projectKey, current.id)\n\n return response.status(200).send(result)\n }\n}\n","import {\n Customer,\n CustomerDraft,\n ReferenceTypeId,\n} from '@commercetools/platform-sdk'\nimport { getBaseResourceProperties } from '../helpers'\nimport AbstractRepository from './abstract'\n\nexport class CustomerRepository extends AbstractRepository {\n getTypeId(): ReferenceTypeId {\n return 'customer'\n }\n create(projectKey: string, draft: CustomerDraft): Customer {\n const resource: Customer = {\n ...getBaseResourceProperties(),\n email: draft.email,\n password: draft.password,\n isEmailVerified: draft.isEmailVerified || false,\n addresses: [],\n }\n this.save(projectKey, resource)\n return resource\n }\n}\n","import AbstractService from './abstract'\nimport { Router } from 'express'\nimport { CustomerRepository } from '../repositories/customer'\nimport { AbstractStorage } from '../storage'\n\nexport class CustomerService extends AbstractService {\n public repository: CustomerRepository\n\n constructor(parent: Router, storage: AbstractStorage) {\n super(parent)\n this.repository = new CustomerRepository(storage)\n }\n\n getBasePath() {\n return 'customers'\n }\n}\n","import { Cart, CartDraft, ReferenceTypeId } from '@commercetools/platform-sdk'\nimport { getBaseResourceProperties } from '../helpers'\nimport AbstractRepository from './abstract'\nimport { createCustomFields } from './helpers'\n\nexport class CartRepository extends AbstractRepository {\n getTypeId(): ReferenceTypeId {\n return 'cart'\n }\n\n create(projectKey: string, draft: CartDraft): Cart {\n const resource: Cart = {\n ...getBaseResourceProperties(),\n cartState: 'Active',\n lineItems: [],\n customLineItems: [],\n totalPrice: {\n type: 'centPrecision',\n centAmount: 0,\n currencyCode: draft.currency,\n fractionDigits: 0,\n },\n taxMode: 'Platform',\n taxRoundingMode: 'HalfEven',\n taxCalculationMode: 'LineItemLevel',\n refusedGifts: [],\n origin: 'Customer',\n custom: createCustomFields(draft.custom, projectKey, this._storage),\n }\n this.save(projectKey, resource)\n return resource\n }\n}\n","import AbstractService from './abstract'\nimport { Router } from 'express'\nimport { CartRepository } from '../repositories/cart'\nimport { AbstractStorage } from '../storage'\n\nexport class CartService extends AbstractService {\n public repository: CartRepository\n\n constructor(parent: Router, storage: AbstractStorage) {\n super(parent)\n this.repository = new CartRepository(storage)\n }\n\n getBasePath() {\n return 'carts'\n }\n}\n","import {\n InventoryEntry,\n InventoryEntryChangeQuantityAction,\n InventoryEntryDraft,\n InventoryEntrySetCustomFieldAction,\n InventoryEntrySetCustomTypeAction,\n InventoryEntrySetExpectedDeliveryAction,\n InventoryEntrySetRestockableInDaysAction,\n ReferenceTypeId,\n} from '@commercetools/platform-sdk'\nimport { getBaseResourceProperties } from '../helpers'\nimport AbstractRepository from './abstract'\nimport { createCustomFields } from './helpers'\nimport { Writable } from '../types'\n\nexport class InventoryEntryRepository extends AbstractRepository {\n getTypeId(): ReferenceTypeId {\n return 'inventory-entry'\n }\n\n create(projectKey: string, draft: InventoryEntryDraft): InventoryEntry {\n const resource: InventoryEntry = {\n ...getBaseResourceProperties(),\n sku: draft.sku,\n quantityOnStock: draft.quantityOnStock,\n availableQuantity: draft.quantityOnStock,\n expectedDelivery: draft.expectedDelivery,\n restockableInDays: draft.restockableInDays,\n supplyChannel: {\n ...draft.supplyChannel,\n typeId: 'channel',\n id: draft.supplyChannel?.id ?? '',\n },\n custom: createCustomFields(draft.custom, projectKey, this._storage),\n }\n this.save(projectKey, resource)\n return resource\n }\n\n actions = {\n changeQuantity: (\n projectKey: string,\n resource: Writable<InventoryEntry>,\n { quantity }: InventoryEntryChangeQuantityAction\n ) => {\n resource.quantityOnStock = quantity\n // don't know active reservations so just set to same value\n resource.availableQuantity = quantity\n },\n setExpectedDelivery: (\n projectKey: string,\n resource: Writable<InventoryEntry>,\n { expectedDelivery }: InventoryEntrySetExpectedDeliveryAction\n ) => {\n resource.expectedDelivery = new Date(expectedDelivery!).toISOString()\n },\n setCustomField: (\n projectKey: string,\n resource: InventoryEntry,\n { name, value }: InventoryEntrySetCustomFieldAction\n ) => {\n if (!resource.custom) {\n throw new Error('Resource has no custom field')\n }\n resource.custom.fields[name] = value\n },\n setCustomType: (\n projectKey: string,\n resource: Writable<InventoryEntry>,\n { type, fields }: InventoryEntrySetCustomTypeAction\n ) => {\n if (!type) {\n resource.custom = undefined\n } else {\n const resolvedType = this._storage.getByResourceIdentifier(\n projectKey,\n type\n )\n if (!resolvedType) {\n throw new Error(`Type ${type} not found`)\n }\n\n resource.custom = {\n type: {\n typeId: 'type',\n id: resolvedType.id,\n },\n fields: fields || [],\n }\n }\n },\n setRestockableInDays: (\n projectKey: string,\n resource: Writable<InventoryEntry>,\n { restockableInDays }: InventoryEntrySetRestockableInDaysAction\n ) => {\n resource.restockableInDays = restockableInDays\n },\n }\n}\n","import AbstractService from './abstract'\nimport { Router } from 'express'\nimport { AbstractStorage } from '../storage'\nimport { InventoryEntryRepository } from '../repositories/inventory-entry'\n\nexport class InventoryEntryService extends AbstractService {\n public repository: InventoryEntryRepository\n\n constructor(parent: Router, storage: AbstractStorage) {\n super(parent)\n this.repository = new InventoryEntryRepository(storage)\n }\n\n getBasePath() {\n return 'inventory'\n }\n}\n","import assert from 'assert'\nimport {\n Cart,\n CustomLineItem,\n CustomLineItemDraft,\n GeneralError,\n LineItem,\n LineItemImportDraft,\n Order,\n OrderAddPaymentAction,\n OrderChangeOrderStateAction,\n OrderChangePaymentStateAction,\n OrderFromCartDraft,\n OrderImportDraft,\n OrderSetBillingAddressAction,\n OrderSetCustomerEmailAction,\n OrderSetCustomFieldAction,\n OrderSetCustomTypeAction,\n OrderSetLocaleAction,\n OrderSetOrderNumberAction,\n OrderSetShippingAddressAction,\n OrderSetStoreAction,\n Product,\n ProductPagedQueryResponse,\n ProductVariant,\n ReferenceTypeId,\n Store,\n} from '@commercetools/platform-sdk'\nimport AbstractRepository, { QueryParams } from './abstract'\nimport {\n createCustomFields,\n createPrice,\n createTypedMoney,\n resolveStoreReference,\n} from './helpers'\nimport { Writable } from '../types'\nimport { getBaseResourceProperties } from '../helpers'\nimport { CommercetoolsError } from '../exceptions'\n\nexport class OrderRepository extends AbstractRepository {\n getTypeId(): ReferenceTypeId {\n return 'order'\n }\n\n create(projectKey: string, draft: OrderFromCartDraft): Order {\n assert(draft.cart, 'draft.cart is missing')\n\n const cart = this._storage.getByResourceIdentifier(\n projectKey,\n draft.cart\n ) as Cart | null\n if (!cart) {\n throw new Error('Cannot find cart')\n }\n\n const resource: Order = {\n ...getBaseResourceProperties(),\n orderNumber: draft.orderNumber,\n orderState: 'Open',\n lineItems: [],\n customLineItems: [],\n totalPrice: cart.totalPrice,\n refusedGifts: [],\n origin: 'Customer',\n syncInfo: [],\n lastMessageSequenceNumber: 0,\n }\n this.save(projectKey, resource)\n return resource\n }\n\n import(projectKey: string, draft: OrderImportDraft): Order {\n // TODO: Check if order with given orderNumber already exists\n assert(this, 'OrderRepository not valid')\n const resource: Order = {\n ...getBaseResourceProperties(),\n\n billingAddress: draft.billingAddress,\n shippingAddress: draft.shippingAddress,\n\n custom: createCustomFields(draft.custom, projectKey, this._storage),\n customerEmail: draft.customerEmail,\n lastMessageSequenceNumber: 0,\n orderNumber: draft.orderNumber,\n orderState: draft.orderState || 'Open',\n origin: draft.origin || 'Customer',\n paymentState: draft.paymentState,\n refusedGifts: [],\n store: resolveStoreReference(draft.store, projectKey, this._storage),\n syncInfo: [],\n\n lineItems:\n draft.lineItems?.map(item =>\n this.lineItemFromImportDraft.bind(this)(projectKey, item)\n ) || [],\n customLineItems:\n draft.customLineItems?.map(item =>\n this.customLineItemFromImportDraft.bind(this)(projectKey, item)\n ) || [],\n\n totalPrice: {\n type: 'centPrecision',\n ...draft.totalPrice,\n fractionDigits: 2,\n },\n }\n this.save(projectKey, resource)\n return resource\n }\n\n private lineItemFromImportDraft(\n projectKey: string,\n draft: LineItemImportDraft\n ): LineItem {\n let product: Product\n let variant: ProductVariant | undefined\n\n if (draft.variant.sku) {\n variant = {\n id: 0,\n sku: draft.variant.sku,\n }\n\n var items = this._storage.query(projectKey, 'product', {\n where: [\n `masterData(current(masterVariant(sku=\"${draft.variant.sku}\"))) or masterData(current(variants(sku=\"${draft.variant.sku}\")))`,\n ],\n }) as ProductPagedQueryResponse\n\n if (items.count !== 1) {\n throw new CommercetoolsError<GeneralError>({\n code: 'General',\n message: `A product containing a variant with SKU '${draft.variant.sku}' not found.`,\n })\n }\n\n product = items.results[0]\n if (product.masterData.current.masterVariant.sku === draft.variant.sku) {\n variant = product.masterData.current.masterVariant\n } else {\n variant = product.masterData.current.variants.find(\n v => v.sku === draft.variant.sku\n )\n }\n if (!variant) {\n throw new Error('Internal state error')\n }\n } else {\n throw new Error('No product found')\n }\n\n const lineItem: LineItem = {\n ...getBaseResourceProperties(),\n custom: createCustomFields(draft.custom, projectKey, this._storage),\n discountedPricePerQuantity: [],\n lineItemMode: 'Standard',\n name: draft.name,\n price: createPrice(draft.price),\n priceMode: 'Platform',\n productId: product.id,\n productType: product.productType,\n quantity: draft.quantity,\n state: draft.state || [],\n taxRate: draft.taxRate,\n totalPrice: createTypedMoney(draft.price.value),\n variant: {\n id: variant.id,\n sku: variant.sku,\n price: createPrice(draft.price),\n },\n }\n\n return lineItem\n }\n\n private customLineItemFromImportDraft(\n projectKey: string,\n draft: CustomLineItemDraft\n ): CustomLineItem {\n const lineItem: CustomLineItem = {\n ...getBaseResourceProperties(),\n custom: createCustomFields(draft.custom, projectKey, this._storage),\n discountedPricePerQuantity: [],\n money: createTypedMoney(draft.money),\n name: draft.name,\n quantity: draft.quantity,\n slug: draft.slug,\n state: [],\n totalPrice: createTypedMoney(draft.money),\n }\n\n return lineItem\n }\n\n getWithOrderNumber(\n projectKey: string,\n orderNumber: string,\n params: QueryParams = {}\n ): Order | undefined {\n const result = this._storage.query(projectKey, this.getTypeId(), {\n ...params,\n where: [`orderNumber=\"${orderNumber}\"`],\n })\n if (result.count === 1) {\n return result.results[0] as Order\n }\n\n // Catch this for now, should be checked when creating/updating\n if (result.count > 1) {\n throw new Error('Duplicate order numbers')\n }\n\n return\n }\n\n actions = {\n addPayment: (\n projectKey: string,\n resource: Writable<Order>,\n { payment }: OrderAddPaymentAction\n ) => {\n const resolvedPayment = this._storage.getByResourceIdentifier(\n projectKey,\n payment\n )\n if (!resolvedPayment) {\n throw new Error(`Payment ${payment.id} not found`)\n }\n\n if (!resource.paymentInfo) {\n resource.paymentInfo = {\n payments: [],\n }\n }\n\n resource.paymentInfo.payments.push({\n typeId: 'payment',\n id: payment.id!,\n })\n },\n changeOrderState: (\n projectKey: string,\n resource: Writable<Order>,\n { orderState }: OrderChangeOrderStateAction\n ) => {\n resource.orderState = orderState\n },\n changePaymentState: (\n projectKey: string,\n resource: Writable<Order>,\n { paymentState }: OrderChangePaymentStateAction\n ) => {\n resource.paymentState = paymentState\n },\n setBillingAddress: (\n projectKey: string,\n resource: Writable<Order>,\n { address }: OrderSetBillingAddressAction\n ) => {\n resource.billingAddress = address\n },\n setCustomerEmail: (\n projectKey: string,\n resource: Writable<Order>,\n { email }: OrderSetCustomerEmailAction\n ) => {\n resource.customerEmail = email\n },\n setCustomField: (\n projectKey: string,\n resource: Order,\n { name, value }: OrderSetCustomFieldAction\n ) => {\n if (!resource.custom) {\n throw new Error('Resource has no custom field')\n }\n resource.custom.fields[name] = value\n },\n setCustomType: (\n projectKey: string,\n resource: Writable<Order>,\n { type, fields }: OrderSetCustomTypeAction\n ) => {\n if (!type) {\n resource.custom = undefined\n } else {\n const resolvedType = this._storage.getByResourceIdentifier(\n projectKey,\n type\n )\n if (!resolvedType) {\n throw new Error(`Type ${type} not found`)\n }\n\n resource.custom = {\n type: {\n typeId: 'type',\n id: resolvedType.id,\n },\n fields: fields || [],\n }\n }\n },\n setLocale: (\n projectKey: string,\n resource: Writable<Order>,\n { locale }: OrderSetLocaleAction\n ) => {\n resource.locale = locale\n },\n setOrderNumber: (\n projectKey: string,\n resource: Writable<Order>,\n { orderNumber }: OrderSetOrderNumberAction\n ) => {\n resource.orderNumber = orderNumber\n },\n setShippingAddress: (\n projectKey: string,\n resource: Writable<Order>,\n { address }: OrderSetShippingAddressAction\n ) => {\n resource.shippingAddress = address\n },\n setStore: (\n projectKey: string,\n resource: Writable<Order>,\n { store }: OrderSetStoreAction\n ) => {\n if (!store) return\n const resolvedType = this._storage.getByResourceIdentifier(\n projectKey,\n store\n )\n if (!resolvedType) {\n throw new Error(`No store found with key=${store.key}`)\n }\n\n const storeReference = resolvedType as Store\n resource.store = {\n typeId: 'store',\n key: storeReference.key,\n }\n },\n }\n}\n","import AbstractService from './abstract'\nimport { Request, Response, Router } from 'express'\nimport { OrderRepository } from '../repositories/order'\nimport { AbstractStorage } from '../storage'\n\nexport class OrderService extends AbstractService {\n public repository: OrderRepository\n\n constructor(parent: Router, storage: AbstractStorage) {\n super(parent)\n this.repository = new OrderRepository(storage)\n }\n\n getBasePath() {\n return 'orders'\n }\n\n extraRoutes(router: Router) {\n router.post('/import', this.import.bind(this))\n router.get('/order-number=:orderNumber', this.getWithOrderNumber.bind(this))\n }\n\n import(request: Request, response: Response) {\n const importDraft = request.body\n const resource = this.repository.import(\n request.params.projectKey,\n importDraft\n )\n return response.status(200).send(resource)\n }\n\n getWithOrderNumber(request: Request, response: Response) {\n const resource = this.repository.getWithOrderNumber(\n request.params.projectKey,\n request.params.orderNumber,\n request.query\n )\n if (resource) {\n return response.status(200).send(resource)\n }\n return response.status(404).send('Not found')\n }\n}\n","import { Store, StoreDraft, ReferenceTypeId } from '@commercetools/platform-sdk'\nimport { getBaseResourceProperties } from '../helpers'\nimport AbstractRepository from './abstract'\n\nexport class StoreRepository extends AbstractRepository {\n getTypeId(): ReferenceTypeId {\n return 'store'\n }\n\n create(projectKey: string, draft: StoreDraft): Store {\n const resource: Store = {\n ...getBaseResourceProperties(),\n key: draft.key,\n distributionChannels: [],\n }\n this.save(projectKey, resource)\n return resource\n }\n}\n","import AbstractService from './abstract'\nimport { Router } from 'express'\nimport { StoreRepository } from '../repositories/store'\nimport { AbstractStorage } from '../storage'\n\nexport class StoreService extends AbstractService {\n public repository: StoreRepository\n\n constructor(parent: Router, storage: AbstractStorage) {\n super(parent)\n this.repository = new StoreRepository(storage)\n }\n\n getBasePath() {\n return 'stores'\n }\n}\n","import { randomBytes } from 'crypto'\n\ntype Token = {\n access_token: string\n token_type: 'Bearer'\n expires_in: number\n scope: string\n}\n\nexport class OAuth2Store {\n tokens: Token[] = []\n validate: Boolean = true\n\n constructor(validate: Boolean = true) {\n this.validate = validate\n }\n\n getClientToken(clientId: string, clientSecret: string, scope?: string) {\n const token: Token = {\n access_token: randomBytes(16).toString('base64'),\n token_type: 'Bearer',\n expires_in: 172800,\n scope: scope || 'todo',\n }\n this.tokens.push(token)\n return token\n }\n\n validateToken(token: string) {\n if (!this.validate) return true\n\n const foundToken = this.tokens.find(t => t.access_token === token)\n if (foundToken) {\n return true\n }\n return false\n }\n}\n","import { Request } from 'express'\n\nexport const getBearerToken = (request: Request): string | undefined => {\n const authHeader = request.header('Authorization')\n const match = authHeader?.match(/^Bearer\\s(?<token>[^\\s]+)$/)\n if (match) {\n return match.groups?.token\n }\n return undefined\n}\n","import auth from 'basic-auth'\nimport express, { NextFunction, Request, Response } from 'express'\nimport {\n AccessDeniedError,\n InvalidTokenError,\n} from '@commercetools/platform-sdk'\nimport { CommercetoolsError, InvalidRequestError } from '../exceptions'\nimport { InvalidClientError, UnsupportedGrantType } from './errors'\nimport { OAuth2Store } from './store'\nimport { getBearerToken } from './helpers'\n\nexport class OAuth2Server {\n store: OAuth2Store\n\n constructor(options: { enabled: boolean; validate: boolean }) {\n this.store = new OAuth2Store(options.validate)\n }\n\n createRouter() {\n const router = express.Router()\n router.post('/token', this.tokenHandler.bind(this))\n return router\n }\n\n createMiddleware() {\n return async (request: Request, response: Response, next: NextFunction) => {\n const token = getBearerToken(request)\n if (!token) {\n next(\n new CommercetoolsError<AccessDeniedError>(\n {\n code: 'access_denied',\n message:\n 'This endpoint requires an access token. You can get one from the authorization server.',\n },\n 401\n )\n )\n }\n\n if (!token || !this.store.validateToken(token)) {\n next(\n new CommercetoolsError<InvalidTokenError>(\n {\n code: 'invalid_token',\n message: 'invalid_token',\n },\n 401\n )\n )\n }\n\n next()\n }\n }\n async tokenHandler(request: Request, response: Response, next: NextFunction) {\n const authHeader = request.header('Authorization')\n if (!authHeader) {\n return next(\n new CommercetoolsError<InvalidClientError>(\n {\n code: 'invalid_client',\n message:\n 'Please provide valid client credentials using HTTP Basic Authentication.',\n },\n 401\n )\n )\n }\n const credentials = auth.parse(authHeader)\n if (!credentials) {\n return next(\n new CommercetoolsError<InvalidClientError>(\n {\n code: 'invalid_client',\n message:\n 'Please provide valid client credentials using HTTP Basic Authentication.',\n },\n 400\n )\n )\n }\n\n const grantType = request.query.grant_type\n if (!grantType) {\n return next(\n new CommercetoolsError<InvalidRequestError>(\n {\n code: 'invalid_request',\n message: 'Missing required parameter: grant_type.',\n },\n 400\n )\n )\n }\n\n if (grantType === 'client_credentials') {\n const token = this.store.getClientToken(\n credentials.name,\n credentials.pass,\n request.query.scope?.toString()\n )\n return response.status(200).send(token)\n } else {\n return next(\n new CommercetoolsError<UnsupportedGrantType>(\n {\n code: 'unsupported_grant_type',\n message: `Invalid parameter: grant_type: Invalid grant type: ${grantType}`,\n },\n 400\n )\n )\n }\n }\n}\n","export const DEFAULT_API_HOSTNAME = /^https:\\/\\/api\\..*?\\.commercetools.com:443$/\nexport const DEFAULT_AUTH_HOSTNAME = /^https:\\/\\/auth\\..*?\\.commercetools.com:443$/\n","import { getBaseResourceProperties } from './helpers'\nimport { AbstractStorage } from './storage'\nimport { RepositoryMap, ResourceMap, Services } from './types'\n\nexport class ProjectAPI {\n private projectKey: string\n private _storage: AbstractStorage\n private _services: Services\n\n constructor(\n projectKey: string,\n services: Services,\n storage: AbstractStorage\n ) {\n this.projectKey = projectKey\n this._storage = storage\n this._services = services\n }\n\n add<ReferenceTypeId extends keyof ResourceMap>(\n typeId: ReferenceTypeId | 'custom-object',\n resource: ResourceMap[ReferenceTypeId]\n ) {\n //@ts-ignore\n if (typeId === 'custom-object') typeId = 'key-value-document'\n\n const parsedTypeId = typeId as ReferenceTypeId\n\n const service = this._services[parsedTypeId]\n if (service) {\n this._storage.add(this.projectKey, parsedTypeId, {\n ...getBaseResourceProperties(),\n ...resource,\n })\n } else {\n throw new Error(`Service for ${typeId} not implemented yet`)\n }\n }\n\n get<ReferenceTypeId extends keyof ResourceMap>(\n typeId: ReferenceTypeId,\n id: string\n ): ResourceMap[ReferenceTypeId] {\n return this._storage.get(\n this.projectKey,\n typeId,\n id,\n {}\n ) as ResourceMap[ReferenceTypeId]\n }\n\n // TODO: Not sure if we want to expose this...\n getRepository<ReferenceTypeId extends keyof RepositoryMap>(\n typeId: ReferenceTypeId\n ): RepositoryMap[ReferenceTypeId] {\n const service = this._services[typeId]\n if (service !== undefined) {\n return service.repository as RepositoryMap[ReferenceTypeId]\n }\n throw new Error('No such repository')\n }\n}\n","export const copyHeaders = (headers: Record<string, string>) => {\n const validHeaders = ['accept', 'host', 'authorization']\n const result: Record<string, string> = {}\n\n Object.entries(headers).forEach(([key, value]) => {\n if (validHeaders.includes(key.toLowerCase())) {\n result[key] = value\n }\n })\n\n return result\n}\n","import {\n Product,\n ProductData,\n ProductDraft,\n ProductPublishAction,\n ProductSetAttributeAction,\n ProductVariant,\n ProductVariantDraft,\n ReferenceTypeId,\n} from '@commercetools/platform-sdk'\nimport { getBaseResourceProperties } from '../helpers'\nimport AbstractRepository from './abstract'\nimport { Writable } from '../types'\n\nexport class ProductRepository extends AbstractRepository {\n getTypeId(): ReferenceTypeId {\n return 'product'\n }\n\n create(projectKey: string, draft: ProductDraft): Product {\n const productData = {\n name: draft.name,\n slug: draft.slug,\n categories: [],\n masterVariant:\n draft.masterVariant && variantFromDraft(0, draft.masterVariant!),\n variants:\n draft.variants &&\n draft.variants.map((variant, index) => {\n return variantFromDraft(index + 1, variant)\n }),\n\n // @ts-ignore\n searchKeywords: draft.searchKeywords,\n }\n\n const resource: Product = {\n ...getBaseResourceProperties(),\n masterData: {\n // @ts-ignore\n current: draft.publish ? productData : undefined,\n // @ts-ignore\n staged: draft.publish ? undefined : productData,\n hasStagedChanges: draft.publish ?? true,\n published: draft.publish ?? false,\n },\n }\n\n this.save(projectKey, resource)\n\n return resource\n }\n\n actions = {\n publish: (\n projectKey: string,\n resource: Writable<Product>,\n { scope }: ProductPublishAction\n ) => {\n if (resource.masterData.staged) {\n resource.masterData.current = resource.masterData.staged\n // @ts-ignore\n resource.masterData.staged = undefined\n }\n resource.masterData.hasStagedChanges = false\n resource.masterData.published = true\n },\n setAttribute: (\n projectKey: string,\n resource: Writable<Product>,\n { variantId, sku, name, value, staged }: ProductSetAttributeAction\n ) => {\n const isStaged = staged !== undefined ? staged : false\n const productData = getProductData(resource, isStaged)\n const { variant, isMasterVariant, variantIndex } = getVariant(\n productData,\n variantId,\n sku\n )\n if (!variant) {\n throw new Error(\n `Variant with id ${variantId} or sku ${sku} not found on product ${resource.id}`\n )\n }\n\n if (!variant.attributes) {\n variant.attributes = []\n }\n\n const existingAttr = variant.attributes.find(attr => attr.name === name)\n if (existingAttr) {\n existingAttr.value = value\n } else {\n variant.attributes.push({\n name,\n value,\n })\n }\n if (isStaged) {\n resource.masterData.staged = productData\n if (isMasterVariant) {\n resource.masterData.staged.masterVariant = variant\n } else {\n resource.masterData.staged.variants[variantIndex] = variant\n }\n resource.masterData.hasStagedChanges = true\n } else {\n resource.masterData.current = productData\n if (isMasterVariant) {\n resource.masterData.current.masterVariant = variant\n } else {\n resource.masterData.current.variants[variantIndex] = variant\n }\n }\n },\n // 'setKey': () => {},\n // 'changeName': () => {},\n // 'setDescription': () => {},\n // 'changeSlug': () => {},\n // 'addVariant': () => {},\n // 'removeVariant': () => {},\n // 'changeMasterVariant': () => {},\n // 'addPrice': () => {},\n // 'setPrices': () => {},\n // 'changePrice': () => {},\n // 'removePrice': () => {},\n // 'setProductPriceCustomType': () => {},\n // 'setProductPriceCustomField': () => {},\n // 'setDiscountedPrice': () => {},\n // 'setAttributeInAllVariants': () => {},\n // 'addToCategory': () => {},\n // 'setCategoryOrderHint': () => {},\n // 'removeFromCategory': () => {},\n // 'setTaxCategory': () => {},\n // 'setSku': () => {},\n // 'setProductVariantKey': () => {},\n // 'addExternalImage': () => {},\n // 'moveImageToPosition': () => {},\n // 'removeImage': () => {},\n // 'setImageLabel': () => {},\n // 'addAsset': () => {},\n // 'removeAsset': () => {},\n // 'setAssetKey': () => {},\n // 'changeAssetOrder': () => {},\n // 'changeAssetName': () => {},\n // 'setAssetDescription': () => {},\n // 'setAssetTags': () => {},\n // 'setAssetSources': () => {},\n // 'setAssetCustomType': () => {},\n // 'setAssetCustomField': () => {},\n // 'setSearchKeywords': () => {},\n // 'setMetaTitle': () => {},\n // 'setMetaDescription': () => {},\n // 'setMetaKeywords': () => {},\n // 'revertStagedChanges': () => {},\n // 'revertStagedVariantChanges': () => {},\n // 'unpublish': () => {},\n // 'transitionState': () => {},\n }\n}\n\nconst getProductData = (product: Product, staged: boolean) => {\n if (!staged && product.masterData.current) {\n return product.masterData.current\n }\n return product.masterData.staged\n}\n\ninterface VariantResult {\n variant: Writable<ProductVariant> | undefined\n isMasterVariant: boolean\n variantIndex: number\n}\n\nconst getVariant = (\n productData: ProductData,\n variantId?: number,\n sku?: string\n): VariantResult => {\n const variants = [productData.masterVariant, ...productData.variants]\n const foundVariant = variants.find((variant: ProductVariant) => {\n if (variantId) {\n return variant.id === variantId\n }\n if (sku) {\n return variant.sku === sku\n }\n return false\n })\n\n const isMasterVariant = foundVariant === productData.masterVariant\n return {\n variant: foundVariant,\n isMasterVariant,\n variantIndex:\n !isMasterVariant && foundVariant\n ? productData.variants.indexOf(foundVariant)\n : -1,\n }\n}\n\nconst variantFromDraft = (\n variantId: number,\n variant: ProductVariantDraft\n): ProductVariant => {\n return {\n id: variantId,\n sku: variant?.sku,\n attributes: variant?.attributes,\n }\n}\n","import AbstractService from './abstract'\nimport { Router } from 'express'\nimport { AbstractStorage } from '../storage'\nimport { ProductRepository } from '../repositories/product'\n\nexport class ProductService extends AbstractService {\n public repository: ProductRepository\n\n constructor(parent: Router, storage: AbstractStorage) {\n super(parent)\n this.repository = new ProductRepository(storage)\n }\n\n getBasePath() {\n return 'products'\n }\n}\n","import AbstractService from './abstract'\nimport { Router } from 'express'\nimport { AbstractStorage } from '../storage'\nimport { PaymentRepository } from '../repositories/payment'\n\nexport class MyPaymentService extends AbstractService {\n public repository: PaymentRepository\n\n constructor(parent: Router, storage: AbstractStorage) {\n super(parent)\n this.repository = new PaymentRepository(storage)\n }\n\n getBasePath() {\n return 'me/payments'\n }\n}\n","import { ShoppingListService } from './services/shopping-list'\nimport { ProductProjectionService } from './services/product-projection'\nimport { ProductTypeService } from './services/product-type'\nimport { ShippingMethodService } from './services/shipping-method'\nimport { StateService } from './services/state'\nimport { TaxCategoryService } from './services/tax-category'\nimport { PaymentService } from './services/payment'\nimport nock from 'nock'\nimport express, { NextFunction, Request, Response } from 'express'\nimport supertest from 'supertest'\nimport morgan from 'morgan'\nimport { AbstractStorage, InMemoryStorage } from './storage'\nimport { TypeService } from './services/type'\nimport { CustomObjectService } from './services/custom-object'\nimport { CustomerService } from './services/customer'\nimport { CartService } from './services/cart'\nimport { InventoryEntryService } from './services/inventory-entry'\nimport { OrderService } from './services/order'\nimport { Services } from './types'\nimport { StoreService } from './services/store'\nimport { CommercetoolsError } from './exceptions'\nimport { OAuth2Server } from './oauth/server'\nimport { DEFAULT_API_HOSTNAME, DEFAULT_AUTH_HOSTNAME } from './constants'\nimport { ProjectAPI } from './projectAPI'\nimport { copyHeaders } from './lib/proxy'\nimport { ProductService } from './services/product'\nimport { MyPaymentService } from './services/my-payment'\n\nexport type CommercetoolsMockOptions = {\n validateCredentials: boolean\n enableAuthentication: boolean\n defaultProjectKey: string | undefined\n apiHost: RegExp | string\n authHost: RegExp | string\n silent: boolean\n}\n\ntype AppOptions = { silent?: boolean }\n\nconst DEFAULT_OPTIONS: CommercetoolsMockOptions = {\n enableAuthentication: false,\n validateCredentials: false,\n defaultProjectKey: undefined,\n apiHost: DEFAULT_API_HOSTNAME,\n authHost: DEFAULT_AUTH_HOSTNAME,\n silent: false,\n}\n\nexport class CommercetoolsMock {\n public app: express.Express\n public options: CommercetoolsMockOptions\n\n private _storage: AbstractStorage\n private _oauth2: OAuth2Server\n private _nockScopes: {\n auth: nock.Scope | undefined\n api: nock.Scope | undefined\n } = { auth: undefined, api: undefined }\n private _services: Services\n\n constructor(options: Partial<CommercetoolsMockOptions> = {}) {\n this.options = { ...DEFAULT_OPTIONS, ...options }\n this._services = {}\n\n this._storage = new InMemoryStorage()\n this._oauth2 = new OAuth2Server({\n enabled: this.options.enableAuthentication,\n validate: this.options.validateCredentials,\n })\n\n this.app = this.createApp({ silent: this.options.silent })\n }\n\n start() {\n // Order is important here when the hostnames match\n this.mockAuthHost()\n this.mockApiHost()\n }\n\n stop() {\n this._nockScopes.auth?.persist(false)\n this._nockScopes.auth = undefined\n\n this._nockScopes.api?.persist(false)\n this._nockScopes.api = undefined\n }\n\n clear() {\n this._storage.clear()\n }\n\n project(projectKey?: string) {\n if (!projectKey && !this.options.defaultProjectKey) {\n throw new Error('No projectKey passed and no default set')\n }\n\n return new ProjectAPI(\n projectKey || this.options.defaultProjectKey!,\n this._services,\n this._storage\n )\n }\n\n runServer(port: number = 3000, options?: AppOptions) {\n const app = this.createApp(options)\n app.listen(port, () => {\n console.log(`Mock server listening at http://localhost:${port}`)\n })\n }\n\n private createApp(options?: AppOptions): express.Express {\n const app = express()\n\n const projectRouter = express.Router({ mergeParams: true })\n projectRouter.use(express.json())\n\n if (!options?.silent) {\n app.use(morgan('tiny'))\n }\n app.use('/oauth', this._oauth2.createRouter())\n\n // Only enable auth middleware if we have enabled this\n if (this.options.enableAuthentication) {\n app.use('/:projectKey', this._oauth2.createMiddleware(), projectRouter)\n } else {\n app.use('/:projectKey', projectRouter)\n }\n\n this._services = {\n cart: new CartService(projectRouter, this._storage),\n customer: new CustomerService(projectRouter, this._storage),\n 'inventory-entry': new InventoryEntryService(\n projectRouter,\n this._storage\n ),\n 'key-value-document': new CustomObjectService(\n projectRouter,\n this._storage\n ),\n order: new OrderService(projectRouter, this._storage),\n payment: new PaymentService(projectRouter, this._storage),\n 'my-payment': new MyPaymentService(projectRouter, this._storage),\n 'shipping-method': new ShippingMethodService(\n projectRouter,\n this._storage\n ),\n 'product-type': new ProductTypeService(projectRouter, this._storage),\n product: new ProductService(projectRouter, this._storage),\n 'product-projection': new ProductProjectionService(\n projectRouter,\n this._storage\n ),\n 'shopping-list': new ShoppingListService(projectRouter, this._storage),\n state: new StateService(projectRouter, this._storage),\n store: new StoreService(projectRouter, this._storage),\n 'tax-category': new TaxCategoryService(projectRouter, this._storage),\n type: new TypeService(projectRouter, this._storage),\n }\n\n app.use((err: Error, req: Request, resp: Response, next: NextFunction) => {\n if (err instanceof CommercetoolsError) {\n return resp.status(err.statusCode).send({\n statusCode: err.statusCode,\n message: err.message,\n errors: [err.info],\n })\n } else {\n return resp.status(500).send({\n error: err.message,\n })\n }\n })\n\n return app\n }\n\n private mockApiHost() {\n const app = this.app\n\n this._nockScopes.api = nock(this.options.apiHost)\n .persist()\n .get(/.*/)\n .reply(async function(uri) {\n const response = await supertest(app)\n .get(uri)\n .set(copyHeaders(this.req.headers))\n return [response.status, response.body]\n })\n .post(/.*/)\n .reply(async function(uri, body) {\n const response = await supertest(app)\n .post(uri)\n .set(copyHeaders(this.req.headers))\n .send(body)\n return [response.status, response.body]\n })\n .delete(/.*/)\n .reply(async function(uri, body) {\n const response = await supertest(app)\n .delete(uri)\n .set(copyHeaders(this.req.headers))\n .send(body)\n return [response.status, response.body]\n })\n }\n\n private mockAuthHost() {\n const app = this.app\n\n this._nockScopes.auth = nock(this.options.authHost)\n .persist()\n .post(/^\\/oauth\\/.*/)\n .reply(async function(uri, body) {\n const response = await supertest(app)\n .post(uri + '?' + body)\n .set(copyHeaders(this.req.headers))\n .send()\n return [response.status, response.body]\n })\n }\n}\n"],"names":["getBaseResourceProperties","id","uuidv4","createdAt","Date","toISOString","lastModifiedAt","version","CommercetoolsError","Error","constructor","info","statusCode","message","checkConcurrentModification","resource","expectedVersion","currentVersion","code","AbstractRepository","storage","_storage","assertStorage","getTypeId","query","projectKey","params","expand","where","get","getByKey","key","delete","save","typeId","current","add","processUpdateActions","actions","modifiedResource","JSON","parse","stringify","forEach","action","updateFunc","console","error","deepEqual","createCustomFields","draft","undefined","type","fields","typeResource","getByResourceIdentifier","createPrice","value","createTypedMoney","fractionDigits","resolveStoreReference","ref","store","getReferenceFromResourceIdentifier","resourceIdentifier","ShoppingListRepository","create","custom","textLineItems","lineItems","map","e","addedAt","productId","name","quantity","productType","customer","AbstractService","parent","registerRoutes","extraRoutes","router","basePath","getBasePath","Router","mergeParams","bind","getWithKey","getWithId","deletewithKey","deletewithId","post","postWithKey","postWithId","use","request","response","result","repository","_parseParam","status","send","_expandWithId","body","updateRequest","updatedResource","resourceId","Array","isArray","ShoppingListService","parseFilterExpression","filter","filters","join","parsed","replace","includes","ProductProjectionRepository","masterVariant","slug","categories","variantFromDraft","variants","variant","index","searchKeywords","search","wherePredicate","results","variantId","sku","attributes","ProductProjectionService","ProductTypeRepository","_projectKey","attributeConstraint","inputHint","isSearchable","a","attributeDefinitionFromAttributeDefinitionDraft","count","ProductTypeService","ShippingMethodRepository","zone","shippingRates","s","price","freeAbove","tiers","taxCategory","zoneRates","z","zoneRateFromZoneRateDraft","ShippingMethodService","StateRepository","builtIn","initial","transitions","t","StateService","TaxCategoryRepository","amount","rates","taxRateFromTaxRateDraft","TaxCategoryService","PaymentRepository","setCustomField","setCustomType","resolvedType","addTransaction","transaction","transactions","transactionFromTransactionDraft","amountPlanned","paymentMethodInfo","paymentStatus","state","interfaceInteractions","interaction","PaymentService","parseExpandClause","clause","element","rest","pos","indexOf","substring","match","parseInt","haversineDistance","src","dst","RADIUS_OF_EARTH_IN_KM","toRadian","deg","Math","PI","dLat","latitude","dLon","longitude","sin","cos","c","atan2","sqrt","PredicateError","parseQueryExpression","predicate","callbacks","item","generateMatchFunc","target","variables","every","callback","validateSymbol","val","char","charAt","line","start","column","resolveSymbol","vars","resolveValue","obj","Object","values","v","getLexer","perplex","token","lexer","parser","Parser","builder","nud","strpos","groups","parseFloat","bp","expr","terminals","led","left","expect","resolvedValue","resolvedSymbol","some","elem","invert","next","peek","length","symbols","inValues","other","toLowerCase","maxDistance","distance","keyword","array","build","lines","split","AbstractStorage","InMemoryStorage","newObj","_resolveResource","reference","_resolveReference","itemRef","forProjectKey","projectStorage","resources","cart","Map","order","payment","product","clear","entries","all","from","set","assert","find","filterFunc","err","totalResources","offset","limit","slice","total","identifier","r","TypeRepository","resourceTypeIds","fieldDefinitions","description","TypeService","CustomObjectRepository","getWithContainerAndKey","container","baseProperties","items","CustomObjectService","createWithContainerAndKey","deleteWithContainerAndKey","CustomerRepository","email","password","isEmailVerified","addresses","CustomerService","CartRepository","cartState","customLineItems","totalPrice","centAmount","currencyCode","currency","taxMode","taxRoundingMode","taxCalculationMode","refusedGifts","origin","CartService","InventoryEntryRepository","changeQuantity","quantityOnStock","availableQuantity","setExpectedDelivery","expectedDelivery","setRestockableInDays","restockableInDays","supplyChannel","InventoryEntryService","OrderRepository","addPayment","resolvedPayment","paymentInfo","payments","push","changeOrderState","orderState","changePaymentState","paymentState","setBillingAddress","address","billingAddress","setCustomerEmail","customerEmail","setLocale","locale","setOrderNumber","orderNumber","setShippingAddress","shippingAddress","setStore","storeReference","syncInfo","lastMessageSequenceNumber","import","lineItemFromImportDraft","customLineItemFromImportDraft","masterData","lineItem","discountedPricePerQuantity","lineItemMode","priceMode","taxRate","money","getWithOrderNumber","OrderService","importDraft","StoreRepository","distributionChannels","StoreService","OAuth2Store","validate","getClientToken","clientId","clientSecret","scope","access_token","randomBytes","toString","token_type","expires_in","tokens","validateToken","foundToken","getBearerToken","authHeader","header","OAuth2Server","options","createRouter","express","tokenHandler","createMiddleware","credentials","auth","grantType","grant_type","pass","DEFAULT_API_HOSTNAME","DEFAULT_AUTH_HOSTNAME","ProjectAPI","services","_services","parsedTypeId","service","getRepository","copyHeaders","headers","validHeaders","ProductRepository","publish","staged","hasStagedChanges","published","setAttribute","isStaged","productData","getProductData","isMasterVariant","variantIndex","getVariant","existingAttr","attr","foundVariant","ProductService","MyPaymentService","DEFAULT_OPTIONS","enableAuthentication","validateCredentials","defaultProjectKey","apiHost","authHost","silent","CommercetoolsMock","api","_oauth2","enabled","app","createApp","mockAuthHost","mockApiHost","stop","_nockScopes","persist","project","runServer","port","listen","log","projectRouter","json","morgan","req","resp","errors","nock","reply","uri","supertest"],"mappings":"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"}
1
+ {"version":3,"file":"commercetools-mock.cjs.development.js","sources":["../src/lib/expandParser.ts","../src/lib/haversine.ts","../src/lib/predicateParser.ts","../src/exceptions.ts","../src/storage.ts","../src/oauth/store.ts","../src/oauth/helpers.ts","../src/oauth/server.ts","../src/helpers.ts","../src/projectAPI.ts","../src/lib/proxy.ts","../src/constants.ts","../src/services/abstract.ts","../src/repositories/errors.ts","../src/repositories/abstract.ts","../src/repositories/helpers.ts","../src/repositories/cart-discount.ts","../src/services/cart-discount.ts","../src/repositories/cart.ts","../src/services/cart.ts","../src/repositories/category.ts","../src/services/category.ts","../src/repositories/channel.ts","../src/services/channel.ts","../src/repositories/customer-group.ts","../src/services/customer-group.ts","../src/repositories/customer.ts","../src/services/customer.ts","../src/repositories/custom-object.ts","../src/services/custom-object.ts","../src/repositories/discount-code.ts","../src/services/discount-code.ts","../src/repositories/extension.ts","../src/services/extension.ts","../src/repositories/inventory-entry.ts","../src/services/inventory-entry.ts","../src/services/my-cart.ts","../src/repositories/payment.ts","../src/services/my-payment.ts","../src/repositories/order.ts","../src/services/order.ts","../src/services/payment.ts","../src/lib/filterParser.ts","../src/repositories/product-projection.ts","../src/services/product-projection.ts","../src/repositories/product.ts","../src/services/product.ts","../src/repositories/product-type.ts","../src/services/product-type.ts","../src/repositories/project.ts","../src/services/project.ts","../src/repositories/shipping-method.ts","../src/services/shipping-method.ts","../src/repositories/shopping-list.ts","../src/services/shopping-list.ts","../src/repositories/state.ts","../src/services/state.ts","../src/repositories/store.ts","../src/services/store.ts","../src/repositories/subscription.ts","../src/services/subscription.ts","../src/repositories/tax-category.ts","../src/services/tax-category.ts","../src/repositories/type.ts","../src/services/type.ts","../src/repositories/zone.ts","../src/services/zone.ts","../src/ctMock.ts"],"sourcesContent":["/**\n * This module implements the reference expansion as imeplemented by\n * commercetools.\n *\n * See https://docs.commercetools.com/api/general-concepts#reference-expansion\n *\n * TODO: implement support for multi-dimensional array\n */\ntype ExpandResult = {\n element: string\n index?: string | number\n rest?: string\n}\n\nexport const parseExpandClause = (clause: string): ExpandResult => {\n const result: ExpandResult = {\n element: clause,\n index: undefined,\n rest: undefined,\n }\n\n const pos = clause.indexOf('.')\n if (pos > 0) {\n result.element = clause.substring(0, pos)\n result.rest = clause.substring(pos + 1)\n }\n\n const match = result.element.match(/\\[([^\\]+])]/)\n if (match) {\n result.index = match[1] === '*' ? '*' : parseInt(match[1], 10)\n result.element = result.element.substring(0, match.index)\n }\n return result\n}\n","export type Location = {\n latitude: number\n longitude: number\n}\n\n/**\n * Returns the distance between src and dst as meters\n */\nexport const haversineDistance = (src: Location, dst: Location) => {\n const RADIUS_OF_EARTH_IN_KM = 6371\n const toRadian = (deg: number) => deg * (Math.PI / 180)\n\n const dLat = toRadian(dst.latitude - src.latitude)\n const dLon = toRadian(dst.longitude - src.longitude)\n\n var a =\n Math.sin(dLat / 2) * Math.sin(dLat / 2) +\n Math.cos(toRadian(src.latitude)) *\n Math.cos(toRadian(dst.latitude)) *\n Math.sin(dLon / 2) *\n Math.sin(dLon / 2)\n var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a))\n return RADIUS_OF_EARTH_IN_KM * c * 1000\n}\n","/**\n * This module implements the commercetools query predicate filter expression.\n * Support should be 100% complete.\n *\n * See https://docs.commercetools.com/api/predicates/query\n */\nimport perplex from 'perplex'\nimport { ITokenPosition, Parser } from 'pratt'\nimport { haversineDistance } from './haversine'\n\nexport class PredicateError {\n message: string\n\n constructor(message: string) {\n this.message = message\n }\n}\n\ntype MatchFunc = (target: any, variables: VariableMap) => boolean\ntype VariableMap = {\n [key: string]: any\n}\n\nexport const matchesPredicate = (\n predicate: string | string[] | undefined,\n target: any,\n variables?: VariableMap\n): boolean => {\n if (!predicate) {\n return true\n }\n\n if (Array.isArray(predicate)) {\n return predicate.every(item => {\n const func = generateMatchFunc(item)\n return func(target, variables || {})\n })\n } else {\n const func = generateMatchFunc(predicate)\n return func(target, variables || {})\n }\n}\n\nexport const parseQueryExpression = (\n predicate: string | string[]\n): MatchFunc => {\n if (Array.isArray(predicate)) {\n const callbacks = predicate.map(item => generateMatchFunc(item))\n return (target: any, variables: VariableMap) => {\n return callbacks.every(callback => callback(target, variables))\n }\n } else {\n return generateMatchFunc(predicate)\n }\n}\n\ntype Symbol = {\n type: 'var' | 'boolean' | 'string' | 'float' | 'int' | 'identifier'\n value: any\n pos?: ITokenPosition\n}\n\nconst validateSymbol = (val: Symbol) => {\n if (!val.type) {\n throw new PredicateError('Internal error')\n }\n\n if (val.type === 'identifier') {\n const char = val.value.charAt(0)\n const line = val.pos?.start.line\n const column = val.pos?.start.column\n\n throw new PredicateError(\n `Invalid input '${char}', expected input parameter or primitive value (line ${line}, column ${column})`\n )\n }\n}\n\nconst resolveSymbol = (val: Symbol, vars: VariableMap): any => {\n if (val.type === 'var') {\n if (!(val.value in vars)) {\n throw new PredicateError(`Missing parameter value for ${val.value}`)\n }\n return vars[val.value]\n }\n\n return val.value\n}\n\nconst resolveValue = (obj: any, val: Symbol): any => {\n if (val.type !== 'identifier') {\n throw new PredicateError('Internal error')\n }\n\n if (!(val.value in obj)) {\n if (Array.isArray(obj)) {\n return Object.values(obj)\n .filter(v => val.value in v)\n .map(v => v[val.value])\n }\n throw new PredicateError(`The field '${val.value}' does not exist.`)\n }\n\n return obj[val.value]\n}\n\nconst getLexer = (value: string) => {\n return new perplex(value)\n\n .token('AND', /and(?![-_a-z0-9]+)/i)\n .token('OR', /or(?![-_a-z0-9]+)/i)\n .token('NOT', /not(?![-_a-z0-9]+)/i)\n\n .token('WITHIN', /within(?![-_a-z0-9]+)/i)\n .token('IN', /in(?![-_a-z0-9]+)/i)\n .token('MATCHES_IGNORE_CASE', /matches\\s+ignore\\s+case(?![-_a-z0-9]+)/i)\n .token('CONTAINS', /contains(?![-_a-z0-9]+)/i)\n .token('ALL', /all(?![-_a-z0-9]+)/i)\n .token('ANY', /any(?![-_a-z0-9]+)/i)\n .token('EMPTY', /empty(?![-_a-z0-9]+)/i)\n .token('IS', /is(?![-_a-z0-9]+)/i)\n .token('DEFINED', /defined(?![-_a-z0-9]+)/i)\n\n .token('FLOAT', /\\d+\\.\\d+/)\n .token('INT', /\\d+/)\n .token('VARIABLE', /:([-_A-Za-z0-9]+)/)\n .token('IDENTIFIER', /[-_A-Za-z0-9]+/)\n .token('STRING', /\"((?:\\\\.|[^\"\\\\])*)\"/)\n .token('STRING', /'((?:\\\\.|[^'\\\\])*)'/)\n\n .token('COMMA', ',')\n .token('(', '(')\n .token(')', ')')\n .token('>=', '>=')\n .token('<=', '<=')\n .token('>', '>')\n .token('<', '<')\n .token('!=', '!=')\n .token('=', '=')\n .token('\"', '\"')\n .token('WS', /\\s+/, true) // skip\n}\n\n/**\n * This function converts a query expression in to a callable which returns a\n * boolean to indicate if the given object matches or not.\n *\n * This currently parses the predicate each time it is called, but it should be\n * straight-forward to add a query cache (lru-cache)\n */\nconst generateMatchFunc = (predicate: string): MatchFunc => {\n const lexer = getLexer(predicate)\n const parser = new Parser(lexer)\n .builder()\n .nud('IDENTIFIER', 100, t => {\n return {\n type: 'identifier',\n value: t.token.match,\n pos: t.token.strpos(),\n } as Symbol\n })\n .nud('VARIABLE', 100, t => {\n return {\n type: 'var',\n // @ts-ignore\n value: t.token.groups[1],\n pos: t.token.strpos(),\n } as Symbol\n })\n .nud('STRING', 100, t => {\n return {\n type: 'string',\n // @ts-ignore\n value: t.token.groups[1],\n pos: t.token.strpos(),\n } as Symbol\n })\n .nud('INT', 1, t => {\n return {\n type: 'int',\n value: parseInt(t.token.match, 10),\n pos: t.token.strpos(),\n } as Symbol\n })\n .nud('FLOAT', 1, t => {\n return {\n type: 'float',\n value: parseFloat(t.token.match),\n pos: t.token.strpos(),\n } as Symbol\n })\n .nud('NOT', 100, ({ bp }) => {\n const expr = parser.parse({ terminals: [bp - 1] })\n return (obj: any) => {\n return !expr(obj)\n }\n })\n .nud('EMPTY', 10, ({ bp }) => {\n return 'empty'\n })\n .nud('DEFINED', 10, ({ bp }) => {\n return 'defined'\n })\n\n .led('AND', 5, ({ left, bp }) => {\n const expr = parser.parse({ terminals: [bp - 1] })\n return (obj: any) => {\n return left(obj) && expr(obj)\n }\n })\n .led('OR', 5, ({ left, token, bp }) => {\n const expr = parser.parse({ terminals: [bp - 1] })\n return (obj: any, vars: object) => {\n return left(obj, vars) || expr(obj, vars)\n }\n })\n .led('COMMA', 1, ({ left, token, bp }) => {\n const expr: any = parser.parse({ terminals: [bp - 1] })\n if (Array.isArray(expr)) {\n return [left, ...expr]\n } else {\n return [left, expr]\n }\n })\n .nud('(', 100, t => {\n const expr: any = parser.parse({ terminals: [')'] })\n return expr\n })\n .led('(', 100, ({ left, bp }) => {\n const expr = parser.parse()\n lexer.expect(')')\n return (obj: any, vars: object) => {\n const value = resolveValue(obj, left)\n if (value) {\n return expr(value)\n }\n return false\n }\n })\n .bp(')', 0)\n .led('=', 20, ({ left, bp }) => {\n const expr = parser.parse({ terminals: [bp - 1] })\n validateSymbol(expr)\n\n return (obj: any, vars: VariableMap) => {\n const resolvedValue = resolveValue(obj, left)\n const resolvedSymbol = resolveSymbol(expr, vars)\n if (Array.isArray(resolvedValue)) {\n return !!resolvedValue.some(elem => elem === resolvedSymbol)\n }\n return resolvedValue === resolvedSymbol\n }\n })\n .led('!=', 20, ({ left, bp }) => {\n const expr = parser.parse({ terminals: [bp - 1] })\n validateSymbol(expr)\n\n return (obj: any, vars: VariableMap) => {\n return resolveValue(obj, left) !== resolveSymbol(expr, vars)\n }\n })\n .led('>', 20, ({ left, bp }) => {\n const expr = parser.parse({ terminals: [bp - 1] })\n validateSymbol(expr)\n\n return (obj: any, vars: object) => {\n return resolveValue(obj, left) > resolveSymbol(expr, vars)\n }\n })\n .led('>=', 20, ({ left, bp }) => {\n const expr = parser.parse({ terminals: [bp - 1] })\n validateSymbol(expr)\n\n return (obj: any, vars: object) => {\n return resolveValue(obj, left) >= resolveSymbol(expr, vars)\n }\n })\n .led('<', 20, ({ left, bp }) => {\n const expr = parser.parse({ terminals: [bp - 1] })\n validateSymbol(expr)\n\n return (obj: any, vars: object) => {\n return resolveValue(obj, left) < resolveSymbol(expr, vars)\n }\n })\n .led('<=', 20, ({ left, bp }) => {\n const expr = parser.parse({ terminals: [bp - 1] })\n validateSymbol(expr)\n\n return (obj: any, vars: object) => {\n return resolveValue(obj, left) <= resolveSymbol(expr, vars)\n }\n })\n .led('IS', 20, ({ left, bp }) => {\n let invert = false\n\n // Peek if this is a `is not` statement\n const next = lexer.peek()\n if (next.type === 'NOT') {\n invert = true\n lexer.next()\n }\n\n const expr: any = parser.parse({ terminals: [bp - 1] })\n\n switch (expr) {\n case 'empty': {\n if (!invert) {\n return (obj: any, vars: VariableMap) => {\n const val = resolveValue(obj, left)\n return val.length === 0\n }\n } else {\n return (obj: any, vars: VariableMap) => {\n const val = resolveValue(obj, left)\n return val.length !== 0\n }\n }\n }\n case 'defined': {\n if (!invert) {\n return (obj: any, vars: VariableMap) => {\n const val = resolveValue(obj, left)\n return val !== undefined\n }\n } else {\n return (obj: any, vars: VariableMap) => {\n const val = resolveValue(obj, left)\n return val === undefined\n }\n }\n }\n default: {\n throw new Error('Unexpected')\n }\n }\n })\n .led('IN', 20, ({ left, bp }) => {\n const expr = parser.parse({ terminals: [bp - 1] })\n return (obj: any, vars: object) => {\n let symbols = expr\n if (!Array.isArray(symbols)) {\n symbols = [expr]\n }\n\n const inValues = symbols.map((item: Symbol) =>\n resolveSymbol(item, vars)\n )\n return inValues.includes(resolveValue(obj, left))\n }\n })\n .led('MATCHES_IGNORE_CASE', 20, ({ left, bp }) => {\n const expr = parser.parse({ terminals: [bp - 1] })\n validateSymbol(expr)\n\n return (obj: any, vars: VariableMap) => {\n const value = resolveValue(obj, left)\n const other = resolveSymbol(expr, vars)\n\n if (typeof value != 'string') {\n throw new PredicateError(\n `The field '${left.value}' does not support this expression.`\n )\n }\n return value.toLowerCase() === other.toLowerCase()\n }\n })\n .led('WITHIN', 20, ({ left, bp }) => {\n const type = lexer.next()\n\n if (type.match !== 'circle') {\n throw new PredicateError(\n `Invalid input '${type.match}', expected circle`\n )\n }\n\n lexer.expect('(')\n const expr = parser.parse({ terminals: [')'] })\n\n return (obj: any, vars: object) => {\n const value = resolveValue(obj, left)\n if (!value) return false\n\n const maxDistance = resolveSymbol(expr[2], vars)\n const distance = haversineDistance(\n {\n longitude: value[0],\n latitude: value[1],\n },\n {\n longitude: resolveSymbol(expr[0], vars),\n latitude: resolveSymbol(expr[1], vars),\n }\n )\n return distance <= maxDistance\n }\n })\n .led('CONTAINS', 20, ({ left, bp }) => {\n const keyword = lexer.next()\n\n let expr = parser.parse()\n if (!Array.isArray(expr)) {\n expr = [expr]\n }\n\n return (obj: any, vars: object) => {\n const value = resolveValue(obj, left)\n\n if (!Array.isArray(value)) {\n throw new PredicateError(\n `The field '${left.value}' does not support this expression.`\n )\n }\n\n const array = expr.map((item: Symbol) => resolveSymbol(item, vars))\n if (keyword.type === 'ALL') {\n return array.every((item: any) => value.includes(item))\n } else {\n return array.some((item: any) => value.includes(item))\n }\n }\n })\n\n .build()\n\n const result = parser.parse()\n\n if (typeof result !== 'function') {\n const lines = predicate.split('\\n')\n const column = lines[lines.length - 1].length\n\n throw new PredicateError(\n `Unexpected end of input, expected SphereIdentifierChar, comparison ` +\n `operator, not, in, contains, is, within or matches` +\n ` (line ${lines.length}, column ${column})`\n )\n }\n return result\n}\n","export abstract class BaseError {\n abstract message: string\n}\n\nexport class CommercetoolsError<T extends BaseError> extends Error {\n info: T\n statusCode: number\n\n constructor(info: T, statusCode = 400) {\n super(info.message)\n this.info = info\n this.statusCode = statusCode || 500\n }\n}\n\nexport interface InvalidRequestError {\n readonly code: 'invalid_request'\n readonly message: string\n}\n","import assert from 'assert'\nimport {\n BaseResource,\n Cart,\n Category,\n Customer,\n CustomObject,\n InventoryEntry,\n Order,\n PagedQueryResponse,\n QueryParam,\n Reference,\n ResourceIdentifier,\n Product,\n Store,\n Type,\n Payment,\n Project,\n State,\n TaxCategory,\n ShippingMethod,\n ProductType,\n InvalidInputError,\n ProductProjection,\n ShoppingList,\n Extension,\n CartDiscount,\n CustomerGroup,\n DiscountCode,\n Zone,\n Channel,\n Subscription,\n} from '@commercetools/platform-sdk'\nimport { parseExpandClause } from './lib/expandParser'\nimport { RepositoryTypes, ResourceMap, Writable } from './types'\nimport { parseQueryExpression } from './lib/predicateParser'\nimport { CommercetoolsError } from './exceptions'\n\ntype GetParams = {\n expand?: string[]\n}\n\ntype QueryParams = {\n expand?: string | string[]\n sort?: string | string[]\n limit?: number\n offset?: number\n withTotal?: boolean\n where?: string | string[]\n [key: string]: QueryParam\n}\n\nexport abstract class AbstractStorage {\n abstract clear(): void\n\n abstract assertStorage(typeId: RepositoryTypes): void\n\n abstract all(projectKey: string, typeId: RepositoryTypes): Array<BaseResource>\n\n abstract add<RepositoryTypes extends keyof ResourceMap>(\n projectKey: string,\n typeId: RepositoryTypes,\n obj: ResourceMap[RepositoryTypes]\n ): void\n\n abstract get<RepositoryTypes extends keyof ResourceMap>(\n projectKey: string,\n typeId: RepositoryTypes,\n id: string,\n params: GetParams\n ): ResourceMap[RepositoryTypes] | null\n\n abstract getByKey<RepositoryTypes extends keyof ResourceMap>(\n projectKey: string,\n typeId: RepositoryTypes,\n key: string,\n params: GetParams\n ): ResourceMap[RepositoryTypes] | null\n\n abstract addProject(projectKey: string): Project\n abstract getProject(projectKey: string): Project\n abstract saveProject(project: Project): Project\n\n abstract delete(\n projectKey: string,\n typeId: RepositoryTypes,\n id: string,\n params: GetParams\n ): BaseResource | null\n\n abstract query(\n projectKey: string,\n typeId: RepositoryTypes,\n params: QueryParams\n ): PagedQueryResponse\n\n abstract getByResourceIdentifier(\n projectKey: string,\n identifier: ResourceIdentifier\n ): BaseResource | undefined\n}\n\ntype ProjectStorage = Partial<\n {\n [index in RepositoryTypes]: Map<string, BaseResource>\n }\n>\n\nexport class InMemoryStorage extends AbstractStorage {\n protected resources: {\n [projectKey: string]: ProjectStorage\n } = {}\n\n protected projects: {\n [projectKey: string]: Project\n } = {}\n\n private forProjectKey(projectKey: string) {\n this.addProject(projectKey)\n\n let projectStorage = this.resources[projectKey]\n if (!projectStorage) {\n projectStorage = this.resources[projectKey] = {\n cart: new Map<string, Cart>(),\n 'cart-discount': new Map<string, CartDiscount>(),\n category: new Map<string, Category>(),\n channel: new Map<string, Channel>(),\n customer: new Map<string, Customer>(),\n 'customer-group': new Map<string, CustomerGroup>(),\n 'discount-code': new Map<string, DiscountCode>(),\n extension: new Map<string, Extension>(),\n 'inventory-entry': new Map<string, InventoryEntry>(),\n 'key-value-document': new Map<string, CustomObject>(),\n order: new Map<string, Order>(),\n payment: new Map<string, Payment>(),\n 'product-type': new Map<string, ProductType>(),\n product: new Map<string, Product>(),\n 'product-selection': new Map<string, any>(),\n 'product-projection': new Map<string, ProductProjection>(),\n 'shipping-method': new Map<string, ShippingMethod>(),\n state: new Map<string, State>(),\n store: new Map<string, Store>(),\n 'shopping-list': new Map<string, ShoppingList>(),\n subscription: new Map<string, Subscription>(),\n 'tax-category': new Map<string, TaxCategory>(),\n type: new Map<string, Type>(),\n zone: new Map<string, Zone>(),\n }\n }\n return projectStorage\n }\n\n clear() {\n for (const [, projectStorage] of Object.entries(this.resources)) {\n for (const [, value] of Object.entries(projectStorage)) {\n value?.clear()\n }\n }\n }\n\n assertStorage(typeId: RepositoryTypes) {}\n\n all(projectKey: string, typeId: RepositoryTypes) {\n const store = this.forProjectKey(projectKey)[typeId]\n if (store) {\n return Array.from(store.values())\n }\n return []\n }\n\n add<RepositoryTypes extends keyof ResourceMap>(\n projectKey: string,\n typeId: RepositoryTypes,\n obj: ResourceMap[RepositoryTypes],\n params: GetParams = {}\n ): ResourceMap[RepositoryTypes] {\n this.forProjectKey(projectKey)[typeId]?.set(obj.id, obj)\n\n const resource = this.get(projectKey, typeId, obj.id, params)\n assert(resource, `resource of type ${typeId} with id ${obj.id} not created`)\n return resource\n }\n\n get<RepositoryTypes extends keyof ResourceMap>(\n projectKey: string,\n typeId: RepositoryTypes,\n id: string,\n params: GetParams = {}\n ): ResourceMap[RepositoryTypes] | null {\n const resource = this.forProjectKey(projectKey)[typeId]?.get(id)\n if (resource) {\n return this.expand(\n projectKey,\n resource,\n params.expand\n ) as ResourceMap[RepositoryTypes]\n }\n return null\n }\n\n getByKey<RepositoryTypes extends keyof ResourceMap>(\n projectKey: string,\n typeId: RepositoryTypes,\n key: string,\n params: GetParams = {}\n ): ResourceMap[RepositoryTypes] | null {\n const store = this.forProjectKey(projectKey)[typeId]\n if (!store) {\n throw new Error('No type')\n }\n\n const resources: any[] = Array.from(store.values())\n const resource = resources.find(e => e.key === key)\n if (params.expand) return this.expand(projectKey, resource, params.expand)\n return resource\n }\n\n delete(\n projectKey: string,\n typeId: RepositoryTypes,\n id: string,\n params: GetParams = {}\n ): BaseResource | null {\n const resource = this.get(projectKey, typeId, id)\n\n if (resource) {\n this.forProjectKey(projectKey)[typeId]?.delete(id)\n return this.expand(\n projectKey,\n resource,\n params.expand\n ) as ResourceMap[RepositoryTypes]\n }\n return resource\n }\n\n query(\n projectKey: string,\n typeId: RepositoryTypes,\n params: QueryParams\n ): PagedQueryResponse {\n const store = this.forProjectKey(projectKey)[typeId]\n if (!store) {\n throw new Error('No type')\n }\n\n let resources = Array.from(store.values())\n\n // Apply predicates\n if (params.where) {\n try {\n const filterFunc = parseQueryExpression(params.where)\n resources = resources.filter(resource => filterFunc(resource, {}))\n } catch (err) {\n throw new CommercetoolsError<InvalidInputError>(\n {\n code: 'InvalidInput',\n message: (err as any).message,\n },\n 400\n )\n }\n }\n\n // Get the total before slicing the array\n const totalResources = resources.length\n\n // Apply offset, limit\n const offset = params.offset || 0\n const limit = params.limit || 20\n resources = resources.slice(offset, offset + limit)\n\n // Expand the resources\n if (params.expand !== undefined) {\n resources = resources.map(resource => {\n return this.expand(projectKey, resource, params.expand)\n })\n }\n\n return {\n count: totalResources,\n total: resources.length,\n offset: offset,\n limit: limit,\n results: resources,\n }\n }\n\n getByResourceIdentifier<RepositoryTypes extends keyof ResourceMap>(\n projectKey: string,\n identifier: ResourceIdentifier\n ): ResourceMap[RepositoryTypes] | undefined {\n if (identifier.id) {\n const resource = this.get(projectKey, identifier.typeId, identifier.id)\n if (resource) {\n return resource as ResourceMap[RepositoryTypes]\n }\n console.error(\n `No resource found with typeId=${identifier.typeId}, id=${identifier.id}`\n )\n return undefined\n }\n\n if (identifier.key) {\n const store = this.forProjectKey(projectKey)[identifier.typeId]\n\n if (store) {\n // TODO: BaseResource has no key attribute, but the subclasses should\n // have them all.\n const resource = Array.from(store.values()).find(\n // @ts-ignore\n r => r.key === identifier.key\n )\n if (resource) {\n return resource as ResourceMap[RepositoryTypes]\n }\n } else {\n throw new Error(\n `No storage found for resource type: ${identifier.typeId}`\n )\n }\n }\n return undefined\n }\n\n addProject = (projectKey: string): Project => {\n if (!this.projects[projectKey]) {\n this.projects[projectKey] = {\n key: projectKey,\n name: '',\n countries: [],\n currencies: [],\n languages: [],\n createdAt: '2018-10-04T11:32:12.603Z',\n trialUntil: '2018-12',\n carts: {\n countryTaxRateFallbackEnabled: false,\n deleteDaysAfterLastModification: 90,\n },\n messages: { enabled: false, deleteDaysAfterCreation: 15 },\n shippingRateInputType: undefined,\n externalOAuth: undefined,\n searchIndexing: {\n products: {\n status: 'Deactivated',\n },\n orders: {\n status: 'Deactivated',\n },\n },\n version: 1,\n }\n }\n return this.projects[projectKey]\n }\n\n saveProject = (project: Project): Project => {\n this.projects[project.key] = project\n return project\n }\n\n getProject = (projectKey: string): Project => {\n return this.addProject(projectKey)\n }\n\n private expand = <T>(\n projectKey: string,\n obj: T,\n clause: undefined | string | string[]\n ): T => {\n if (!clause) return obj\n const newObj = JSON.parse(JSON.stringify(obj))\n if (Array.isArray(clause)) {\n clause.forEach(c => {\n this._resolveResource(projectKey, newObj, c)\n })\n } else {\n this._resolveResource(projectKey, newObj, clause)\n }\n return newObj\n }\n\n private _resolveResource = (projectKey: string, obj: any, expand: string) => {\n const params = parseExpandClause(expand)\n\n if (!params.index) {\n const reference = obj[params.element]\n if (reference === undefined) {\n return\n }\n this._resolveReference(projectKey, reference, params.rest)\n } else if (params.index === '*') {\n const reference = obj[params.element]\n if (reference === undefined || !Array.isArray(reference)) return\n reference.forEach((itemRef: Writable<Reference>) => {\n this._resolveReference(projectKey, itemRef, params.rest)\n })\n } else {\n const reference = obj[params.element][params.index]\n if (reference === undefined) return\n this._resolveReference(projectKey, reference, params.rest)\n }\n }\n\n private _resolveReference(\n projectKey: string,\n reference: any,\n expand: string | undefined\n ) {\n if (reference === undefined) return\n\n if (\n reference.typeId !== undefined &&\n (reference.id !== undefined || reference.key !== undefined)\n ) {\n // @ts-ignore\n reference.obj = this.getByResourceIdentifier(projectKey, {\n typeId: reference.typeId,\n id: reference.id,\n key: reference.key,\n } as ResourceIdentifier)\n if (expand) {\n this._resolveResource(projectKey, reference.obj, expand)\n }\n } else {\n if (expand) {\n this._resolveResource(projectKey, reference, expand)\n }\n }\n }\n}\n","import { randomBytes } from 'crypto'\n\ntype Token = {\n access_token: string\n token_type: 'Bearer'\n expires_in: number\n scope: string\n}\n\nexport class OAuth2Store {\n tokens: Token[] = []\n validate: Boolean = true\n\n constructor(validate: Boolean = true) {\n this.validate = validate\n }\n\n getClientToken(clientId: string, clientSecret: string, scope?: string) {\n const token: Token = {\n access_token: randomBytes(16).toString('base64'),\n token_type: 'Bearer',\n expires_in: 172800,\n scope: scope || 'todo',\n }\n this.tokens.push(token)\n return token\n }\n\n validateToken(token: string) {\n if (!this.validate) return true\n\n const foundToken = this.tokens.find(t => t.access_token === token)\n if (foundToken) {\n return true\n }\n return false\n }\n}\n","import { Request } from 'express'\n\nexport const getBearerToken = (request: Request): string | undefined => {\n const authHeader = request.header('Authorization')\n const match = authHeader?.match(/^Bearer\\s(?<token>[^\\s]+)$/)\n if (match) {\n return match.groups?.token\n }\n return undefined\n}\n","import auth from 'basic-auth'\nimport bodyParser from 'body-parser'\nimport express, { NextFunction, Request, Response } from 'express'\nimport {\n AccessDeniedError,\n InvalidTokenError,\n} from '@commercetools/platform-sdk'\nimport { CommercetoolsError, InvalidRequestError } from '../exceptions'\nimport { InvalidClientError, UnsupportedGrantType } from './errors'\nimport { OAuth2Store } from './store'\nimport { getBearerToken } from './helpers'\n\nexport class OAuth2Server {\n store: OAuth2Store\n\n constructor(options: { enabled: boolean; validate: boolean }) {\n this.store = new OAuth2Store(options.validate)\n }\n\n createRouter() {\n const router = express.Router()\n router.use(bodyParser.urlencoded({ extended: true }))\n router.post('/token', this.tokenHandler.bind(this))\n return router\n }\n\n createMiddleware() {\n return async (request: Request, response: Response, next: NextFunction) => {\n const token = getBearerToken(request)\n if (!token) {\n next(\n new CommercetoolsError<AccessDeniedError>(\n {\n code: 'access_denied',\n message:\n 'This endpoint requires an access token. You can get one from the authorization server.',\n },\n 401\n )\n )\n }\n\n if (!token || !this.store.validateToken(token)) {\n next(\n new CommercetoolsError<InvalidTokenError>(\n {\n code: 'invalid_token',\n message: 'invalid_token',\n },\n 401\n )\n )\n }\n\n next()\n }\n }\n async tokenHandler(request: Request, response: Response, next: NextFunction) {\n const authHeader = request.header('Authorization')\n if (!authHeader) {\n return next(\n new CommercetoolsError<InvalidClientError>(\n {\n code: 'invalid_client',\n message:\n 'Please provide valid client credentials using HTTP Basic Authentication.',\n },\n 401\n )\n )\n }\n const credentials = auth.parse(authHeader)\n if (!credentials) {\n return next(\n new CommercetoolsError<InvalidClientError>(\n {\n code: 'invalid_client',\n message:\n 'Please provide valid client credentials using HTTP Basic Authentication.',\n },\n 400\n )\n )\n }\n\n const grantType = request.query.grant_type || request.body.grant_type\n if (!grantType) {\n return next(\n new CommercetoolsError<InvalidRequestError>(\n {\n code: 'invalid_request',\n message: 'Missing required parameter: grant_type.',\n },\n 400\n )\n )\n }\n\n if (grantType === 'client_credentials') {\n const token = this.store.getClientToken(\n credentials.name,\n credentials.pass,\n request.query.scope?.toString()\n )\n return response.status(200).send(token)\n } else {\n return next(\n new CommercetoolsError<UnsupportedGrantType>(\n {\n code: 'unsupported_grant_type',\n message: `Invalid parameter: grant_type: Invalid grant type: ${grantType}`,\n },\n 400\n )\n )\n }\n }\n}\n","import { v4 as uuidv4 } from 'uuid'\n\nexport const getBaseResourceProperties = () => {\n return {\n id: uuidv4(),\n createdAt: new Date().toISOString(),\n lastModifiedAt: new Date().toISOString(),\n version: 0,\n }\n}\n","import { getBaseResourceProperties } from './helpers'\nimport { AbstractStorage } from './storage'\nimport { RepositoryMap, ResourceMap, Services } from './types'\n\nexport class ProjectAPI {\n private projectKey: string\n private _storage: AbstractStorage\n private _services: Services\n\n constructor(\n projectKey: string,\n services: Services,\n storage: AbstractStorage\n ) {\n this.projectKey = projectKey\n this._storage = storage\n this._services = services\n }\n\n add<ReferenceTypeId extends keyof ResourceMap>(\n typeId: ReferenceTypeId | 'custom-object',\n resource: ResourceMap[ReferenceTypeId]\n ) {\n //@ts-ignore\n if (typeId === 'custom-object') typeId = 'key-value-document'\n\n const parsedTypeId = typeId as ReferenceTypeId\n\n const service = this._services[parsedTypeId]\n if (service) {\n this._storage.add(this.projectKey, parsedTypeId, {\n ...getBaseResourceProperties(),\n ...resource,\n })\n } else {\n throw new Error(`Service for ${typeId} not implemented yet`)\n }\n }\n\n get<ReferenceTypeId extends keyof ResourceMap>(\n typeId: ReferenceTypeId,\n id: string\n ): ResourceMap[ReferenceTypeId] {\n return this._storage.get(\n this.projectKey,\n typeId,\n id,\n {}\n ) as ResourceMap[ReferenceTypeId]\n }\n\n // TODO: Not sure if we want to expose this...\n getRepository<ReferenceTypeId extends keyof RepositoryMap>(\n typeId: ReferenceTypeId\n ): RepositoryMap[ReferenceTypeId] {\n const service = this._services[typeId]\n if (service !== undefined) {\n return service.repository as RepositoryMap[ReferenceTypeId]\n }\n throw new Error('No such repository')\n }\n}\n","export const copyHeaders = (headers: Record<string, string>) => {\n const validHeaders = ['accept', 'host', 'authorization']\n const result: Record<string, string> = {}\n\n Object.entries(headers).forEach(([key, value]) => {\n if (validHeaders.includes(key.toLowerCase())) {\n result[key] = value\n }\n })\n\n return result\n}\n","export const DEFAULT_API_HOSTNAME = /^https:\\/\\/api\\..*?\\.commercetools.com:443$/\nexport const DEFAULT_AUTH_HOSTNAME = /^https:\\/\\/auth\\..*?\\.commercetools.com:443$/\n","import { Update } from '@commercetools/platform-sdk'\nimport { ParsedQs } from 'qs'\nimport { Request, Response, Router } from 'express'\nimport { AbstractResourceRepository } from '../repositories/abstract'\n\nexport default abstract class AbstractService {\n protected abstract getBasePath(): string\n public abstract repository: AbstractResourceRepository\n\n createStatusCode = 201\n\n constructor(parent: Router) {\n this.registerRoutes(parent)\n }\n\n extraRoutes(router: Router) {}\n\n registerRoutes(parent: Router) {\n const basePath = this.getBasePath()\n const router = Router({ mergeParams: true })\n\n // Bind this first since the `/:id` routes are currently a bit to greedy\n this.extraRoutes(router)\n\n router.get('/', this.get.bind(this))\n router.get('/key=:key', this.getWithKey.bind(this)) // same thing goes for the key routes\n router.get('/:id', this.getWithId.bind(this))\n\n router.delete('/key=:key', this.deletewithKey.bind(this))\n router.delete('/:id', this.deletewithId.bind(this))\n\n router.post('/', this.post.bind(this))\n router.post('/key=:key', this.postWithKey.bind(this))\n router.post('/:id', this.postWithId.bind(this))\n\n parent.use(`/${basePath}`, router)\n }\n\n get(request: Request, response: Response) {\n const result = this.repository.query(request.params.projectKey, {\n expand: this._parseParam(request.query.expand),\n where: this._parseParam(request.query.where),\n })\n return response.status(200).send(result)\n }\n\n getWithId(request: Request, response: Response) {\n const result = this._expandWithId(request, request.params['id'])\n if (!result) {\n return response.status(404).send()\n }\n console.log(JSON.stringify(result, null, 4))\n return response.status(200).send(result)\n }\n\n getWithKey(request: Request, response: Response) {\n const result = this.repository.getByKey(\n request.params.projectKey,\n request.params['key'],\n { expand: this._parseParam(request.query.expand) }\n )\n if (!result) return response.status(404).send()\n return response.status(200).send(result)\n }\n\n deletewithId(request: Request, response: Response) {\n const result = this.repository.delete(\n request.params.projectKey,\n request.params['id'],\n {\n expand: this._parseParam(request.query.expand),\n }\n )\n if (!result) {\n return response.status(404).send('Not found')\n }\n return response.status(200).send(result)\n }\n\n deletewithKey(request: Request, response: Response) {\n return response.status(500).send('Not implemented')\n }\n\n post(request: Request, response: Response) {\n const draft = request.body\n const resource = this.repository.create(request.params.projectKey, draft)\n const result = this._expandWithId(request, resource.id)\n return response.status(this.createStatusCode).send(result)\n }\n\n postWithId(request: Request, response: Response) {\n const updateRequest: Update = request.body\n const resource = this.repository.get(\n request.params.projectKey,\n request.params['id']\n )\n if (!resource) {\n return response.status(404).send('Not found')\n }\n\n if (resource.version !== updateRequest.version) {\n return response.status(409).send('Concurrent modification')\n }\n\n const updatedResource = this.repository.processUpdateActions(\n request.params.projectKey,\n resource,\n updateRequest.actions\n )\n\n const result = this._expandWithId(request, updatedResource.id)\n return response.status(200).send(result)\n }\n\n postWithKey(request: Request, response: Response) {\n return response.status(500).send('Not implemented')\n }\n\n protected _expandWithId(request: Request, resourceId: string) {\n const result = this.repository.get(request.params.projectKey, resourceId, {\n expand: this._parseParam(request.query.expand),\n })\n return result\n }\n\n // No idea what i'm doing\n private _parseParam(\n value: string | ParsedQs | string[] | ParsedQs[] | undefined\n ): string[] | undefined {\n if (Array.isArray(value)) {\n // @ts-ignore\n return value\n } else if (value !== undefined) {\n return [`${value}`]\n }\n return undefined\n }\n}\n","import {\n BaseResource,\n ConcurrentModificationError,\n Project,\n} from '@commercetools/platform-sdk'\nimport { CommercetoolsError } from '../exceptions'\n\nexport const checkConcurrentModification = (\n resource: BaseResource | Project,\n expectedVersion: number\n) => {\n if (resource.version === expectedVersion) return\n\n const identifier = (<BaseResource>resource).id\n ? (<BaseResource>resource).id\n : (<Project>resource).key\n\n throw new CommercetoolsError<ConcurrentModificationError>(\n {\n message: `Object ${identifier} has a different version than expected. Expected: ${expectedVersion} - Actual: ${resource.version}.`,\n currentVersion: resource.version,\n code: 'ConcurrentModification',\n },\n 409\n )\n}\n","import { RepositoryTypes } from './../types'\nimport deepEqual from 'deep-equal'\n\nimport {\n BaseResource,\n InvalidOperationError,\n Project,\n UpdateAction,\n} from '@commercetools/platform-sdk'\nimport { AbstractStorage } from '../storage'\nimport { checkConcurrentModification } from './errors'\nimport { CommercetoolsError } from '../exceptions'\n\nexport type QueryParams = {\n expand?: string[]\n where?: string[]\n}\n\nexport type GetParams = {\n expand?: string[]\n}\n\nexport abstract class AbstractRepository {\n protected _storage: AbstractStorage\n protected actions: Partial<\n Record<any, (projectKey: string, resource: any, action: any) => void>\n > = {}\n\n constructor(storage: AbstractStorage) {\n this._storage = storage\n }\n\n abstract save(projectKey: string, resource: BaseResource | Project): void\n\n processUpdateActions(\n projectKey: string,\n resource: BaseResource | Project,\n actions: UpdateAction[]\n ): BaseResource {\n // Deep-copy\n const modifiedResource = JSON.parse(JSON.stringify(resource))\n\n actions.forEach(action => {\n const updateFunc = this.actions[action.action]\n if (!updateFunc) {\n console.error(`No mock implemented for update action ${action.action}`)\n return\n }\n updateFunc(projectKey, modifiedResource, action)\n })\n\n if (!deepEqual(modifiedResource, resource)) {\n this.save(projectKey, modifiedResource)\n }\n return modifiedResource\n }\n}\n\nexport abstract class AbstractResourceRepository extends AbstractRepository {\n abstract create(projectKey: string, draft: any): BaseResource\n abstract getTypeId(): RepositoryTypes\n\n constructor(storage: AbstractStorage) {\n super(storage)\n this._storage.assertStorage(this.getTypeId())\n }\n\n query(projectKey: string, params: QueryParams = {}) {\n return this._storage.query(projectKey, this.getTypeId(), {\n expand: params.expand,\n where: params.where,\n })\n }\n\n get(\n projectKey: string,\n id: string,\n params: GetParams = {}\n ): BaseResource | null {\n return this._storage.get(projectKey, this.getTypeId(), id, params)\n }\n\n getByKey(\n projectKey: string,\n key: string,\n params: GetParams = {}\n ): BaseResource | null {\n return this._storage.getByKey(projectKey, this.getTypeId(), key, params)\n }\n\n delete(\n projectKey: string,\n id: string,\n params: GetParams = {}\n ): BaseResource | null {\n return this._storage.delete(projectKey, this.getTypeId(), id, params)\n }\n\n save(projectKey: string, resource: BaseResource) {\n const current = this.get(projectKey, resource.id)\n\n if (current) {\n checkConcurrentModification(current, resource.version)\n } else {\n if (resource.version !== 0) {\n throw new CommercetoolsError<InvalidOperationError>(\n {\n code: 'InvalidOperation',\n message: 'version on create must be 0',\n },\n 400\n )\n }\n }\n\n // @ts-ignore\n resource.version += 1\n this._storage.add(projectKey, this.getTypeId(), resource as any)\n }\n}\n","import { v4 as uuidv4 } from 'uuid'\nimport {\n CustomFields,\n CustomFieldsDraft,\n Money,\n Price,\n PriceDraft,\n Reference,\n ResourceIdentifier,\n Store,\n StoreKeyReference,\n StoreResourceIdentifier,\n Type,\n TypedMoney,\n} from '@commercetools/platform-sdk'\nimport { AbstractStorage } from '../storage'\n\nexport const createCustomFields = (\n draft: CustomFieldsDraft | undefined,\n projectKey: string,\n storage: AbstractStorage\n): CustomFields | undefined => {\n if (!draft) return undefined\n if (!draft.type) return undefined\n if (!draft.type.typeId) return undefined\n if (!draft.fields) return undefined\n\n const typeResource = storage.getByResourceIdentifier(\n projectKey,\n draft.type\n ) as Type\n\n if (!typeResource) {\n throw new Error(\n `No type '${draft.type.typeId}' with id=${draft.type.id} or key=${draft.type.key}`\n )\n }\n\n return {\n type: {\n typeId: draft.type.typeId,\n id: typeResource.id,\n },\n fields: draft.fields,\n }\n}\n\nexport const createPrice = (draft: PriceDraft): Price => {\n return {\n id: uuidv4(),\n value: createTypedMoney(draft.value),\n }\n}\n\nexport const createTypedMoney = (value: Money): TypedMoney => {\n return {\n type: 'centPrecision',\n fractionDigits: 2,\n ...value,\n }\n}\n\nexport const resolveStoreReference = (\n ref: StoreResourceIdentifier | undefined,\n projectKey: string,\n storage: AbstractStorage\n): StoreKeyReference | undefined => {\n if (!ref) return undefined\n const resource = storage.getByResourceIdentifier(projectKey, ref)\n if (!resource) {\n throw new Error('No such store')\n }\n\n const store = resource as Store\n return {\n typeId: 'store',\n key: store.key,\n }\n}\n\nexport const getReferenceFromResourceIdentifier = <T extends Reference>(\n resourceIdentifier: ResourceIdentifier,\n projectKey: string,\n storage: AbstractStorage\n): T => {\n const resource = storage.getByResourceIdentifier(\n projectKey,\n resourceIdentifier\n )\n if (!resource)\n throw new Error(\n `resource type ${resourceIdentifier.typeId} with id ${resourceIdentifier.id} and key ${resourceIdentifier.key} not found`\n )\n\n return ({\n typeId: resourceIdentifier.typeId,\n id: resource?.id,\n } as unknown) as T\n}\n","import {\n CartDiscount,\n CartDiscountChangeIsActiveAction,\n CartDiscountChangeSortOrderAction,\n CartDiscountDraft,\n CartDiscountSetDescriptionAction,\n CartDiscountSetKeyAction,\n CartDiscountSetValidFromAction,\n CartDiscountSetValidFromAndUntilAction,\n CartDiscountSetValidUntilAction,\n CartDiscountUpdateAction,\n CartDiscountValueAbsolute,\n CartDiscountValueDraft,\n CartDiscountValueFixed,\n CartDiscountValueGiftLineItem,\n CartDiscountValueRelative,\n ReferenceTypeId,\n} from '@commercetools/platform-sdk'\nimport { Writable } from 'types'\nimport { getBaseResourceProperties } from '../helpers'\nimport { AbstractResourceRepository } from './abstract'\nimport { createTypedMoney } from './helpers'\n\nexport class CartDiscountRepository extends AbstractResourceRepository {\n getTypeId(): ReferenceTypeId {\n return 'cart-discount'\n }\n\n create(projectKey: string, draft: CartDiscountDraft): CartDiscount {\n const resource: CartDiscount = {\n ...getBaseResourceProperties(),\n key: draft.key,\n description: draft.description,\n cartPredicate: draft.cartPredicate,\n isActive: draft.isActive || false,\n name: draft.name,\n references: [],\n target: draft.target,\n requiresDiscountCode: draft.requiresDiscountCode || false,\n sortOrder: draft.sortOrder,\n stackingMode: draft.stackingMode || 'Stacking',\n validFrom: draft.validFrom,\n validUntil: draft.validUntil,\n value: this.transformValueDraft(draft.value),\n }\n this.save(projectKey, resource)\n return resource\n }\n\n private transformValueDraft(value: CartDiscountValueDraft) {\n switch (value.type) {\n case 'absolute': {\n return {\n type: 'absolute',\n money: value.money.map(createTypedMoney),\n } as CartDiscountValueAbsolute\n }\n case 'fixed': {\n return {\n type: 'fixed',\n money: value.money.map(createTypedMoney),\n } as CartDiscountValueFixed\n }\n case 'giftLineItem': {\n return {\n ...value,\n } as CartDiscountValueGiftLineItem\n }\n case 'relative': {\n return {\n ...value,\n } as CartDiscountValueRelative\n }\n }\n\n return value\n }\n\n actions: Partial<\n Record<\n CartDiscountUpdateAction['action'],\n (\n projectKey: string,\n resource: Writable<CartDiscount>,\n action: any\n ) => void\n >\n > = {\n setKey: (\n projectKey: string,\n resource: Writable<CartDiscount>,\n { key }: CartDiscountSetKeyAction\n ) => {\n resource.key = key\n },\n setDescription: (\n projectKey: string,\n resource: Writable<CartDiscount>,\n { description }: CartDiscountSetDescriptionAction\n ) => {\n resource.description = description\n },\n setValidFrom: (\n projectKey: string,\n resource: Writable<CartDiscount>,\n { validFrom }: CartDiscountSetValidFromAction\n ) => {\n resource.validFrom = validFrom\n },\n setValidUntil: (\n projectKey: string,\n resource: Writable<CartDiscount>,\n { validUntil }: CartDiscountSetValidUntilAction\n ) => {\n resource.validUntil = validUntil\n },\n setValidFromAndUntil: (\n projectKey: string,\n resource: Writable<CartDiscount>,\n { validFrom, validUntil }: CartDiscountSetValidFromAndUntilAction\n ) => {\n resource.validFrom = validFrom\n resource.validUntil = validUntil\n },\n changeSortOrder: (\n projectKey: string,\n resource: Writable<CartDiscount>,\n { sortOrder }: CartDiscountChangeSortOrderAction\n ) => {\n resource.sortOrder = sortOrder\n },\n changeIsActive: (\n projectKey: string,\n resource: Writable<CartDiscount>,\n { isActive }: CartDiscountChangeIsActiveAction\n ) => {\n resource.isActive = isActive\n },\n }\n}\n","import { Router } from 'express'\nimport AbstractService from './abstract'\nimport { AbstractStorage } from '../storage'\nimport { CartDiscountRepository } from '../repositories/cart-discount'\n\nexport class CartDiscountService extends AbstractService {\n public repository: CartDiscountRepository\n\n constructor(parent: Router, storage: AbstractStorage) {\n super(parent)\n this.repository = new CartDiscountRepository(storage)\n }\n\n getBasePath() {\n return 'cart-discounts'\n }\n}\n","import {\n Cart,\n CartAddLineItemAction,\n CartDraft,\n CartRemoveLineItemAction,\n CartSetBillingAddressAction,\n CartSetCountryAction,\n CartSetCustomerEmailAction,\n CartSetCustomFieldAction,\n CartSetCustomTypeAction,\n CartSetLocaleAction,\n CartSetShippingAddressAction,\n GeneralError,\n LineItem,\n Product,\n ProductPagedQueryResponse,\n ProductVariant,\n ReferenceTypeId,\n} from '@commercetools/platform-sdk'\nimport { v4 as uuidv4 } from 'uuid'\nimport { getBaseResourceProperties } from '../helpers'\nimport { AbstractResourceRepository } from './abstract'\nimport { createCustomFields } from './helpers'\nimport { Writable } from '../types'\nimport { CommercetoolsError } from '../exceptions'\n\nexport class CartRepository extends AbstractResourceRepository {\n getTypeId(): ReferenceTypeId {\n return 'cart'\n }\n\n create(projectKey: string, draft: CartDraft): Cart {\n const resource: Cart = {\n ...getBaseResourceProperties(),\n cartState: 'Active',\n lineItems: [],\n customLineItems: [],\n totalPrice: {\n type: 'centPrecision',\n centAmount: 0,\n currencyCode: draft.currency,\n fractionDigits: 0,\n },\n taxMode: 'Platform',\n taxRoundingMode: 'HalfEven',\n taxCalculationMode: 'LineItemLevel',\n refusedGifts: [],\n origin: 'Customer',\n custom: createCustomFields(draft.custom, projectKey, this._storage),\n }\n this.save(projectKey, resource)\n return resource\n }\n\n getActiveCart(projectKey: string): Cart | undefined {\n // Get first active cart\n const results = this._storage.query(projectKey, this.getTypeId(), {\n where: [`cartState=\"Active\"`],\n })\n if (results.count > 0) {\n return results.results[0] as Cart\n }\n\n return\n }\n\n actions = {\n addLineItem: (\n projectKey: string,\n resource: Writable<Cart>,\n { productId, variantId, sku, quantity = 1 }: CartAddLineItemAction\n ) => {\n let product: Product | null = null\n let variant: ProductVariant | undefined\n\n if (productId && variantId) {\n // Fetch product and variant by ID\n product = this._storage.get(projectKey, 'product', productId, {})\n } else if (sku) {\n // Fetch product and variant by SKU\n const items = this._storage.query(projectKey, 'product', {\n where: [\n `masterData(current(masterVariant(sku=\"${sku}\"))) or masterData(current(variants(sku=\"${sku}\")))`,\n ],\n }) as ProductPagedQueryResponse\n\n if (items.count === 1) {\n product = items.results[0]\n }\n }\n\n if (!product) {\n // Check if product is found\n throw new CommercetoolsError<GeneralError>({\n code: 'General',\n message: sku\n ? `A product containing a variant with SKU '${sku}' not found.`\n : `A product with ID '${productId}' not found.`,\n })\n }\n\n // Find matching variant\n variant = [\n product.masterData.current.masterVariant,\n ...product.masterData.current.variants,\n ].find(x => {\n if (sku) return x.sku === sku\n if (variantId) return x.id === variantId\n return false\n })\n\n if (!variant) {\n // Check if variant is found\n throw new CommercetoolsError<GeneralError>({\n code: 'General',\n message: sku\n ? `A variant with SKU '${sku}' for product '${product.id}' not found.`\n : `A variant with ID '${variantId}' for product '${product.id}' not found.`,\n })\n }\n\n const alreadyAdded = resource.lineItems.some(\n x => x.productId === product?.id && x.variant.id === variant?.id\n )\n if (alreadyAdded) {\n // increase quantity and update total price\n resource.lineItems.map(x => {\n if (x.productId === product?.id && x.variant.id === variant?.id) {\n x.quantity += quantity\n x.totalPrice.centAmount = calculateLineItemTotalPrice(x)\n }\n return x\n })\n } else {\n // add line item\n if (!variant.prices?.length) {\n throw new CommercetoolsError<GeneralError>({\n code: 'General',\n message: `A product with ID '${productId}' doesn't have any prices.`,\n })\n }\n\n const price = variant.prices[0]\n resource.lineItems.push({\n id: uuidv4(),\n productId: product.id,\n productKey: product.key,\n name: product.masterData.current.name,\n productSlug: product.masterData.current.slug,\n productType: product.productType,\n variant,\n price: price,\n totalPrice: {\n ...price.value,\n centAmount: price.value.centAmount * quantity,\n },\n quantity,\n discountedPricePerQuantity: [],\n lineItemMode: 'Standard',\n priceMode: 'Platform',\n state: [],\n })\n }\n\n // Update cart total price\n resource.totalPrice.centAmount = calculateCartTotalPrice(resource)\n },\n removeLineItem: (\n projectKey: string,\n resource: Writable<Cart>,\n { lineItemId, quantity }: CartRemoveLineItemAction\n ) => {\n const lineItem = resource.lineItems.find(x => x.id === lineItemId)\n if (!lineItem) {\n // Check if product is found\n throw new CommercetoolsError<GeneralError>({\n code: 'General',\n message: `A line item with ID '${lineItemId}' not found.`,\n })\n }\n\n const shouldDelete = !quantity || quantity >= lineItem.quantity\n if (shouldDelete) {\n // delete line item\n resource.lineItems = resource.lineItems.filter(x => x.id !== lineItemId)\n } else {\n // decrease quantity and update total price\n resource.lineItems.map(x => {\n if (x.id === lineItemId && quantity) {\n x.quantity -= quantity\n x.totalPrice.centAmount = calculateLineItemTotalPrice(x)\n }\n return x\n })\n }\n\n // Update cart total price\n resource.totalPrice.centAmount = calculateCartTotalPrice(resource)\n },\n setBillingAddress: (\n projectKey: string,\n resource: Writable<Cart>,\n { address }: CartSetBillingAddressAction\n ) => {\n resource.billingAddress = address\n },\n setCountry: (\n projectKey: string,\n resource: Writable<Cart>,\n { country }: CartSetCountryAction\n ) => {\n resource.country = country\n },\n setCustomerEmail: (\n projectKey: string,\n resource: Writable<Cart>,\n { email }: CartSetCustomerEmailAction\n ) => {\n resource.customerEmail = email\n },\n setCustomField: (\n projectKey: string,\n resource: Cart,\n { name, value }: CartSetCustomFieldAction\n ) => {\n if (!resource.custom) {\n throw new Error('Resource has no custom field')\n }\n resource.custom.fields[name] = value\n },\n setCustomType: (\n projectKey: string,\n resource: Writable<Cart>,\n { type, fields }: CartSetCustomTypeAction\n ) => {\n if (!type) {\n resource.custom = undefined\n } else {\n const resolvedType = this._storage.getByResourceIdentifier(\n projectKey,\n type\n )\n if (!resolvedType) {\n throw new Error(`Type ${type} not found`)\n }\n\n resource.custom = {\n type: {\n typeId: 'type',\n id: resolvedType.id,\n },\n fields: fields || [],\n }\n }\n },\n setLocale: (\n projectKey: string,\n resource: Writable<Cart>,\n { locale }: CartSetLocaleAction\n ) => {\n resource.locale = locale\n },\n setShippingAddress: (\n projectKey: string,\n resource: Writable<Cart>,\n { address }: CartSetShippingAddressAction\n ) => {\n resource.shippingAddress = address\n },\n }\n}\n\nconst calculateLineItemTotalPrice = (lineItem: LineItem): number =>\n lineItem.price!.value.centAmount * lineItem.quantity\n\nconst calculateCartTotalPrice = (cart: Cart): number =>\n cart.lineItems.reduce((cur, item) => cur + item.totalPrice.centAmount, 0)\n","import AbstractService from './abstract'\nimport { Router } from 'express'\nimport { CartRepository } from '../repositories/cart'\nimport { AbstractStorage } from '../storage'\n\nexport class CartService extends AbstractService {\n public repository: CartRepository\n\n constructor(parent: Router, storage: AbstractStorage) {\n super(parent)\n this.repository = new CartRepository(storage)\n }\n\n getBasePath() {\n return 'carts'\n }\n}\n","import { v4 as uuidv4 } from 'uuid'\nimport {\n Category,\n CategoryChangeAssetNameAction,\n CategoryChangeSlugAction,\n CategoryDraft,\n CategorySetAssetDescriptionAction,\n CategorySetAssetSourcesAction,\n CategorySetDescriptionAction,\n CategorySetKeyAction,\n CategorySetMetaDescriptionAction,\n CategorySetMetaKeywordsAction,\n CategorySetMetaTitleAction,\n ReferenceTypeId,\n} from '@commercetools/platform-sdk'\nimport { Writable } from 'types'\nimport { getBaseResourceProperties } from '../helpers'\nimport { createCustomFields } from './helpers'\nimport { AbstractResourceRepository } from './abstract'\n\nexport class CategoryRepository extends AbstractResourceRepository {\n getTypeId(): ReferenceTypeId {\n return 'category'\n }\n\n create(projectKey: string, draft: CategoryDraft): Category {\n const resource: Category = {\n ...getBaseResourceProperties(),\n key: draft.key,\n name: draft.name,\n slug: draft.slug,\n orderHint: draft.orderHint || '',\n parent: draft.parent\n ? { typeId: 'category', id: draft.parent.id! }\n : undefined,\n ancestors: [], // TODO\n assets:\n draft.assets?.map(d => {\n return {\n id: uuidv4(),\n name: d.name,\n description: d.description,\n sources: d.sources,\n tags: d.tags,\n key: d.key,\n custom: createCustomFields(draft.custom, projectKey, this._storage),\n }\n }) || [],\n }\n this.save(projectKey, resource)\n return resource\n }\n\n actions = {\n changeAssetName: (\n projectKey: string,\n resource: Writable<Category>,\n { assetId, assetKey, name }: CategoryChangeAssetNameAction\n ) => {\n resource.assets?.forEach(asset => {\n if (assetId && assetId == asset.id) {\n asset.name = name\n }\n if (assetKey && assetKey == asset.key) {\n asset.name = name\n }\n })\n },\n changeSlug: (\n projectKey: string,\n resource: Writable<Category>,\n { slug }: CategoryChangeSlugAction\n ) => {\n resource.slug = slug\n },\n setKey: (\n projectKey: string,\n resource: Writable<Category>,\n { key }: CategorySetKeyAction\n ) => {\n resource.key = key\n },\n setAssetDescription: (\n projectKey: string,\n resource: Writable<Category>,\n { assetId, assetKey, description }: CategorySetAssetDescriptionAction\n ) => {\n resource.assets?.forEach(asset => {\n if (assetId && assetId == asset.id) {\n asset.description = description\n }\n if (assetKey && assetKey == asset.key) {\n asset.description = description\n }\n })\n },\n setAssetSources: (\n projectKey: string,\n resource: Writable<Category>,\n { assetId, assetKey, sources }: CategorySetAssetSourcesAction\n ) => {\n resource.assets?.forEach(asset => {\n if (assetId && assetId == asset.id) {\n asset.sources = sources\n }\n if (assetKey && assetKey == asset.key) {\n asset.sources = sources\n }\n })\n },\n setDescription: (\n projectKey: string,\n resource: Writable<Category>,\n { description }: CategorySetDescriptionAction\n ) => {\n resource.description = description\n },\n setMetaDescription: (\n projectKey: string,\n resource: Writable<Category>,\n { metaDescription }: CategorySetMetaDescriptionAction\n ) => {\n resource.metaDescription = metaDescription\n },\n setMetaKeywords: (\n projectKey: string,\n resource: Writable<Category>,\n { metaKeywords }: CategorySetMetaKeywordsAction\n ) => {\n resource.metaKeywords = metaKeywords\n },\n setMetaTitle: (\n projectKey: string,\n resource: Writable<Category>,\n { metaTitle }: CategorySetMetaTitleAction\n ) => {\n resource.metaTitle = metaTitle\n },\n }\n}\n","import AbstractService from './abstract'\nimport { Router } from 'express'\nimport { AbstractStorage } from '../storage'\nimport { CategoryRepository } from '../repositories/category'\n\nexport class CategoryServices extends AbstractService {\n public repository: CategoryRepository\n\n constructor(parent: Router, storage: AbstractStorage) {\n super(parent)\n this.repository = new CategoryRepository(storage)\n }\n\n getBasePath() {\n return 'categories'\n }\n}\n","import {\n Channel,\n ChannelDraft,\n ReferenceTypeId,\n} from '@commercetools/platform-sdk'\nimport { getBaseResourceProperties } from '../helpers'\nimport { AbstractResourceRepository } from './abstract'\n\nexport class ChannelRepository extends AbstractResourceRepository {\n getTypeId(): ReferenceTypeId {\n return 'channel'\n }\n\n create(projectKey: string, draft: ChannelDraft): Channel {\n const resource: Channel = {\n ...getBaseResourceProperties(),\n key: draft.key,\n roles: draft.roles || [],\n }\n this.save(projectKey, resource)\n return resource\n }\n}\n","import AbstractService from './abstract'\nimport { Router } from 'express'\nimport { ChannelRepository } from '../repositories/channel'\nimport { AbstractStorage } from '../storage'\n\nexport class ChannelService extends AbstractService {\n public repository: ChannelRepository\n\n constructor(parent: Router, storage: AbstractStorage) {\n super(parent)\n this.repository = new ChannelRepository(storage)\n }\n\n getBasePath() {\n return 'channels'\n }\n}\n","import {\n CustomerGroup,\n CustomerGroupChangeNameAction,\n CustomerGroupDraft,\n CustomerGroupSetKeyAction,\n ReferenceTypeId,\n} from '@commercetools/platform-sdk'\nimport { Writable } from 'types'\nimport { getBaseResourceProperties } from '../helpers'\nimport { AbstractResourceRepository } from './abstract'\n\nexport class CustomerGroupRepository extends AbstractResourceRepository {\n getTypeId(): ReferenceTypeId {\n return 'customer'\n }\n create(projectKey: string, draft: CustomerGroupDraft): CustomerGroup {\n const resource: CustomerGroup = {\n ...getBaseResourceProperties(),\n key: draft.key,\n name: draft.groupName,\n }\n this.save(projectKey, resource)\n return resource\n }\n\n actions = {\n setKey: (\n projectKey: string,\n resource: Writable<CustomerGroup>,\n { key }: CustomerGroupSetKeyAction\n ) => {\n resource.key = key\n },\n changeName: (\n projectKey: string,\n resource: Writable<CustomerGroup>,\n { name }: CustomerGroupChangeNameAction\n ) => {\n resource.name = name\n },\n }\n}\n","import AbstractService from './abstract'\nimport { Router } from 'express'\nimport { CustomerGroupRepository } from '../repositories/customer-group'\nimport { AbstractStorage } from '../storage'\n\nexport class CustomerGroupService extends AbstractService {\n public repository: CustomerGroupRepository\n\n constructor(parent: Router, storage: AbstractStorage) {\n super(parent)\n this.repository = new CustomerGroupRepository(storage)\n }\n\n getBasePath() {\n return 'customer-groups'\n }\n}\n","import {\n Customer,\n CustomerDraft,\n ReferenceTypeId,\n} from '@commercetools/platform-sdk'\nimport { getBaseResourceProperties } from '../helpers'\nimport { AbstractResourceRepository } from './abstract'\n\nexport class CustomerRepository extends AbstractResourceRepository {\n getTypeId(): ReferenceTypeId {\n return 'customer'\n }\n create(projectKey: string, draft: CustomerDraft): Customer {\n const resource: Customer = {\n ...getBaseResourceProperties(),\n email: draft.email,\n password: draft.password,\n isEmailVerified: draft.isEmailVerified || false,\n addresses: [],\n }\n this.save(projectKey, resource)\n return resource\n }\n}\n","import AbstractService from './abstract'\nimport { Router } from 'express'\nimport { CustomerRepository } from '../repositories/customer'\nimport { AbstractStorage } from '../storage'\n\nexport class CustomerService extends AbstractService {\n public repository: CustomerRepository\n\n constructor(parent: Router, storage: AbstractStorage) {\n super(parent)\n this.repository = new CustomerRepository(storage)\n }\n\n getBasePath() {\n return 'customers'\n }\n}\n","import {\n CustomObject,\n CustomObjectDraft,\n ReferenceTypeId,\n} from '@commercetools/platform-sdk'\nimport { checkConcurrentModification } from './errors'\nimport { AbstractResourceRepository } from './abstract'\nimport { Writable } from '../types'\nimport { getBaseResourceProperties } from '../helpers'\n\nexport class CustomObjectRepository extends AbstractResourceRepository {\n getTypeId(): ReferenceTypeId {\n return 'key-value-document'\n }\n\n create(projectKey: string, draft: Writable<CustomObjectDraft>): CustomObject {\n const current = this.getWithContainerAndKey(\n projectKey,\n draft.container,\n draft.key\n )\n\n const baseProperties = getBaseResourceProperties()\n if (current) {\n baseProperties.id = current.id\n\n if (!draft.version) {\n draft.version = current.version\n }\n\n checkConcurrentModification(current, draft.version)\n if (draft.value === current.value) {\n return current\n }\n\n baseProperties.version = current.version\n } else {\n if (draft.version) {\n baseProperties.version = draft.version\n }\n }\n\n const resource: CustomObject = {\n ...baseProperties,\n container: draft.container,\n key: draft.key,\n value: draft.value,\n }\n\n this.save(projectKey, resource)\n return resource\n }\n\n getWithContainerAndKey(projectKey: string, container: string, key: string) {\n const items = this._storage.all(projectKey, this.getTypeId()) as Array<\n CustomObject\n >\n return items.find(item => item.container === container && item.key === key)\n }\n}\n","import AbstractService from './abstract'\nimport { Request, Response, Router } from 'express'\nimport { CustomObjectRepository } from '../repositories/custom-object'\nimport { AbstractStorage } from '../storage'\nimport { CustomObjectDraft } from '@commercetools/platform-sdk'\n\nexport class CustomObjectService extends AbstractService {\n public repository: CustomObjectRepository\n\n constructor(parent: Router, storage: AbstractStorage) {\n super(parent)\n this.repository = new CustomObjectRepository(storage)\n }\n\n getBasePath() {\n return 'custom-objects'\n }\n\n extraRoutes(router: Router) {\n router.get('/:container/:key', this.getWithContainerAndKey.bind(this))\n router.post('/:container/:key', this.createWithContainerAndKey.bind(this))\n router.delete('/:container/:key', this.deleteWithContainerAndKey.bind(this))\n }\n\n getWithContainerAndKey(request: Request, response: Response) {\n const result = this.repository.getWithContainerAndKey(\n request.params.projectKey,\n request.params.container,\n request.params.key\n )\n\n if (!result) {\n return response.status(404).send('Not Found')\n }\n return response.status(200).send(result)\n }\n\n createWithContainerAndKey(request: Request, response: Response) {\n const draft: CustomObjectDraft = {\n ...request.body,\n key: request.params.key,\n container: request.params.container,\n }\n\n const result = this.repository.create(request.params.projectKey, draft)\n return response.status(200).send(result)\n }\n\n deleteWithContainerAndKey(request: Request, response: Response) {\n const current = this.repository.getWithContainerAndKey(\n request.params.projectKey,\n request.params.container,\n request.params.key\n )\n\n if (!current) {\n return response.status(404).send('Not Found')\n }\n\n const result = this.repository.delete(request.params.projectKey, current.id)\n\n return response.status(200).send(result)\n }\n}\n","import {\n CartDiscountReference,\n DiscountCode,\n DiscountCodeChangeCartDiscountsAction,\n DiscountCodeChangeIsActiveAction,\n DiscountCodeDraft,\n DiscountCodeSetCartPredicateAction,\n DiscountCodeSetDescriptionAction,\n DiscountCodeSetMaxApplicationsAction,\n DiscountCodeSetMaxApplicationsPerCustomerAction,\n DiscountCodeSetNameAction,\n DiscountCodeSetValidFromAction,\n DiscountCodeSetValidFromAndUntilAction,\n DiscountCodeSetValidUntilAction,\n DiscountCodeUpdateAction,\n ReferenceTypeId,\n} from '@commercetools/platform-sdk'\nimport { Writable } from 'types'\nimport { getBaseResourceProperties } from '../helpers'\nimport { AbstractResourceRepository } from './abstract'\n\nexport class DiscountCodeRepository extends AbstractResourceRepository {\n getTypeId(): ReferenceTypeId {\n return 'cart-discount'\n }\n\n create(projectKey: string, draft: DiscountCodeDraft): DiscountCode {\n console.log(draft)\n const resource: DiscountCode = {\n ...getBaseResourceProperties(),\n applicationVersion: 1,\n cartDiscounts: draft.cartDiscounts.map(\n (obj): CartDiscountReference => ({\n typeId: 'cart-discount',\n id: obj.id!,\n })\n ),\n cartPredicate: draft.cartPredicate,\n code: draft.code,\n description: draft.description,\n groups: draft.groups || [],\n isActive: draft.isActive || true,\n name: draft.name,\n references: [],\n validFrom: draft.validFrom,\n validUntil: draft.validUntil,\n maxApplications: draft.maxApplications,\n maxApplicationsPerCustomer: draft.maxApplicationsPerCustomer,\n }\n this.save(projectKey, resource)\n return resource\n }\n\n actions: Partial<\n Record<\n DiscountCodeUpdateAction['action'],\n (\n projectKey: string,\n resource: Writable<DiscountCode>,\n action: any\n ) => void\n >\n > = {\n changeIsActive: (\n projectKey: string,\n resource: Writable<DiscountCode>,\n { isActive }: DiscountCodeChangeIsActiveAction\n ) => {\n resource.isActive = isActive\n },\n changeCartDiscounts: (\n projectKey: string,\n resource: Writable<DiscountCode>,\n { cartDiscounts }: DiscountCodeChangeCartDiscountsAction\n ) => {\n resource.cartDiscounts = cartDiscounts.map(\n (obj): CartDiscountReference => ({\n typeId: 'cart-discount',\n id: obj.id!,\n })\n )\n },\n setDescription: (\n projectKey: string,\n resource: Writable<DiscountCode>,\n { description }: DiscountCodeSetDescriptionAction\n ) => {\n resource.description = description\n },\n setCartPredicate: (\n projectKey: string,\n resource: Writable<DiscountCode>,\n { cartPredicate }: DiscountCodeSetCartPredicateAction\n ) => {\n resource.cartPredicate = cartPredicate\n },\n setName: (\n projectKey: string,\n resource: Writable<DiscountCode>,\n { name }: DiscountCodeSetNameAction\n ) => {\n resource.name = name\n },\n setMaxApplications: (\n projectKey: string,\n resource: Writable<DiscountCode>,\n { maxApplications }: DiscountCodeSetMaxApplicationsAction\n ) => {\n resource.maxApplications = maxApplications\n },\n setMaxApplicationsPerCustomer: (\n projectKey: string,\n resource: Writable<DiscountCode>,\n {\n maxApplicationsPerCustomer,\n }: DiscountCodeSetMaxApplicationsPerCustomerAction\n ) => {\n resource.maxApplicationsPerCustomer = maxApplicationsPerCustomer\n },\n setValidFrom: (\n projectKey: string,\n resource: Writable<DiscountCode>,\n { validFrom }: DiscountCodeSetValidFromAction\n ) => {\n resource.validFrom = validFrom\n },\n setValidUntil: (\n projectKey: string,\n resource: Writable<DiscountCode>,\n { validUntil }: DiscountCodeSetValidUntilAction\n ) => {\n resource.validUntil = validUntil\n },\n setValidFromAndUntil: (\n projectKey: string,\n resource: Writable<DiscountCode>,\n { validFrom, validUntil }: DiscountCodeSetValidFromAndUntilAction\n ) => {\n resource.validFrom = validFrom\n resource.validUntil = validUntil\n },\n }\n}\n","import { Router } from 'express'\nimport AbstractService from './abstract'\nimport { AbstractStorage } from '../storage'\nimport { DiscountCodeRepository } from '../repositories/discount-code'\n\nexport class DiscountCodeService extends AbstractService {\n public repository: DiscountCodeRepository\n\n constructor(parent: Router, storage: AbstractStorage) {\n super(parent)\n this.repository = new DiscountCodeRepository(storage)\n }\n\n getBasePath() {\n return 'discount-codes'\n }\n}\n","import {\n Extension,\n ExtensionChangeDestinationAction,\n ExtensionChangeTriggersAction,\n ExtensionDraft,\n ExtensionSetKeyAction,\n ExtensionSetTimeoutInMsAction,\n ExtensionUpdateAction,\n ReferenceTypeId,\n} from '@commercetools/platform-sdk'\nimport { Writable } from '../types'\nimport { getBaseResourceProperties } from '../helpers'\nimport { AbstractResourceRepository } from './abstract'\n\nexport class ExtensionRepository extends AbstractResourceRepository {\n getTypeId(): ReferenceTypeId {\n return 'extension'\n }\n\n create(projectKey: string, draft: ExtensionDraft): Extension {\n const resource: Extension = {\n ...getBaseResourceProperties(),\n key: draft.key,\n timeoutInMs: draft.timeoutInMs,\n destination: draft.destination,\n triggers: draft.triggers,\n }\n this.save(projectKey, resource)\n return resource\n }\n\n actions: Record<\n ExtensionUpdateAction['action'],\n (projectKey: string, resource: Writable<Extension>, action: any) => void\n > = {\n setKey: (\n projectKey: string,\n resource: Writable<Extension>,\n { key }: ExtensionSetKeyAction\n ) => {\n resource.key = key\n },\n setTimeoutInMs: (\n projectKey: string,\n resource: Writable<Extension>,\n { timeoutInMs }: ExtensionSetTimeoutInMsAction\n ) => {\n resource.timeoutInMs = timeoutInMs\n },\n changeTriggers: (\n projectKey: string,\n resource: Writable<Extension>,\n { triggers }: ExtensionChangeTriggersAction\n ) => {\n resource.triggers = triggers\n },\n changeDestination: (\n projectKey: string,\n resource: Writable<Extension>,\n { destination }: ExtensionChangeDestinationAction\n ) => {\n resource.destination = destination\n },\n }\n}\n","import AbstractService from './abstract'\nimport { Router } from 'express'\nimport { AbstractStorage } from '../storage'\nimport { ExtensionRepository } from '../repositories/extension'\n\nexport class ExtensionServices extends AbstractService {\n public repository: ExtensionRepository\n\n constructor(parent: Router, storage: AbstractStorage) {\n super(parent)\n this.repository = new ExtensionRepository(storage)\n }\n\n getBasePath() {\n return 'extensions'\n }\n}\n","import {\n InventoryEntry,\n InventoryEntryChangeQuantityAction,\n InventoryEntryDraft,\n InventoryEntrySetCustomFieldAction,\n InventoryEntrySetCustomTypeAction,\n InventoryEntrySetExpectedDeliveryAction,\n InventoryEntrySetRestockableInDaysAction,\n ReferenceTypeId,\n} from '@commercetools/platform-sdk'\nimport { getBaseResourceProperties } from '../helpers'\nimport { AbstractResourceRepository } from './abstract'\nimport { createCustomFields } from './helpers'\nimport { Writable } from '../types'\n\nexport class InventoryEntryRepository extends AbstractResourceRepository {\n getTypeId(): ReferenceTypeId {\n return 'inventory-entry'\n }\n\n create(projectKey: string, draft: InventoryEntryDraft): InventoryEntry {\n const resource: InventoryEntry = {\n ...getBaseResourceProperties(),\n sku: draft.sku,\n quantityOnStock: draft.quantityOnStock,\n availableQuantity: draft.quantityOnStock,\n expectedDelivery: draft.expectedDelivery,\n restockableInDays: draft.restockableInDays,\n supplyChannel: {\n ...draft.supplyChannel,\n typeId: 'channel',\n id: draft.supplyChannel?.id ?? '',\n },\n custom: createCustomFields(draft.custom, projectKey, this._storage),\n }\n this.save(projectKey, resource)\n return resource\n }\n\n actions = {\n changeQuantity: (\n projectKey: string,\n resource: Writable<InventoryEntry>,\n { quantity }: InventoryEntryChangeQuantityAction\n ) => {\n resource.quantityOnStock = quantity\n // don't know active reservations so just set to same value\n resource.availableQuantity = quantity\n },\n setExpectedDelivery: (\n projectKey: string,\n resource: Writable<InventoryEntry>,\n { expectedDelivery }: InventoryEntrySetExpectedDeliveryAction\n ) => {\n resource.expectedDelivery = new Date(expectedDelivery!).toISOString()\n },\n setCustomField: (\n projectKey: string,\n resource: InventoryEntry,\n { name, value }: InventoryEntrySetCustomFieldAction\n ) => {\n if (!resource.custom) {\n throw new Error('Resource has no custom field')\n }\n resource.custom.fields[name] = value\n },\n setCustomType: (\n projectKey: string,\n resource: Writable<InventoryEntry>,\n { type, fields }: InventoryEntrySetCustomTypeAction\n ) => {\n if (!type) {\n resource.custom = undefined\n } else {\n const resolvedType = this._storage.getByResourceIdentifier(\n projectKey,\n type\n )\n if (!resolvedType) {\n throw new Error(`Type ${type} not found`)\n }\n\n resource.custom = {\n type: {\n typeId: 'type',\n id: resolvedType.id,\n },\n fields: fields || [],\n }\n }\n },\n setRestockableInDays: (\n projectKey: string,\n resource: Writable<InventoryEntry>,\n { restockableInDays }: InventoryEntrySetRestockableInDaysAction\n ) => {\n resource.restockableInDays = restockableInDays\n },\n }\n}\n","import AbstractService from './abstract'\nimport { Router } from 'express'\nimport { AbstractStorage } from '../storage'\nimport { InventoryEntryRepository } from '../repositories/inventory-entry'\n\nexport class InventoryEntryService extends AbstractService {\n public repository: InventoryEntryRepository\n\n constructor(parent: Router, storage: AbstractStorage) {\n super(parent)\n this.repository = new InventoryEntryRepository(storage)\n }\n\n getBasePath() {\n return 'inventory'\n }\n}\n","import AbstractService from './abstract'\nimport { Request, Response, Router } from 'express'\nimport { AbstractStorage } from '../storage'\nimport { CartRepository } from '../repositories/cart'\n\nexport class MyCartService extends AbstractService {\n public repository: CartRepository\n\n constructor(parent: Router, storage: AbstractStorage) {\n super(parent)\n this.repository = new CartRepository(storage)\n }\n\n getBasePath() {\n return 'me'\n }\n\n registerRoutes(parent: Router) {\n // Overwrite this function to be able to handle /me/active-cart path.\n const basePath = this.getBasePath()\n const router = Router({ mergeParams: true })\n\n this.extraRoutes(router)\n\n router.get('/active-cart', this.activeCart.bind(this))\n router.get('/carts/', this.get.bind(this))\n router.get('/carts/:id', this.getWithId.bind(this))\n\n router.delete('/carts/:id', this.deletewithId.bind(this))\n\n router.post('/carts/', this.post.bind(this))\n router.post('/carts/:id', this.postWithId.bind(this))\n\n parent.use(`/${basePath}`, router)\n }\n\n activeCart(request: Request, response: Response) {\n const resource = this.repository.getActiveCart(request.params.projectKey)\n if (!resource) {\n return response.status(404).send('Not found')\n }\n return response.status(200).send(resource)\n }\n}\n","import {\n Payment,\n PaymentAddTransactionAction,\n PaymentDraft,\n PaymentSetCustomFieldAction,\n PaymentSetCustomTypeAction,\n ReferenceTypeId,\n StateReference,\n TransactionDraft,\n} from '@commercetools/platform-sdk'\nimport { AbstractResourceRepository } from './abstract'\nimport {\n createCustomFields,\n createTypedMoney,\n getReferenceFromResourceIdentifier,\n} from './helpers'\nimport { getBaseResourceProperties } from '../helpers'\nimport { v4 as uuidv4 } from 'uuid'\nimport { Writable } from '../types'\n\nexport class PaymentRepository extends AbstractResourceRepository {\n getTypeId(): ReferenceTypeId {\n return 'payment'\n }\n\n create(projectKey: string, draft: PaymentDraft): Payment {\n const resource: Payment = {\n ...getBaseResourceProperties(),\n amountPlanned: createTypedMoney(draft.amountPlanned),\n paymentMethodInfo: draft.paymentMethodInfo!,\n paymentStatus: draft.paymentStatus\n ? {\n ...draft.paymentStatus,\n state: draft.paymentStatus.state\n ? getReferenceFromResourceIdentifier<StateReference>(\n draft.paymentStatus.state,\n projectKey,\n this._storage\n )\n : undefined,\n }\n : {},\n transactions: (draft.transactions || []).map(t =>\n this.transactionFromTransactionDraft(t, projectKey)\n ),\n interfaceInteractions: (draft.interfaceInteractions || []).map(\n interaction =>\n createCustomFields(interaction, projectKey, this._storage)!\n ),\n custom: createCustomFields(draft.custom, projectKey, this._storage),\n }\n\n this.save(projectKey, resource)\n return resource\n }\n\n transactionFromTransactionDraft = (\n draft: TransactionDraft,\n projectKey: string\n ) => ({\n ...draft,\n id: uuidv4(),\n amount: createTypedMoney(draft.amount),\n custom: createCustomFields(draft.custom, projectKey, this._storage),\n })\n\n actions = {\n setCustomField: (\n projectKey: string,\n resource: Payment,\n { name, value }: PaymentSetCustomFieldAction\n ) => {\n if (!resource.custom) {\n throw new Error('Resource has no custom field')\n }\n\n resource.custom.fields[name] = value\n },\n setCustomType: (\n projectKey: string,\n resource: Writable<Payment>,\n { type, fields }: PaymentSetCustomTypeAction\n ) => {\n if (!type) {\n resource.custom = undefined\n } else {\n const resolvedType = this._storage.getByResourceIdentifier(\n projectKey,\n type\n )\n if (!resolvedType) {\n throw new Error(`Type ${type} not found`)\n }\n\n resource.custom = {\n type: {\n typeId: 'type',\n id: resolvedType.id,\n },\n fields: fields || [],\n }\n }\n },\n addTransaction: (\n projectKey: string,\n resource: Writable<Payment>,\n { transaction }: PaymentAddTransactionAction\n ) => {\n resource.transactions = [\n ...resource.transactions,\n this.transactionFromTransactionDraft(transaction, projectKey),\n ]\n },\n // addInterfaceInteraction: () => {},\n // changeAmountPlanned: () => {},\n // changeTransactionInteractionId: () => {},\n // changeTransactionState: () => {},\n // changeTransactionTimestamp: () => {},\n // setAmountPaid: () => {},\n // setAmountRefunded: () => {},\n // setAnonymousId: () => {},\n // setAuthorization: () => {},\n // setCustomer: () => {},\n // setExternalId: () => {},\n // setInterfaceId: () => {},\n // setKey: () => {},\n // setMethodInfoInterface: () => {},\n // setMethodInfoMethod: () => {},\n // setMethodInfoName: () => {},\n // setStatusInterfaceCode: () => {},\n // setStatusInterfaceText: () => {},\n // transitionState: () => {},\n }\n}\n","import AbstractService from './abstract'\nimport { Router } from 'express'\nimport { AbstractStorage } from '../storage'\nimport { PaymentRepository } from '../repositories/payment'\n\nexport class MyPaymentService extends AbstractService {\n public repository: PaymentRepository\n\n constructor(parent: Router, storage: AbstractStorage) {\n super(parent)\n this.repository = new PaymentRepository(storage)\n }\n\n getBasePath() {\n return 'me/payments'\n }\n}\n","import assert from 'assert'\nimport {\n Cart,\n CustomLineItem,\n CustomLineItemDraft,\n GeneralError,\n LineItem,\n LineItemImportDraft,\n Order,\n OrderAddPaymentAction,\n OrderChangeOrderStateAction,\n OrderChangePaymentStateAction,\n OrderFromCartDraft,\n OrderImportDraft,\n OrderSetBillingAddressAction,\n OrderSetCustomerEmailAction,\n OrderSetCustomFieldAction,\n OrderSetCustomTypeAction,\n OrderSetLocaleAction,\n OrderSetOrderNumberAction,\n OrderSetShippingAddressAction,\n OrderSetStoreAction,\n Product,\n ProductPagedQueryResponse,\n ProductVariant,\n ReferenceTypeId,\n Store,\n} from '@commercetools/platform-sdk'\nimport { AbstractResourceRepository, QueryParams } from './abstract'\nimport {\n createCustomFields,\n createPrice,\n createTypedMoney,\n resolveStoreReference,\n} from './helpers'\nimport { Writable } from '../types'\nimport { getBaseResourceProperties } from '../helpers'\nimport { CommercetoolsError } from '../exceptions'\n\nexport class OrderRepository extends AbstractResourceRepository {\n getTypeId(): ReferenceTypeId {\n return 'order'\n }\n\n create(projectKey: string, draft: OrderFromCartDraft): Order {\n assert(draft.cart, 'draft.cart is missing')\n\n const cart = this._storage.getByResourceIdentifier(\n projectKey,\n draft.cart\n ) as Cart | null\n if (!cart) {\n throw new Error('Cannot find cart')\n }\n\n const resource: Order = {\n ...getBaseResourceProperties(),\n orderNumber: draft.orderNumber,\n orderState: 'Open',\n lineItems: [],\n customLineItems: [],\n totalPrice: cart.totalPrice,\n refusedGifts: [],\n origin: 'Customer',\n syncInfo: [],\n lastMessageSequenceNumber: 0,\n }\n this.save(projectKey, resource)\n return resource\n }\n\n import(projectKey: string, draft: OrderImportDraft): Order {\n // TODO: Check if order with given orderNumber already exists\n assert(this, 'OrderRepository not valid')\n const resource: Order = {\n ...getBaseResourceProperties(),\n\n billingAddress: draft.billingAddress,\n shippingAddress: draft.shippingAddress,\n\n custom: createCustomFields(draft.custom, projectKey, this._storage),\n customerEmail: draft.customerEmail,\n lastMessageSequenceNumber: 0,\n orderNumber: draft.orderNumber,\n orderState: draft.orderState || 'Open',\n origin: draft.origin || 'Customer',\n paymentState: draft.paymentState,\n refusedGifts: [],\n store: resolveStoreReference(draft.store, projectKey, this._storage),\n syncInfo: [],\n\n lineItems:\n draft.lineItems?.map(item =>\n this.lineItemFromImportDraft.bind(this)(projectKey, item)\n ) || [],\n customLineItems:\n draft.customLineItems?.map(item =>\n this.customLineItemFromImportDraft.bind(this)(projectKey, item)\n ) || [],\n\n totalPrice: {\n type: 'centPrecision',\n ...draft.totalPrice,\n fractionDigits: 2,\n },\n }\n this.save(projectKey, resource)\n return resource\n }\n\n private lineItemFromImportDraft(\n projectKey: string,\n draft: LineItemImportDraft\n ): LineItem {\n let product: Product\n let variant: ProductVariant | undefined\n\n if (draft.variant.sku) {\n variant = {\n id: 0,\n sku: draft.variant.sku,\n }\n\n var items = this._storage.query(projectKey, 'product', {\n where: [\n `masterData(current(masterVariant(sku=\"${draft.variant.sku}\"))) or masterData(current(variants(sku=\"${draft.variant.sku}\")))`,\n ],\n }) as ProductPagedQueryResponse\n\n if (items.count !== 1) {\n throw new CommercetoolsError<GeneralError>({\n code: 'General',\n message: `A product containing a variant with SKU '${draft.variant.sku}' not found.`,\n })\n }\n\n product = items.results[0]\n if (product.masterData.current.masterVariant.sku === draft.variant.sku) {\n variant = product.masterData.current.masterVariant\n } else {\n variant = product.masterData.current.variants.find(\n v => v.sku === draft.variant.sku\n )\n }\n if (!variant) {\n throw new Error('Internal state error')\n }\n } else {\n throw new Error('No product found')\n }\n\n const lineItem: LineItem = {\n ...getBaseResourceProperties(),\n custom: createCustomFields(draft.custom, projectKey, this._storage),\n discountedPricePerQuantity: [],\n lineItemMode: 'Standard',\n name: draft.name,\n price: createPrice(draft.price),\n priceMode: 'Platform',\n productId: product.id,\n productType: product.productType,\n quantity: draft.quantity,\n state: draft.state || [],\n taxRate: draft.taxRate,\n totalPrice: createTypedMoney(draft.price.value),\n variant: {\n id: variant.id,\n sku: variant.sku,\n price: createPrice(draft.price),\n },\n }\n\n return lineItem\n }\n\n private customLineItemFromImportDraft(\n projectKey: string,\n draft: CustomLineItemDraft\n ): CustomLineItem {\n const lineItem: CustomLineItem = {\n ...getBaseResourceProperties(),\n custom: createCustomFields(draft.custom, projectKey, this._storage),\n discountedPricePerQuantity: [],\n money: createTypedMoney(draft.money),\n name: draft.name,\n quantity: draft.quantity,\n slug: draft.slug,\n state: [],\n totalPrice: createTypedMoney(draft.money),\n }\n\n return lineItem\n }\n\n getWithOrderNumber(\n projectKey: string,\n orderNumber: string,\n params: QueryParams = {}\n ): Order | undefined {\n const result = this._storage.query(projectKey, this.getTypeId(), {\n ...params,\n where: [`orderNumber=\"${orderNumber}\"`],\n })\n if (result.count === 1) {\n return result.results[0] as Order\n }\n\n // Catch this for now, should be checked when creating/updating\n if (result.count > 1) {\n throw new Error('Duplicate order numbers')\n }\n\n return\n }\n\n actions = {\n addPayment: (\n projectKey: string,\n resource: Writable<Order>,\n { payment }: OrderAddPaymentAction\n ) => {\n const resolvedPayment = this._storage.getByResourceIdentifier(\n projectKey,\n payment\n )\n if (!resolvedPayment) {\n throw new Error(`Payment ${payment.id} not found`)\n }\n\n if (!resource.paymentInfo) {\n resource.paymentInfo = {\n payments: [],\n }\n }\n\n resource.paymentInfo.payments.push({\n typeId: 'payment',\n id: payment.id!,\n })\n },\n changeOrderState: (\n projectKey: string,\n resource: Writable<Order>,\n { orderState }: OrderChangeOrderStateAction\n ) => {\n resource.orderState = orderState\n },\n changePaymentState: (\n projectKey: string,\n resource: Writable<Order>,\n { paymentState }: OrderChangePaymentStateAction\n ) => {\n resource.paymentState = paymentState\n },\n setBillingAddress: (\n projectKey: string,\n resource: Writable<Order>,\n { address }: OrderSetBillingAddressAction\n ) => {\n resource.billingAddress = address\n },\n setCustomerEmail: (\n projectKey: string,\n resource: Writable<Order>,\n { email }: OrderSetCustomerEmailAction\n ) => {\n resource.customerEmail = email\n },\n setCustomField: (\n projectKey: string,\n resource: Order,\n { name, value }: OrderSetCustomFieldAction\n ) => {\n if (!resource.custom) {\n throw new Error('Resource has no custom field')\n }\n resource.custom.fields[name] = value\n },\n setCustomType: (\n projectKey: string,\n resource: Writable<Order>,\n { type, fields }: OrderSetCustomTypeAction\n ) => {\n if (!type) {\n resource.custom = undefined\n } else {\n const resolvedType = this._storage.getByResourceIdentifier(\n projectKey,\n type\n )\n if (!resolvedType) {\n throw new Error(`Type ${type} not found`)\n }\n\n resource.custom = {\n type: {\n typeId: 'type',\n id: resolvedType.id,\n },\n fields: fields || [],\n }\n }\n },\n setLocale: (\n projectKey: string,\n resource: Writable<Order>,\n { locale }: OrderSetLocaleAction\n ) => {\n resource.locale = locale\n },\n setOrderNumber: (\n projectKey: string,\n resource: Writable<Order>,\n { orderNumber }: OrderSetOrderNumberAction\n ) => {\n resource.orderNumber = orderNumber\n },\n setShippingAddress: (\n projectKey: string,\n resource: Writable<Order>,\n { address }: OrderSetShippingAddressAction\n ) => {\n resource.shippingAddress = address\n },\n setStore: (\n projectKey: string,\n resource: Writable<Order>,\n { store }: OrderSetStoreAction\n ) => {\n if (!store) return\n const resolvedType = this._storage.getByResourceIdentifier(\n projectKey,\n store\n )\n if (!resolvedType) {\n throw new Error(`No store found with key=${store.key}`)\n }\n\n const storeReference = resolvedType as Store\n resource.store = {\n typeId: 'store',\n key: storeReference.key,\n }\n },\n }\n}\n","import AbstractService from './abstract'\nimport { Request, Response, Router } from 'express'\nimport { OrderRepository } from '../repositories/order'\nimport { AbstractStorage } from '../storage'\n\nexport class OrderService extends AbstractService {\n public repository: OrderRepository\n\n constructor(parent: Router, storage: AbstractStorage) {\n super(parent)\n this.repository = new OrderRepository(storage)\n }\n\n getBasePath() {\n return 'orders'\n }\n\n extraRoutes(router: Router) {\n router.post('/import', this.import.bind(this))\n router.get('/order-number=:orderNumber', this.getWithOrderNumber.bind(this))\n }\n\n import(request: Request, response: Response) {\n const importDraft = request.body\n const resource = this.repository.import(\n request.params.projectKey,\n importDraft\n )\n return response.status(200).send(resource)\n }\n\n getWithOrderNumber(request: Request, response: Response) {\n const resource = this.repository.getWithOrderNumber(\n request.params.projectKey,\n request.params.orderNumber,\n request.query\n )\n if (resource) {\n return response.status(200).send(resource)\n }\n return response.status(404).send('Not found')\n }\n}\n","import AbstractService from './abstract'\nimport { Router } from 'express'\nimport { AbstractStorage } from '../storage'\nimport { PaymentRepository } from '../repositories/payment'\n\nexport class PaymentService extends AbstractService {\n public repository: PaymentRepository\n\n constructor(parent: Router, storage: AbstractStorage) {\n super(parent)\n this.repository = new PaymentRepository(storage)\n }\n\n getBasePath() {\n return 'payments'\n }\n}\n","export const parseFilterExpression = (filter: string | string[]) => {\n if (typeof filter === 'object') {\n const filters = filter.map(parse)\n return filters.join(' and ')\n }\n return parse(filter)\n}\n\nconst parse = (filter: string) => {\n let parsed = filter.replace(/:/g, '=')\n\n do {\n parsed = parsed.replace(/(.*)\\.(.*)=(.*)$/g, '$1($2=$3)')\n } while (parsed.includes('.'))\n\n return parsed\n}\n","import { ParsedQs } from 'qs'\nimport {\n ProductDraft,\n ProductProjection,\n ProductVariant,\n ProductVariantDraft,\n} from '@commercetools/platform-sdk'\nimport { getBaseResourceProperties } from '../helpers'\nimport { AbstractResourceRepository } from './abstract'\nimport { RepositoryTypes } from '../types'\nimport { parseFilterExpression } from '../lib/filterParser'\n\nexport class ProductProjectionRepository extends AbstractResourceRepository {\n getTypeId(): RepositoryTypes {\n return 'product-projection'\n }\n\n create(projectKey: string, draft: ProductDraft): ProductProjection {\n if (!draft.masterVariant) {\n throw new Error(\n `must provider mastervariant for product projection with key ${draft.key}`\n )\n }\n\n if (!draft.productType.id) {\n throw new Error(\n `must provider product type id for product projection with key ${draft.key}`\n )\n }\n\n const resource: ProductProjection = {\n ...getBaseResourceProperties(),\n name: draft.name,\n slug: draft.slug,\n categories: [],\n productType: { ...draft.productType, id: draft.productType.id! },\n masterVariant: variantFromDraft(0, draft.masterVariant!),\n variants:\n draft.variants?.map((variant, index) => {\n return variantFromDraft(index + 1, variant)\n }) ?? [],\n\n // @ts-ignore\n searchKeywords: draft.searchKeywords,\n }\n\n this.save(projectKey, resource)\n\n return resource\n }\n\n search(projectKey: string, query: ParsedQs) {\n const wherePredicate = parseFilterExpression(query.filter as any)\n\n const results = this._storage.query(projectKey, this.getTypeId(), {\n where: wherePredicate,\n }) //TODO: this is a partial implementation, but I don't really have the time to implement an actual search API right now\n\n return results\n }\n\n actions = {}\n}\n\nconst variantFromDraft = (\n variantId: number,\n variant: ProductVariantDraft\n): ProductVariant => {\n return {\n id: variantId,\n sku: variant?.sku,\n attributes: variant?.attributes,\n }\n}\n","import { ProductProjectionRepository } from './../repositories/product-projection'\nimport AbstractService from './abstract'\nimport { AbstractStorage } from '../storage'\nimport { Request, Response, Router } from 'express'\n\nexport class ProductProjectionService extends AbstractService {\n public repository: ProductProjectionRepository\n\n constructor(parent: Router, storage: AbstractStorage) {\n super(parent)\n this.repository = new ProductProjectionRepository(storage)\n }\n\n getBasePath() {\n return 'product-projections'\n }\n\n extraRoutes(router: Router) {\n router.get('/search', this.search.bind(this))\n }\n\n search(request: Request, response: Response) {\n const resource = this.repository.search(\n request.params.projectKey,\n request.query\n )\n return response.status(200).send(resource)\n }\n}\n","import {\n Price,\n Product,\n ProductData,\n ProductDraft,\n ProductPublishAction,\n ProductSetAttributeAction,\n ProductVariant,\n ProductVariantDraft,\n ReferenceTypeId,\n} from '@commercetools/platform-sdk'\nimport { getBaseResourceProperties } from '../helpers'\nimport { AbstractResourceRepository } from './abstract'\nimport { Writable } from '../types'\n\nexport class ProductRepository extends AbstractResourceRepository {\n getTypeId(): ReferenceTypeId {\n return 'product'\n }\n\n create(projectKey: string, draft: ProductDraft): Product {\n const productData = {\n name: draft.name,\n slug: draft.slug,\n categories: [],\n masterVariant:\n draft.masterVariant && variantFromDraft(0, draft.masterVariant!),\n variants:\n draft.variants &&\n draft.variants.map((variant, index) => {\n return variantFromDraft(index + 1, variant)\n }),\n\n // @ts-ignore\n searchKeywords: draft.searchKeywords,\n }\n\n const resource: Product = {\n ...getBaseResourceProperties(),\n masterData: {\n // @ts-ignore\n current: draft.publish ? productData : undefined,\n // @ts-ignore\n staged: draft.publish ? undefined : productData,\n hasStagedChanges: draft.publish ?? true,\n published: draft.publish ?? false,\n },\n }\n\n this.save(projectKey, resource)\n\n return resource\n }\n\n actions = {\n publish: (\n projectKey: string,\n resource: Writable<Product>,\n { scope }: ProductPublishAction\n ) => {\n if (resource.masterData.staged) {\n resource.masterData.current = resource.masterData.staged\n // @ts-ignore\n resource.masterData.staged = undefined\n }\n resource.masterData.hasStagedChanges = false\n resource.masterData.published = true\n },\n setAttribute: (\n projectKey: string,\n resource: Writable<Product>,\n { variantId, sku, name, value, staged }: ProductSetAttributeAction\n ) => {\n const isStaged = staged !== undefined ? staged : false\n const productData = getProductData(resource, isStaged)\n const { variant, isMasterVariant, variantIndex } = getVariant(\n productData,\n variantId,\n sku\n )\n if (!variant) {\n throw new Error(\n `Variant with id ${variantId} or sku ${sku} not found on product ${resource.id}`\n )\n }\n\n if (!variant.attributes) {\n variant.attributes = []\n }\n\n const existingAttr = variant.attributes.find(attr => attr.name === name)\n if (existingAttr) {\n existingAttr.value = value\n } else {\n variant.attributes.push({\n name,\n value,\n })\n }\n if (isStaged) {\n resource.masterData.staged = productData\n if (isMasterVariant) {\n resource.masterData.staged.masterVariant = variant\n } else {\n resource.masterData.staged.variants[variantIndex] = variant\n }\n resource.masterData.hasStagedChanges = true\n } else {\n resource.masterData.current = productData\n if (isMasterVariant) {\n resource.masterData.current.masterVariant = variant\n } else {\n resource.masterData.current.variants[variantIndex] = variant\n }\n }\n },\n // 'setKey': () => {},\n // 'changeName': () => {},\n // 'setDescription': () => {},\n // 'changeSlug': () => {},\n // 'addVariant': () => {},\n // 'removeVariant': () => {},\n // 'changeMasterVariant': () => {},\n // 'addPrice': () => {},\n // 'setPrices': () => {},\n // 'changePrice': () => {},\n // 'removePrice': () => {},\n // 'setProductPriceCustomType': () => {},\n // 'setProductPriceCustomField': () => {},\n // 'setDiscountedPrice': () => {},\n // 'setAttributeInAllVariants': () => {},\n // 'addToCategory': () => {},\n // 'setCategoryOrderHint': () => {},\n // 'removeFromCategory': () => {},\n // 'setTaxCategory': () => {},\n // 'setSku': () => {},\n // 'setProductVariantKey': () => {},\n // 'addExternalImage': () => {},\n // 'moveImageToPosition': () => {},\n // 'removeImage': () => {},\n // 'setImageLabel': () => {},\n // 'addAsset': () => {},\n // 'removeAsset': () => {},\n // 'setAssetKey': () => {},\n // 'changeAssetOrder': () => {},\n // 'changeAssetName': () => {},\n // 'setAssetDescription': () => {},\n // 'setAssetTags': () => {},\n // 'setAssetSources': () => {},\n // 'setAssetCustomType': () => {},\n // 'setAssetCustomField': () => {},\n // 'setSearchKeywords': () => {},\n // 'setMetaTitle': () => {},\n // 'setMetaDescription': () => {},\n // 'setMetaKeywords': () => {},\n // 'revertStagedChanges': () => {},\n // 'revertStagedVariantChanges': () => {},\n // 'unpublish': () => {},\n // 'transitionState': () => {},\n }\n}\n\nconst getProductData = (product: Product, staged: boolean) => {\n if (!staged && product.masterData.current) {\n return product.masterData.current\n }\n return product.masterData.staged\n}\n\ninterface VariantResult {\n variant: Writable<ProductVariant> | undefined\n isMasterVariant: boolean\n variantIndex: number\n}\n\nconst getVariant = (\n productData: ProductData,\n variantId?: number,\n sku?: string\n): VariantResult => {\n const variants = [productData.masterVariant, ...productData.variants]\n const foundVariant = variants.find((variant: ProductVariant) => {\n if (variantId) {\n return variant.id === variantId\n }\n if (sku) {\n return variant.sku === sku\n }\n return false\n })\n\n const isMasterVariant = foundVariant === productData.masterVariant\n return {\n variant: foundVariant,\n isMasterVariant,\n variantIndex:\n !isMasterVariant && foundVariant\n ? productData.variants.indexOf(foundVariant)\n : -1,\n }\n}\n\nconst variantFromDraft = (\n variantId: number,\n variant: ProductVariantDraft\n): ProductVariant => {\n return {\n id: variantId,\n sku: variant?.sku,\n attributes: variant?.attributes,\n prices: variant?.prices as Price[],\n }\n}\n","import AbstractService from './abstract'\nimport { Router } from 'express'\nimport { AbstractStorage } from '../storage'\nimport { ProductRepository } from '../repositories/product'\n\nexport class ProductService extends AbstractService {\n public repository: ProductRepository\n\n constructor(parent: Router, storage: AbstractStorage) {\n super(parent)\n this.repository = new ProductRepository(storage)\n }\n\n getBasePath() {\n return 'products'\n }\n}\n","import { getBaseResourceProperties } from '../helpers'\nimport {\n AttributeDefinition,\n AttributeDefinitionDraft,\n AttributeType,\n ProductType,\n ProductTypeChangeLabelAction,\n ProductTypeChangeLocalizedEnumValueLabelAction,\n ProductTypeDraft,\n ProductTypeUpdateAction,\n ReferenceTypeId,\n} from '@commercetools/platform-sdk'\nimport { AbstractResourceRepository } from './abstract'\nimport { Writable } from 'types'\n\nexport class ProductTypeRepository extends AbstractResourceRepository {\n getTypeId(): ReferenceTypeId {\n return 'product-type'\n }\n\n create(projectKey: string, draft: ProductTypeDraft): ProductType {\n const resource: ProductType = {\n ...getBaseResourceProperties(),\n key: draft.key,\n name: draft.name,\n description: draft.description,\n attributes: (draft.attributes ?? []).map(a =>\n this.attributeDefinitionFromAttributeDefinitionDraft(projectKey, a)\n ),\n }\n\n this.save(projectKey, resource)\n return resource\n }\n\n attributeDefinitionFromAttributeDefinitionDraft = (\n _projectKey: string,\n draft: AttributeDefinitionDraft\n ): AttributeDefinition => ({\n ...draft,\n attributeConstraint: draft.attributeConstraint ?? 'None',\n inputHint: draft.inputHint ?? 'SingleLine',\n isSearchable: draft.isSearchable ?? true,\n })\n\n getWithKey(projectKey: string, key: string): ProductType | undefined {\n const result = this._storage.query(projectKey, this.getTypeId(), {\n where: [`key=\"${key}\"`],\n })\n if (result.count === 1) {\n return result.results[0] as ProductType\n }\n\n // Catch this for now, should be checked when creating/updating\n if (result.count > 1) {\n throw new Error('Duplicate product type key')\n }\n\n return\n }\n\n actions: Partial<\n Record<\n ProductTypeUpdateAction['action'],\n (projectKey: string, resource: Writable<ProductType>, action: any) => void\n >\n > = {\n changeLocalizedEnumValueLabel: (\n projectKey: string,\n resource: Writable<ProductType>,\n {\n attributeName,\n newValue,\n }: ProductTypeChangeLocalizedEnumValueLabelAction\n ) => {\n const updateAttributeType = (type: Writable<AttributeType>) => {\n switch (type.name) {\n case 'lenum':\n type.values.forEach(v => {\n if (v.key == newValue.key) {\n v.label = newValue.label\n }\n })\n return\n case 'set':\n updateAttributeType(type.elementType)\n return\n }\n }\n\n resource.attributes?.forEach(value => {\n if (value.name == attributeName) {\n updateAttributeType(value.type)\n }\n })\n },\n changeLabel: (\n projectKey: string,\n resource: Writable<ProductType>,\n { attributeName, label }: ProductTypeChangeLabelAction\n ) => {\n resource.attributes?.forEach(value => {\n if (value.name == attributeName) {\n value.label = label\n }\n })\n },\n }\n}\n","import { ProductTypeRepository } from '../repositories/product-type'\nimport AbstractService from './abstract'\nimport { Request, Response, Router } from 'express'\nimport { AbstractStorage } from '../storage'\n\nexport class ProductTypeService extends AbstractService {\n public repository: ProductTypeRepository\n\n constructor(parent: Router, storage: AbstractStorage) {\n super(parent)\n this.repository = new ProductTypeRepository(storage)\n }\n\n getBasePath() {\n return 'product-types'\n }\n\n extraRoutes(router: Router) {\n router.get('/key=:key', this.getWithKey.bind(this))\n }\n\n getWithKey(request: Request, response: Response) {\n const resource = this.repository.getWithKey(\n request.params.projectKey,\n request.params.key\n )\n if (resource) {\n return response.status(200).send(resource)\n }\n return response.status(404).send('Not found')\n }\n}\n","import {\n Project,\n ProjectChangeCartsConfigurationAction,\n ProjectChangeCountriesAction,\n ProjectChangeCountryTaxRateFallbackEnabledAction,\n ProjectChangeCurrenciesAction,\n ProjectChangeLanguagesAction,\n ProjectChangeMessagesEnabledAction,\n ProjectChangeNameAction,\n ProjectChangeOrderSearchStatusAction,\n ProjectChangeProductSearchIndexingEnabledAction,\n ProjectSetExternalOAuthAction,\n ProjectSetShippingRateInputTypeAction,\n ProjectUpdateAction,\n} from '@commercetools/platform-sdk'\nimport { InvalidOperationError } from '@commercetools/platform-sdk'\nimport { Writable } from 'types'\nimport { checkConcurrentModification } from './errors'\nimport { CommercetoolsError } from '../exceptions'\nimport { AbstractRepository } from './abstract'\n\nexport class ProjectRepository extends AbstractRepository {\n get(projectKey: string): Project | null {\n const data = this._storage.getProject(projectKey)\n return this._storage.getProject(projectKey)\n }\n\n save(projectKey: string, resource: Project) {\n const current = this.get(projectKey)\n\n if (current) {\n checkConcurrentModification(current, resource.version)\n } else {\n if (resource.version !== 0) {\n throw new CommercetoolsError<InvalidOperationError>(\n {\n code: 'InvalidOperation',\n message: 'version on create must be 0',\n },\n 400\n )\n }\n }\n\n // @ts-ignore\n resource.version += 1\n this._storage.saveProject(resource)\n }\n\n actions: Partial<\n Record<\n ProjectUpdateAction['action'],\n (projectKey: string, resource: Writable<Project>, action: any) => void\n >\n > = {\n changeName: (\n projectKey: string,\n resource: Writable<Project>,\n { name }: ProjectChangeNameAction\n ) => {\n resource.name = name\n },\n changeCurrencies: (\n projectKey: string,\n resource: Writable<Project>,\n { currencies }: ProjectChangeCurrenciesAction\n ) => {\n resource.currencies = currencies\n },\n changeCountries: (\n projectKey: string,\n resource: Writable<Project>,\n { countries }: ProjectChangeCountriesAction\n ) => {\n resource.countries = countries\n },\n changeLanguages: (\n projectKey: string,\n resource: Writable<Project>,\n { languages }: ProjectChangeLanguagesAction\n ) => {\n resource.languages = languages\n },\n changeMessagesEnabled: (\n projectKey: string,\n resource: Writable<Project>,\n { messagesEnabled }: ProjectChangeMessagesEnabledAction\n ) => {\n resource.messages.enabled = messagesEnabled\n },\n changeProductSearchIndexingEnabled: (\n projectKey: string,\n resource: Writable<Project>,\n { enabled }: ProjectChangeProductSearchIndexingEnabledAction\n ) => {\n if (!resource.searchIndexing?.products) {\n throw new Error('Invalid project state')\n }\n resource.searchIndexing.products.status = enabled\n ? 'Activated'\n : 'Deactivated'\n resource.searchIndexing.products.lastModifiedAt = new Date().toISOString()\n },\n changeOrderSearchStatus: (\n projectKey: string,\n resource: Writable<Project>,\n { status }: ProjectChangeOrderSearchStatusAction\n ) => {\n if (!resource.searchIndexing?.orders) {\n throw new Error('Invalid project state')\n }\n resource.searchIndexing.orders.status = status\n resource.searchIndexing.orders.lastModifiedAt = new Date().toISOString()\n },\n setShippingRateInputType: (\n projectKey: string,\n resource: Writable<Project>,\n { shippingRateInputType }: ProjectSetShippingRateInputTypeAction\n ) => {\n resource.shippingRateInputType = shippingRateInputType\n },\n setExternalOAuth: (\n projectKey: string,\n resource: Writable<Project>,\n { externalOAuth }: ProjectSetExternalOAuthAction\n ) => {\n resource.externalOAuth = externalOAuth\n },\n changeCountryTaxRateFallbackEnabled: (\n projectKey: string,\n resource: Writable<Project>,\n {\n countryTaxRateFallbackEnabled,\n }: ProjectChangeCountryTaxRateFallbackEnabledAction\n ) => {\n resource.carts.countryTaxRateFallbackEnabled = countryTaxRateFallbackEnabled\n },\n changeCartsConfiguration: (\n projectKey: string,\n resource: Writable<Project>,\n { cartsConfiguration }: ProjectChangeCartsConfigurationAction\n ) => {\n console.log(cartsConfiguration)\n resource.carts = cartsConfiguration || {\n countryTaxRateFallbackEnabled: false,\n deleteDaysAfterLastModification: 90,\n }\n },\n }\n}\n","import { Router } from 'express'\nimport { Request, Response } from 'express'\nimport { AbstractStorage } from '../storage'\nimport { ProjectRepository } from '../repositories/project'\nimport { Update } from '@commercetools/platform-sdk'\n\nexport class ProjectService {\n public repository: ProjectRepository\n\n constructor(parent: Router, storage: AbstractStorage) {\n this.repository = new ProjectRepository(storage)\n this.registerRoutes(parent)\n }\n\n registerRoutes(parent: Router) {\n parent.get('', this.get.bind(this))\n parent.post('', this.post.bind(this))\n }\n\n get(request: Request, response: Response) {\n const projectKey = request.params.projectKey\n const project = this.repository.get(projectKey)\n return response.status(200).send(project)\n }\n\n post(request: Request, response: Response) {\n const updateRequest: Update = request.body\n const project = this.repository.get(request.params.projectKey)\n\n if (!project) {\n return response.status(404).send({})\n }\n\n const updatedResource = this.repository.processUpdateActions(\n request.params.projectKey,\n project,\n updateRequest.actions\n )\n\n return response.status(200).send({})\n }\n}\n","import {\n createCustomFields,\n createTypedMoney,\n getReferenceFromResourceIdentifier,\n} from './helpers'\nimport {\n ReferenceTypeId,\n ShippingMethod,\n ShippingMethodAddShippingRateAction,\n ShippingMethodAddZoneAction,\n ShippingMethodChangeIsDefaultAction,\n ShippingMethodChangeNameAction,\n ShippingMethodDraft,\n ShippingMethodRemoveZoneAction,\n ShippingMethodSetDescriptionAction,\n ShippingMethodSetKeyAction,\n ShippingMethodSetLocalizedDescriptionAction,\n ShippingMethodSetPredicateAction,\n ShippingMethodUpdateAction,\n ShippingRate,\n ShippingRateDraft,\n ZoneRate,\n ZoneRateDraft,\n ZoneReference,\n} from '@commercetools/platform-sdk'\nimport { getBaseResourceProperties } from '../helpers'\nimport { AbstractResourceRepository } from './abstract'\nimport { Writable } from 'types'\nimport { _ } from 'ajv'\nimport deepEqual from 'deep-equal'\n\nexport class ShippingMethodRepository extends AbstractResourceRepository {\n getTypeId(): ReferenceTypeId {\n return 'shipping-method'\n }\n\n create(projectKey: string, draft: ShippingMethodDraft): ShippingMethod {\n const resource: ShippingMethod = {\n ...getBaseResourceProperties(),\n ...draft,\n taxCategory: getReferenceFromResourceIdentifier(\n draft.taxCategory,\n projectKey,\n this._storage\n ),\n zoneRates: draft.zoneRates?.map(z =>\n this._transformZoneRateDraft(projectKey, z)\n ),\n custom: createCustomFields(draft.custom, projectKey, this._storage),\n }\n this.save(projectKey, resource)\n return resource\n }\n\n private _transformZoneRateDraft = (\n projectKey: string,\n draft: ZoneRateDraft\n ): ZoneRate => ({\n ...draft,\n zone: getReferenceFromResourceIdentifier<ZoneReference>(\n draft.zone,\n projectKey,\n this._storage\n ),\n shippingRates: draft.shippingRates?.map(this._transformShippingRate),\n })\n\n private _transformShippingRate = (rate: ShippingRateDraft): ShippingRate => {\n return {\n price: createTypedMoney(rate.price),\n freeAbove: rate.freeAbove && createTypedMoney(rate.freeAbove),\n tiers: rate.tiers || [],\n }\n }\n\n actions: Partial<\n Record<\n ShippingMethodUpdateAction['action'],\n (\n projectKey: string,\n resource: Writable<ShippingMethod>,\n action: any\n ) => void\n >\n > = {\n addShippingRate: (\n projectKey: string,\n resource: Writable<ShippingMethod>,\n { shippingRate, zone }: ShippingMethodAddShippingRateAction\n ) => {\n const rate = this._transformShippingRate(shippingRate)\n\n resource.zoneRates.forEach(zoneRate => {\n if (zoneRate.zone.id == zone.id) {\n zoneRate.shippingRates.push(rate)\n return\n }\n })\n resource.zoneRates.push({\n zone: {\n typeId: 'zone',\n id: zone.id!,\n },\n shippingRates: [rate],\n })\n },\n removeShippingRate: (\n projectKey: string,\n resource: Writable<ShippingMethod>,\n { shippingRate, zone }: ShippingMethodAddShippingRateAction\n ) => {\n const rate = this._transformShippingRate(shippingRate)\n\n resource.zoneRates.forEach(zoneRate => {\n if (zoneRate.zone.id == zone.id) {\n zoneRate.shippingRates = zoneRate.shippingRates.filter(otherRate => {\n return !deepEqual(rate, otherRate)\n })\n }\n })\n },\n addZone: (\n projectKey: string,\n resource: Writable<ShippingMethod>,\n { zone }: ShippingMethodAddZoneAction\n ) => {\n const zoneReference = getReferenceFromResourceIdentifier<ZoneReference>(\n zone,\n projectKey,\n this._storage\n )\n\n if (resource.zoneRates === undefined) {\n resource.zoneRates = []\n }\n\n resource.zoneRates.push({\n zone: zoneReference,\n shippingRates: [],\n })\n },\n removeZone: (\n projectKey: string,\n resource: Writable<ShippingMethod>,\n { zone }: ShippingMethodRemoveZoneAction\n ) => {\n resource.zoneRates = resource.zoneRates.filter(zoneRate => {\n return zoneRate.zone.id !== zone.id\n })\n },\n setKey: (\n projectKey: string,\n resource: Writable<ShippingMethod>,\n { key }: ShippingMethodSetKeyAction\n ) => {\n resource.key = key\n },\n setDescription: (\n projectKey: string,\n resource: Writable<ShippingMethod>,\n { description }: ShippingMethodSetDescriptionAction\n ) => {\n resource.description = description\n },\n setLocalizedDescription: (\n projectKey: string,\n resource: Writable<ShippingMethod>,\n { localizedDescription }: ShippingMethodSetLocalizedDescriptionAction\n ) => {\n resource.localizedDescription = localizedDescription\n },\n setPredicate: (\n projectKey: string,\n resource: Writable<ShippingMethod>,\n { predicate }: ShippingMethodSetPredicateAction\n ) => {\n resource.predicate = predicate\n },\n changeIsDefault: (\n projectKey: string,\n resource: Writable<ShippingMethod>,\n { isDefault }: ShippingMethodChangeIsDefaultAction\n ) => {\n resource.isDefault = isDefault\n },\n changeName: (\n projectKey: string,\n resource: Writable<ShippingMethod>,\n { name }: ShippingMethodChangeNameAction\n ) => {\n resource.name = name\n },\n }\n}\n","import { ShippingMethodRepository } from '../repositories/shipping-method'\nimport AbstractService from './abstract'\nimport { Router } from 'express'\nimport { AbstractStorage } from '../storage'\n\nexport class ShippingMethodService extends AbstractService {\n public repository: ShippingMethodRepository\n\n constructor(parent: Router, storage: AbstractStorage) {\n super(parent)\n this.repository = new ShippingMethodRepository(storage)\n }\n\n getBasePath() {\n return 'shipping-methods'\n }\n}\n","import {\n CustomerReference,\n ReferenceTypeId,\n ShoppingList,\n ShoppingListDraft,\n} from '@commercetools/platform-sdk'\nimport { getBaseResourceProperties } from '../helpers'\nimport { AbstractResourceRepository } from './abstract'\nimport {\n createCustomFields,\n getReferenceFromResourceIdentifier,\n} from './helpers'\n\nexport class ShoppingListRepository extends AbstractResourceRepository {\n getTypeId(): ReferenceTypeId {\n return 'shopping-list'\n }\n create(projectKey: string, draft: ShoppingListDraft): ShoppingList {\n // const product =\n\n const resource: ShoppingList = {\n ...getBaseResourceProperties(),\n ...draft,\n custom: createCustomFields(draft.custom, projectKey, this._storage),\n textLineItems: [],\n lineItems: draft.lineItems?.map(e => ({\n ...getBaseResourceProperties(),\n ...e,\n addedAt: e.addedAt ?? '',\n productId: e.productId ?? '',\n name: {},\n quantity: e.quantity ?? 1,\n productType: { typeId: 'product-type', id: '' },\n custom: createCustomFields(e.custom, projectKey, this._storage),\n })),\n customer: draft.customer\n ? getReferenceFromResourceIdentifier<CustomerReference>(\n draft.customer,\n projectKey,\n this._storage\n )\n : undefined,\n store: draft.store?.key\n ? { typeId: 'store', key: draft.store.key! }\n : undefined,\n }\n this.save(projectKey, resource)\n return resource\n }\n}\n","import { ShoppingListRepository } from './../repositories/shopping-list'\nimport AbstractService from './abstract'\nimport { Router } from 'express'\nimport { AbstractStorage } from '../storage'\n\nexport class ShoppingListService extends AbstractService {\n public repository: ShoppingListRepository\n\n constructor(parent: Router, storage: AbstractStorage) {\n super(parent)\n this.repository = new ShoppingListRepository(storage)\n }\n\n getBasePath() {\n return 'shopping-lists'\n }\n}\n","import { getBaseResourceProperties } from '../helpers'\nimport { getReferenceFromResourceIdentifier } from './helpers'\nimport {\n ReferenceTypeId,\n State,\n StateChangeKeyAction,\n StateDraft,\n StateSetDescriptionAction,\n StateSetNameAction,\n StateSetRolesAction,\n StateUpdateAction,\n} from '@commercetools/platform-sdk'\nimport { AbstractResourceRepository } from './abstract'\nimport { Writable } from 'types'\n\nexport class StateRepository extends AbstractResourceRepository {\n getTypeId(): ReferenceTypeId {\n return 'state'\n }\n\n create(projectKey: string, draft: StateDraft): State {\n const resource: State = {\n ...getBaseResourceProperties(),\n ...draft,\n builtIn: false,\n initial: draft.initial || false,\n transitions: (draft.transitions || []).map(t =>\n getReferenceFromResourceIdentifier(t, projectKey, this._storage)\n ),\n }\n\n this.save(projectKey, resource)\n return resource\n }\n\n actions: Partial<\n Record<\n StateUpdateAction['action'],\n (projectKey: string, resource: Writable<State>, action: any) => void\n >\n > = {\n changeKey: (\n projectKey: string,\n resource: Writable<State>,\n { key }: StateChangeKeyAction\n ) => {\n resource.key = key\n },\n setDescription: (\n projectKey: string,\n resource: Writable<State>,\n { description }: StateSetDescriptionAction\n ) => {\n resource.description = description\n },\n setName: (\n projectKey: string,\n resource: Writable<State>,\n { name }: StateSetNameAction\n ) => {\n resource.name = name\n },\n setRoles: (\n projectKey: string,\n resource: Writable<State>,\n { roles }: StateSetRolesAction\n ) => {\n resource.roles = roles\n },\n }\n}\n","import { StateRepository } from '../repositories/state'\nimport AbstractService from './abstract'\nimport { Router } from 'express'\nimport { AbstractStorage } from '../storage'\n\nexport class StateService extends AbstractService {\n public repository: StateRepository\n\n constructor(parent: Router, storage: AbstractStorage) {\n super(parent)\n this.repository = new StateRepository(storage)\n }\n\n getBasePath() {\n return 'states'\n }\n}\n","import {\n Store,\n StoreDraft,\n ReferenceTypeId,\n StoreUpdateAction,\n StoreSetNameAction,\n ChannelReference,\n StoreSetDistributionChannelsAction,\n ChannelResourceIdentifier,\n StoreSetLanguagesAction,\n} from '@commercetools/platform-sdk'\nimport { Writable } from 'types'\nimport { getBaseResourceProperties } from '../helpers'\nimport { AbstractResourceRepository } from './abstract'\nimport { getReferenceFromResourceIdentifier } from './helpers'\n\nexport class StoreRepository extends AbstractResourceRepository {\n getTypeId(): ReferenceTypeId {\n return 'store'\n }\n\n create(projectKey: string, draft: StoreDraft): Store {\n const resource: Store = {\n ...getBaseResourceProperties(),\n key: draft.key,\n name: draft.name,\n languages: draft.languages,\n distributionChannels: this.transformChannels(\n projectKey,\n draft.distributionChannels\n ),\n supplyChannels: this.transformChannels(projectKey, draft.supplyChannels),\n }\n this.save(projectKey, resource)\n return resource\n }\n\n private transformChannels(\n projectKey: string,\n channels?: ChannelResourceIdentifier[]\n ) {\n if (!channels) return []\n\n return channels.map(ref =>\n getReferenceFromResourceIdentifier<ChannelReference>(\n ref,\n projectKey,\n this._storage\n )\n )\n }\n\n actions: Partial<\n Record<\n StoreUpdateAction['action'],\n (projectKey: string, resource: Writable<Store>, action: any) => void\n >\n > = {\n setName: (\n projectKey: string,\n resource: Writable<Store>,\n { name }: StoreSetNameAction\n ) => {\n resource.name = name\n },\n setDistributionChannels: (\n projectKey: string,\n resource: Writable<Store>,\n { distributionChannels }: StoreSetDistributionChannelsAction\n ) => {\n resource.distributionChannels = this.transformChannels(\n projectKey,\n distributionChannels\n )\n },\n setLanguages: (\n projectKey: string,\n resource: Writable<Store>,\n { languages }: StoreSetLanguagesAction\n ) => {\n resource.languages = languages\n },\n }\n}\n","import AbstractService from './abstract'\nimport { Router } from 'express'\nimport { StoreRepository } from '../repositories/store'\nimport { AbstractStorage } from '../storage'\n\nexport class StoreService extends AbstractService {\n public repository: StoreRepository\n\n constructor(parent: Router, storage: AbstractStorage) {\n super(parent)\n this.repository = new StoreRepository(storage)\n }\n\n getBasePath() {\n return 'stores'\n }\n}\n","import {\n InvalidInputError,\n ReferenceTypeId,\n Subscription,\n SubscriptionDraft,\n} from '@commercetools/platform-sdk'\nimport { CommercetoolsError } from '../exceptions'\nimport { getBaseResourceProperties } from '../helpers'\nimport { AbstractResourceRepository } from './abstract'\n\nexport class SubscriptionRepository extends AbstractResourceRepository {\n getTypeId(): ReferenceTypeId {\n return 'subscription'\n }\n create(projectKey: string, draft: SubscriptionDraft): Subscription {\n // TODO: We could actually test this here by using the aws sdk. For now\n // hardcode a failed check when account id is 0000000000\n if (draft.destination.type == 'SQS') {\n const queueURL = new URL(draft.destination.queueUrl)\n const accountId = queueURL.pathname.split('/')[1]\n if (accountId == '0000000000') {\n const dest = draft.destination\n throw new CommercetoolsError<InvalidInputError>(\n {\n code: 'InvalidInput',\n message:\n 'A test message could not be delivered to this destination: ' +\n `SQS ${dest.queueUrl} in ${dest.region} for ${dest.accessKey}. ` +\n 'Please make sure your destination is correctly configured.',\n },\n 400\n )\n }\n }\n\n const resource: Subscription = {\n ...getBaseResourceProperties(),\n changes: draft.changes || [],\n destination: draft.destination,\n format: draft.format || {\n type: 'Platform',\n },\n key: draft.key,\n messages: draft.messages || [],\n status: 'Healthy',\n }\n this.save(projectKey, resource)\n return resource\n }\n}\n","import AbstractService from './abstract'\nimport { Router } from 'express'\nimport { AbstractStorage } from '../storage'\nimport { SubscriptionRepository } from '../repositories/subscription'\n\nexport class SubscriptionService extends AbstractService {\n public repository: SubscriptionRepository\n\n constructor(parent: Router, storage: AbstractStorage) {\n super(parent)\n this.repository = new SubscriptionRepository(storage)\n }\n\n getBasePath() {\n return 'subscriptions'\n }\n}\n","import {\n ReferenceTypeId,\n TaxCategory,\n TaxCategoryAddTaxRateAction,\n TaxCategoryChangeNameAction,\n TaxCategoryDraft,\n TaxCategoryRemoveTaxRateAction,\n TaxCategoryReplaceTaxRateAction,\n TaxCategorySetDescriptionAction,\n TaxCategorySetKeyAction,\n TaxCategoryUpdateAction,\n TaxRate,\n TaxRateDraft,\n} from '@commercetools/platform-sdk'\nimport { getBaseResourceProperties } from '../helpers'\nimport { AbstractResourceRepository } from './abstract'\nimport { v4 as uuidv4 } from 'uuid'\nimport { Writable } from 'types'\n\nexport class TaxCategoryRepository extends AbstractResourceRepository {\n getTypeId(): ReferenceTypeId {\n return 'tax-category'\n }\n\n create(projectKey: string, draft: TaxCategoryDraft): TaxCategory {\n const resource: TaxCategory = {\n ...getBaseResourceProperties(),\n ...draft,\n rates: draft.rates?.map(this.taxRateFromTaxRateDraft) || [],\n }\n this.save(projectKey, resource)\n return resource\n }\n\n private taxRateFromTaxRateDraft = (draft: TaxRateDraft): TaxRate => ({\n ...draft,\n id: uuidv4(),\n amount: draft.amount || 0,\n })\n\n getWithKey(projectKey: string, key: string): TaxCategory | undefined {\n const result = this._storage.query(projectKey, this.getTypeId(), {\n where: [`key=\"${key}\"`],\n })\n if (result.count === 1) {\n return result.results[0] as TaxCategory\n }\n\n // Catch this for now, should be checked when creating/updating\n if (result.count > 1) {\n throw new Error('Duplicate tax category key')\n }\n\n return\n }\n\n actions: Partial<\n Record<\n TaxCategoryUpdateAction['action'],\n (projectKey: string, resource: Writable<TaxCategory>, action: any) => void\n >\n > = {\n addTaxRate: (\n projectKey: string,\n resource: Writable<TaxCategory>,\n { taxRate }: TaxCategoryAddTaxRateAction\n ) => {\n if (resource.rates === undefined) {\n resource.rates = []\n }\n resource.rates.push(this.taxRateFromTaxRateDraft(taxRate))\n },\n removeTaxRate: (\n projectKey: string,\n resource: Writable<TaxCategory>,\n { taxRateId }: TaxCategoryRemoveTaxRateAction\n ) => {\n if (resource.rates === undefined) {\n resource.rates = []\n }\n resource.rates = resource.rates.filter(taxRate => {\n return taxRate.id !== taxRateId\n })\n },\n replaceTaxRate: (\n projectKey: string,\n resource: Writable<TaxCategory>,\n { taxRateId, taxRate }: TaxCategoryReplaceTaxRateAction\n ) => {\n if (resource.rates === undefined) {\n resource.rates = []\n }\n\n const taxRateObj = this.taxRateFromTaxRateDraft(taxRate)\n for (let i = 0; i < resource.rates.length; i++) {\n const rate = resource.rates[i]\n if (rate.id == taxRateId) {\n resource.rates[i] = taxRateObj\n }\n }\n },\n setDescription: (\n projectKey: string,\n resource: Writable<TaxCategory>,\n { description }: TaxCategorySetDescriptionAction\n ) => {\n resource.description = description\n },\n setKey: (\n projectKey: string,\n resource: Writable<TaxCategory>,\n { key }: TaxCategorySetKeyAction\n ) => {\n resource.key = key\n },\n changeName: (\n projectKey: string,\n resource: Writable<TaxCategory>,\n { name }: TaxCategoryChangeNameAction\n ) => {\n resource.name = name\n },\n }\n}\n","import { TaxCategoryRepository } from '../repositories/tax-category'\nimport AbstractService from './abstract'\nimport { AbstractStorage } from '../storage'\nimport { Request, Response, Router } from 'express'\n\nexport class TaxCategoryService extends AbstractService {\n public repository: TaxCategoryRepository\n\n constructor(parent: Router, storage: AbstractStorage) {\n super(parent)\n this.repository = new TaxCategoryRepository(storage)\n }\n\n getBasePath() {\n return 'tax-categories'\n }\n\n extraRoutes(router: Router) {\n router.get('/key=:key', this.getWithKey.bind(this))\n }\n\n getWithKey(request: Request, response: Response) {\n const resource = this.repository.getWithKey(\n request.params.projectKey,\n request.params.key\n )\n if (resource) {\n return response.status(200).send(resource)\n }\n return response.status(404).send('Not found')\n }\n}\n","import {\n Type,\n TypeDraft,\n ReferenceTypeId,\n TypeUpdateAction,\n FieldDefinition,\n TypeSetDescriptionAction,\n TypeChangeNameAction,\n TypeAddFieldDefinitionAction,\n TypeChangeEnumValueLabelAction,\n TypeAddEnumValueAction,\n TypeChangeFieldDefinitionOrderAction,\n TypeRemoveFieldDefinitionAction,\n} from '@commercetools/platform-sdk'\nimport { Writable } from 'types'\nimport { getBaseResourceProperties } from '../helpers'\nimport { AbstractResourceRepository } from './abstract'\n\nexport class TypeRepository extends AbstractResourceRepository {\n getTypeId(): ReferenceTypeId {\n return 'type'\n }\n\n create(projectKey: string, draft: TypeDraft): Type {\n const resource: Type = {\n ...getBaseResourceProperties(),\n key: draft.key,\n name: draft.name,\n resourceTypeIds: draft.resourceTypeIds,\n fieldDefinitions: draft.fieldDefinitions || [],\n description: draft.description,\n }\n this.save(projectKey, resource)\n return resource\n }\n actions: Partial<\n Record<\n TypeUpdateAction['action'],\n (projectKey: string, resource: Writable<Type>, action: any) => void\n >\n > = {\n addFieldDefinition: (\n projectKey: string,\n resource: Writable<Type>,\n { fieldDefinition }: TypeAddFieldDefinitionAction\n ) => {\n resource.fieldDefinitions.push(fieldDefinition)\n },\n removeFieldDefinition: (\n projectKey: string,\n resource: Writable<Type>,\n { fieldName }: TypeRemoveFieldDefinitionAction\n ) => {\n resource.fieldDefinitions = resource.fieldDefinitions.filter(f => {\n return f.name !== fieldName\n })\n },\n setDescription: (\n projectKey: string,\n resource: Writable<Type>,\n { description }: TypeSetDescriptionAction\n ) => {\n resource.description = description\n },\n changeName: (\n projectKey: string,\n resource: Writable<Type>,\n { name }: TypeChangeNameAction\n ) => {\n resource.name = name\n },\n changeFieldDefinitionOrder: (\n projectKey: string,\n resource: Writable<Type>,\n { fieldNames }: TypeChangeFieldDefinitionOrderAction\n ) => {\n const fields = new Map(\n resource.fieldDefinitions.map(item => [item.name, item])\n )\n const result: FieldDefinition[] = []\n let current = resource.fieldDefinitions\n\n fieldNames.forEach(fieldName => {\n const field = fields.get(fieldName)\n if (field === undefined) {\n throw new Error('New field')\n }\n result.push(field)\n\n // Remove from current items\n current = current.filter(f => {\n return f.name !== fieldName\n })\n })\n\n resource.fieldDefinitions = result\n // Add fields which were not specified in the order as last items. Not\n // sure if this follows commercetools\n resource.fieldDefinitions.push(...current)\n },\n addEnumValue: (\n projectKey: string,\n resource: Writable<Type>,\n { fieldName, value }: TypeAddEnumValueAction\n ) => {\n resource.fieldDefinitions.forEach(field => {\n if (field.name == fieldName) {\n // TODO, should be done better i suppose\n if (field.type.name == 'Enum') {\n field.type.values.push(value)\n } else if (\n field.type.name == 'Set' &&\n field.type.elementType.name == 'Enum'\n ) {\n field.type.elementType.values.push(value)\n } else {\n throw new Error('Type is not a Enum (or Set of Enum)')\n }\n }\n })\n },\n changeEnumValueLabel: (\n projectKey: string,\n resource: Writable<Type>,\n { fieldName, value }: TypeChangeEnumValueLabelAction\n ) => {\n resource.fieldDefinitions.forEach(field => {\n if (field.name == fieldName) {\n // TODO, should be done better i suppose\n if (field.type.name == 'Enum') {\n field.type.values.forEach(v => {\n if (v.key == value.key) {\n v.label = value.label\n }\n })\n } else if (\n field.type.name == 'Set' &&\n field.type.elementType.name == 'Enum'\n ) {\n field.type.elementType.values.forEach(v => {\n if (v.key == value.key) {\n v.label = value.label\n }\n })\n } else {\n throw new Error('Type is not a Enum (or Set of Enum)')\n }\n }\n })\n },\n }\n}\n","import AbstractService from './abstract'\nimport { Router } from 'express'\nimport { TypeRepository } from '../repositories/type'\nimport { AbstractStorage } from '../storage'\n\nexport class TypeService extends AbstractService {\n public repository: TypeRepository\n\n constructor(parent: Router, storage: AbstractStorage) {\n super(parent)\n this.repository = new TypeRepository(storage)\n }\n\n getBasePath() {\n return 'types'\n }\n}\n","import {\n ReferenceTypeId,\n Zone,\n ZoneAddLocationAction,\n ZoneChangeNameAction,\n ZoneDraft,\n ZoneRemoveLocationAction,\n ZoneSetDescriptionAction,\n ZoneSetKeyAction,\n ZoneUpdateAction,\n} from '@commercetools/platform-sdk'\nimport { Writable } from 'types'\nimport { getBaseResourceProperties } from '../helpers'\nimport { AbstractResourceRepository } from './abstract'\n\nexport class ZoneRepository extends AbstractResourceRepository {\n getTypeId(): ReferenceTypeId {\n return 'zone'\n }\n\n create(projectKey: string, draft: ZoneDraft): Zone {\n const resource: Zone = {\n ...getBaseResourceProperties(),\n key: draft.key,\n locations: draft.locations || [],\n name: draft.name,\n description: draft.description,\n }\n this.save(projectKey, resource)\n return resource\n }\n\n actions: Partial<\n Record<\n ZoneUpdateAction['action'],\n (projectKey: string, resource: Writable<Zone>, action: any) => void\n >\n > = {\n addLocation: (\n projectKey: string,\n resource: Writable<Zone>,\n { location }: ZoneAddLocationAction\n ) => {\n resource.locations.push(location)\n },\n removeLocation: (\n projectKey: string,\n resource: Writable<Zone>,\n { location }: ZoneRemoveLocationAction\n ) => {\n resource.locations = resource.locations.filter(loc => {\n return !(loc.country == location.country && loc.state == location.state)\n })\n },\n changeName: (\n projectKey: string,\n resource: Writable<Zone>,\n { name }: ZoneChangeNameAction\n ) => {\n resource.name = name\n },\n setDescription: (\n projectKey: string,\n resource: Writable<Zone>,\n { description }: ZoneSetDescriptionAction\n ) => {\n resource.description = description\n },\n setKey: (\n projectKey: string,\n resource: Writable<Zone>,\n { key }: ZoneSetKeyAction\n ) => {\n resource.key = key\n },\n }\n}\n","import { Router } from 'express'\nimport AbstractService from './abstract'\nimport { AbstractStorage } from '../storage'\nimport { ZoneRepository } from '../repositories/zone'\n\nexport class ZoneService extends AbstractService {\n public repository: ZoneRepository\n\n constructor(parent: Router, storage: AbstractStorage) {\n super(parent)\n this.repository = new ZoneRepository(storage)\n }\n\n getBasePath() {\n return 'zones'\n }\n}\n","import nock from 'nock'\nimport express, { NextFunction, Request, Response } from 'express'\nimport supertest from 'supertest'\nimport morgan from 'morgan'\nimport { AbstractStorage, InMemoryStorage } from './storage'\nimport { Services } from './types'\nimport { CommercetoolsError } from './exceptions'\nimport { OAuth2Server } from './oauth/server'\nimport { ProjectAPI } from './projectAPI'\nimport { copyHeaders } from './lib/proxy'\nimport { DEFAULT_API_HOSTNAME, DEFAULT_AUTH_HOSTNAME } from './constants'\n\n// Services\nimport { CartDiscountService } from './services/cart-discount'\nimport { CartService } from './services/cart'\nimport { CategoryServices } from './services/category'\nimport { ChannelService } from './services/channel'\nimport { CustomerGroupService } from './services/customer-group'\nimport { CustomerService } from './services/customer'\nimport { CustomObjectService } from './services/custom-object'\nimport { DiscountCodeService } from './services/discount-code'\nimport { ExtensionServices } from './services/extension'\nimport { InventoryEntryService } from './services/inventory-entry'\nimport { MyCartService } from './services/my-cart'\nimport { MyPaymentService } from './services/my-payment'\nimport { OrderService } from './services/order'\nimport { PaymentService } from './services/payment'\nimport { ProductProjectionService } from './services/product-projection'\nimport { ProductService } from './services/product'\nimport { ProductTypeService } from './services/product-type'\nimport { ProjectService } from './services/project'\nimport { ShippingMethodService } from './services/shipping-method'\nimport { ShoppingListService } from './services/shopping-list'\nimport { StateService } from './services/state'\nimport { StoreService } from './services/store'\nimport { SubscriptionService } from './services/subscription'\nimport { TaxCategoryService } from './services/tax-category'\nimport { TypeService } from './services/type'\nimport { ZoneService } from './services/zone'\n\nexport type CommercetoolsMockOptions = {\n validateCredentials: boolean\n enableAuthentication: boolean\n defaultProjectKey: string | undefined\n apiHost: RegExp | string\n authHost: RegExp | string\n silent: boolean\n}\n\ntype AppOptions = { silent?: boolean }\n\nconst DEFAULT_OPTIONS: CommercetoolsMockOptions = {\n enableAuthentication: false,\n validateCredentials: false,\n defaultProjectKey: undefined,\n apiHost: DEFAULT_API_HOSTNAME,\n authHost: DEFAULT_AUTH_HOSTNAME,\n silent: false,\n}\n\nexport class CommercetoolsMock {\n public app: express.Express\n public options: CommercetoolsMockOptions\n\n private _storage: AbstractStorage\n private _oauth2: OAuth2Server\n private _nockScopes: {\n auth: nock.Scope | undefined\n api: nock.Scope | undefined\n } = { auth: undefined, api: undefined }\n private _services: Services\n private _projectService?: ProjectService\n\n constructor(options: Partial<CommercetoolsMockOptions> = {}) {\n this.options = { ...DEFAULT_OPTIONS, ...options }\n this._services = {}\n this._projectService = undefined\n\n this._storage = new InMemoryStorage()\n this._oauth2 = new OAuth2Server({\n enabled: this.options.enableAuthentication,\n validate: this.options.validateCredentials,\n })\n\n this.app = this.createApp({ silent: this.options.silent })\n }\n\n start() {\n // Order is important here when the hostnames match\n this.mockAuthHost()\n this.mockApiHost()\n }\n\n stop() {\n this._nockScopes.auth?.persist(false)\n this._nockScopes.auth = undefined\n\n this._nockScopes.api?.persist(false)\n this._nockScopes.api = undefined\n }\n\n clear() {\n this._storage.clear()\n }\n\n project(projectKey?: string) {\n if (!projectKey && !this.options.defaultProjectKey) {\n throw new Error('No projectKey passed and no default set')\n }\n\n return new ProjectAPI(\n projectKey || this.options.defaultProjectKey!,\n this._services,\n this._storage\n )\n }\n\n runServer(port: number = 3000, options?: AppOptions) {\n const app = this.createApp(options)\n const server = app.listen(port, () => {\n console.log(`Mock server listening at http://localhost:${port}`)\n })\n server.keepAliveTimeout = 60 * 1000\n }\n\n private createApp(options?: AppOptions): express.Express {\n const app = express()\n\n const projectRouter = express.Router({ mergeParams: true })\n projectRouter.use(express.json())\n\n if (!options?.silent) {\n app.use(morgan('tiny'))\n }\n app.use('/oauth', this._oauth2.createRouter())\n\n // Only enable auth middleware if we have enabled this\n if (this.options.enableAuthentication) {\n app.use('/:projectKey', this._oauth2.createMiddleware(), projectRouter)\n } else {\n app.use('/:projectKey', projectRouter)\n }\n\n this._projectService = new ProjectService(projectRouter, this._storage)\n\n this._services = {\n category: new CategoryServices(projectRouter, this._storage),\n cart: new CartService(projectRouter, this._storage),\n 'cart-discount': new CartDiscountService(projectRouter, this._storage),\n customer: new CustomerService(projectRouter, this._storage),\n channel: new ChannelService(projectRouter, this._storage),\n 'customer-group': new CustomerGroupService(projectRouter, this._storage),\n 'discount-code': new DiscountCodeService(projectRouter, this._storage),\n extension: new ExtensionServices(projectRouter, this._storage),\n 'inventory-entry': new InventoryEntryService(\n projectRouter,\n this._storage\n ),\n 'key-value-document': new CustomObjectService(\n projectRouter,\n this._storage\n ),\n order: new OrderService(projectRouter, this._storage),\n payment: new PaymentService(projectRouter, this._storage),\n 'my-cart': new MyCartService(projectRouter, this._storage),\n 'my-payment': new MyPaymentService(projectRouter, this._storage),\n 'shipping-method': new ShippingMethodService(\n projectRouter,\n this._storage\n ),\n 'product-type': new ProductTypeService(projectRouter, this._storage),\n product: new ProductService(projectRouter, this._storage),\n 'product-projection': new ProductProjectionService(\n projectRouter,\n this._storage\n ),\n 'shopping-list': new ShoppingListService(projectRouter, this._storage),\n state: new StateService(projectRouter, this._storage),\n store: new StoreService(projectRouter, this._storage),\n subscription: new SubscriptionService(projectRouter, this._storage),\n 'tax-category': new TaxCategoryService(projectRouter, this._storage),\n type: new TypeService(projectRouter, this._storage),\n zone: new ZoneService(projectRouter, this._storage),\n }\n\n app.use((err: Error, req: Request, resp: Response, next: NextFunction) => {\n if (err instanceof CommercetoolsError) {\n return resp.status(err.statusCode).send({\n statusCode: err.statusCode,\n message: err.message,\n errors: [err.info],\n })\n } else {\n console.error(err)\n return resp.status(500).send({\n error: err.message,\n })\n }\n })\n\n return app\n }\n\n private mockApiHost() {\n const app = this.app\n\n this._nockScopes.api = nock(this.options.apiHost)\n .persist()\n .get(/.*/)\n .reply(async function(uri) {\n const response = await supertest(app)\n .get(uri)\n .set(copyHeaders(this.req.headers))\n return [response.status, response.body]\n })\n .post(/.*/)\n .reply(async function(uri, body) {\n const response = await supertest(app)\n .post(uri)\n .set(copyHeaders(this.req.headers))\n .send(body)\n return [response.status, response.body]\n })\n .delete(/.*/)\n .reply(async function(uri, body) {\n const response = await supertest(app)\n .delete(uri)\n .set(copyHeaders(this.req.headers))\n .send(body)\n return [response.status, response.body]\n })\n }\n\n private mockAuthHost() {\n const app = this.app\n\n this._nockScopes.auth = nock(this.options.authHost)\n .persist()\n .post(/^\\/oauth\\/.*/)\n .reply(async function(uri, body) {\n const response = await supertest(app)\n .post(uri + '?' + body)\n .set(copyHeaders(this.req.headers))\n .send()\n return [response.status, response.body]\n })\n }\n}\n"],"names":["parseExpandClause","clause","result","element","index","undefined","rest","pos","indexOf","substring","match","parseInt","haversineDistance","src","dst","RADIUS_OF_EARTH_IN_KM","toRadian","deg","Math","PI","dLat","latitude","dLon","longitude","a","sin","cos","c","atan2","sqrt","PredicateError","constructor","message","parseQueryExpression","predicate","Array","isArray","callbacks","map","item","generateMatchFunc","target","variables","every","callback","validateSymbol","val","type","char","value","charAt","line","start","column","resolveSymbol","vars","resolveValue","obj","Object","values","filter","v","getLexer","perplex","token","lexer","parser","Parser","builder","nud","t","strpos","groups","parseFloat","bp","expr","parse","terminals","led","left","expect","resolvedValue","resolvedSymbol","some","elem","invert","next","peek","length","Error","symbols","inValues","includes","other","toLowerCase","maxDistance","distance","keyword","array","build","lines","split","CommercetoolsError","info","statusCode","AbstractStorage","InMemoryStorage","projectKey","projects","key","name","countries","currencies","languages","createdAt","trialUntil","carts","countryTaxRateFallbackEnabled","deleteDaysAfterLastModification","messages","enabled","deleteDaysAfterCreation","shippingRateInputType","externalOAuth","searchIndexing","products","status","orders","version","project","addProject","newObj","JSON","stringify","forEach","_resolveResource","expand","params","reference","_resolveReference","itemRef","forProjectKey","projectStorage","resources","cart","Map","category","channel","customer","extension","order","payment","product","state","store","subscription","zone","clear","entries","assertStorage","typeId","all","from","add","set","id","resource","get","assert","getByKey","find","e","delete","query","where","filterFunc","err","code","totalResources","offset","limit","slice","count","total","results","getByResourceIdentifier","identifier","console","error","r","OAuth2Store","validate","getClientToken","clientId","clientSecret","scope","access_token","randomBytes","toString","token_type","expires_in","tokens","push","validateToken","foundToken","getBearerToken","request","authHeader","header","OAuth2Server","options","createRouter","router","express","Router","use","bodyParser","urlencoded","extended","post","tokenHandler","bind","createMiddleware","response","credentials","auth","grantType","grant_type","body","pass","send","getBaseResourceProperties","uuidv4","Date","toISOString","lastModifiedAt","ProjectAPI","services","storage","_storage","_services","parsedTypeId","service","getRepository","repository","copyHeaders","headers","validHeaders","DEFAULT_API_HOSTNAME","DEFAULT_AUTH_HOSTNAME","AbstractService","parent","registerRoutes","extraRoutes","basePath","getBasePath","mergeParams","getWithKey","getWithId","deletewithKey","deletewithId","postWithKey","postWithId","_parseParam","_expandWithId","log","draft","create","createStatusCode","updateRequest","updatedResource","processUpdateActions","actions","resourceId","checkConcurrentModification","expectedVersion","currentVersion","AbstractRepository","modifiedResource","action","updateFunc","deepEqual","save","AbstractResourceRepository","getTypeId","current","createCustomFields","fields","typeResource","createPrice","createTypedMoney","fractionDigits","resolveStoreReference","ref","getReferenceFromResourceIdentifier","resourceIdentifier","CartDiscountRepository","setKey","setDescription","description","setValidFrom","validFrom","setValidUntil","validUntil","setValidFromAndUntil","changeSortOrder","sortOrder","changeIsActive","isActive","cartPredicate","references","requiresDiscountCode","stackingMode","transformValueDraft","money","CartDiscountService","CartRepository","addLineItem","productId","variantId","sku","quantity","variant","items","masterData","masterVariant","variants","x","alreadyAdded","lineItems","totalPrice","centAmount","calculateLineItemTotalPrice","prices","price","productKey","productSlug","slug","productType","discountedPricePerQuantity","lineItemMode","priceMode","calculateCartTotalPrice","removeLineItem","lineItemId","lineItem","shouldDelete","setBillingAddress","address","billingAddress","setCountry","country","setCustomerEmail","email","customerEmail","setCustomField","custom","setCustomType","resolvedType","setLocale","locale","setShippingAddress","shippingAddress","cartState","customLineItems","currencyCode","currency","taxMode","taxRoundingMode","taxCalculationMode","refusedGifts","origin","getActiveCart","reduce","cur","CartService","CategoryRepository","changeAssetName","assetId","assetKey","assets","asset","changeSlug","setAssetDescription","setAssetSources","sources","setMetaDescription","metaDescription","setMetaKeywords","metaKeywords","setMetaTitle","metaTitle","orderHint","ancestors","d","tags","CategoryServices","ChannelRepository","roles","ChannelService","CustomerGroupRepository","changeName","groupName","CustomerGroupService","CustomerRepository","password","isEmailVerified","addresses","CustomerService","CustomObjectRepository","getWithContainerAndKey","container","baseProperties","CustomObjectService","createWithContainerAndKey","deleteWithContainerAndKey","DiscountCodeRepository","changeCartDiscounts","cartDiscounts","setCartPredicate","setName","setMaxApplications","maxApplications","setMaxApplicationsPerCustomer","maxApplicationsPerCustomer","applicationVersion","DiscountCodeService","ExtensionRepository","setTimeoutInMs","timeoutInMs","changeTriggers","triggers","changeDestination","destination","ExtensionServices","InventoryEntryRepository","changeQuantity","quantityOnStock","availableQuantity","setExpectedDelivery","expectedDelivery","setRestockableInDays","restockableInDays","supplyChannel","InventoryEntryService","MyCartService","activeCart","PaymentRepository","amount","addTransaction","transaction","transactions","transactionFromTransactionDraft","amountPlanned","paymentMethodInfo","paymentStatus","interfaceInteractions","interaction","MyPaymentService","OrderRepository","addPayment","resolvedPayment","paymentInfo","payments","changeOrderState","orderState","changePaymentState","paymentState","setOrderNumber","orderNumber","setStore","storeReference","syncInfo","lastMessageSequenceNumber","import","lineItemFromImportDraft","customLineItemFromImportDraft","taxRate","getWithOrderNumber","OrderService","importDraft","PaymentService","parseFilterExpression","filters","join","parsed","replace","ProductProjectionRepository","categories","variantFromDraft","searchKeywords","search","wherePredicate","attributes","ProductProjectionService","ProductRepository","publish","staged","hasStagedChanges","published","setAttribute","isStaged","productData","getProductData","isMasterVariant","variantIndex","getVariant","existingAttr","attr","foundVariant","ProductService","ProductTypeRepository","_projectKey","attributeConstraint","inputHint","isSearchable","changeLocalizedEnumValueLabel","attributeName","newValue","updateAttributeType","label","elementType","changeLabel","attributeDefinitionFromAttributeDefinitionDraft","ProductTypeService","ProjectRepository","changeCurrencies","changeCountries","changeLanguages","changeMessagesEnabled","messagesEnabled","changeProductSearchIndexingEnabled","changeOrderSearchStatus","setShippingRateInputType","setExternalOAuth","changeCountryTaxRateFallbackEnabled","changeCartsConfiguration","cartsConfiguration","data","getProject","saveProject","ProjectService","ShippingMethodRepository","shippingRates","_transformShippingRate","rate","freeAbove","tiers","addShippingRate","shippingRate","zoneRates","zoneRate","removeShippingRate","otherRate","addZone","zoneReference","removeZone","setLocalizedDescription","localizedDescription","setPredicate","changeIsDefault","isDefault","taxCategory","z","_transformZoneRateDraft","ShippingMethodService","ShoppingListRepository","textLineItems","addedAt","ShoppingListService","StateRepository","changeKey","setRoles","builtIn","initial","transitions","StateService","StoreRepository","setDistributionChannels","distributionChannels","transformChannels","setLanguages","supplyChannels","channels","StoreService","SubscriptionRepository","queueURL","URL","queueUrl","accountId","pathname","dest","region","accessKey","changes","format","SubscriptionService","TaxCategoryRepository","addTaxRate","rates","taxRateFromTaxRateDraft","removeTaxRate","taxRateId","replaceTaxRate","taxRateObj","i","TaxCategoryService","TypeRepository","addFieldDefinition","fieldDefinition","fieldDefinitions","removeFieldDefinition","fieldName","f","changeFieldDefinitionOrder","fieldNames","field","addEnumValue","changeEnumValueLabel","resourceTypeIds","TypeService","ZoneRepository","addLocation","location","locations","removeLocation","loc","ZoneService","DEFAULT_OPTIONS","enableAuthentication","validateCredentials","defaultProjectKey","apiHost","authHost","silent","CommercetoolsMock","api","_projectService","_oauth2","app","createApp","mockAuthHost","mockApiHost","stop","_nockScopes","persist","runServer","port","server","listen","keepAliveTimeout","projectRouter","json","morgan","req","resp","errors","nock","reply","uri","supertest"],"mappings":"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"}