@labdigital/commercetools-mock 0.5.17 → 0.5.20

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 (39) hide show
  1. package/dist/commercetools-mock.cjs.development.js +182 -40
  2. package/dist/commercetools-mock.cjs.development.js.map +1 -1
  3. package/dist/commercetools-mock.cjs.production.min.js +1 -1
  4. package/dist/commercetools-mock.cjs.production.min.js.map +1 -1
  5. package/dist/commercetools-mock.esm.js +182 -40
  6. package/dist/commercetools-mock.esm.js.map +1 -1
  7. package/dist/repositories/customer.d.ts +6 -1
  8. package/dist/repositories/payment.d.ts +3 -1
  9. package/dist/repositories/store.d.ts +1 -0
  10. package/dist/services/customer.d.ts +1 -0
  11. package/dist/services/my-customer.d.ts +12 -0
  12. package/dist/services/shipping-method.d.ts +2 -1
  13. package/dist/services/store.d.ts +3 -1
  14. package/dist/types.d.ts +1 -1
  15. package/package.json +2 -16
  16. package/src/ctMock.ts +2 -0
  17. package/src/lib/masking.ts +1 -3
  18. package/src/repositories/category.ts +7 -6
  19. package/src/repositories/customer.ts +21 -1
  20. package/src/repositories/discount-code.ts +0 -1
  21. package/src/repositories/payment.ts +38 -2
  22. package/src/repositories/product-type.ts +3 -3
  23. package/src/repositories/project.ts +0 -2
  24. package/src/repositories/shipping-method.ts +11 -12
  25. package/src/repositories/store.ts +15 -0
  26. package/src/repositories/subscription.ts +2 -2
  27. package/src/repositories/tax-category.ts +1 -1
  28. package/src/repositories/type.ts +10 -10
  29. package/src/repositories/zone.ts +3 -1
  30. package/src/services/abstract.ts +0 -1
  31. package/src/services/customer.ts +21 -0
  32. package/src/services/my-customer.test.ts +51 -0
  33. package/src/services/my-customer.ts +46 -0
  34. package/src/services/product.test.ts +1 -5
  35. package/src/services/project.ts +1 -1
  36. package/src/services/shipping-method.test.ts +27 -0
  37. package/src/services/shipping-method.ts +6 -1
  38. package/src/services/store.ts +16 -1
  39. package/src/types.ts +5 -1
@@ -1 +1 @@
1
- {"version":3,"file":"commercetools-mock.esm.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/lib/masking.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 (resource) {\n return this.expand(\n projectKey,\n resource,\n params.expand\n ) as ResourceMap[RepositoryTypes]\n }\n return null\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 limit = this._parseParam(request.query.limit)\n const offset = this._parseParam(request.query.offset)\n\n const result = this.repository.query(request.params.projectKey, {\n expand: this._parseParam(request.query.expand),\n where: this._parseParam(request.query.where),\n limit: limit !== undefined ? Number(limit) : undefined,\n offset: offset !== undefined ? Number(offset) : undefined,\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 offset?: number\n limit?: number\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 offset: params.offset,\n limit: params.limit,\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 filter = (query['filter.query'] ?? query.filter) as any\n const wherePredicate = filter ? parseFilterExpression(filter) : undefined\n\n const results = this._storage.query(projectKey, this.getTypeId(), {\n where: wherePredicate,\n offset: query.offset ? Number(query.offset) : undefined,\n limit: query.limit ? Number(query.limit) : undefined,\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 { json } from 'express'\n\nexport const maskSecretValue = <T>(resource: T, path: string): T => {\n const parts = path.split('.')\n const clone = JSON.parse(JSON.stringify(resource))\n let val = clone\n\n const target = parts.pop()\n for (let i = 0; i < parts.length; i++) {\n const part = parts[i]\n val = val[part]\n\n if (val == undefined) {\n return resource\n }\n }\n\n if (val && target && val[target]) {\n val[target] = '****'\n }\n return clone\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'\nimport { maskSecretValue } from '../lib/masking'\n\nexport class ProjectRepository extends AbstractRepository {\n get(projectKey: string): Project | null {\n const data = this._storage.getProject(projectKey)\n const resource = this._storage.getProject(projectKey)\n const masked = maskSecretValue<Project>(\n resource,\n 'externalOAuth.authorizationHeader'\n )\n return masked\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","Number","_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","maskSecretValue","path","parts","clone","pop","i","part","ProjectRepository","changeCurrencies","changeCountries","changeLanguages","changeMessagesEnabled","messagesEnabled","changeProductSearchIndexingEnabled","changeOrderSearchStatus","setShippingRateInputType","setExternalOAuth","changeCountryTaxRateFallbackEnabled","changeCartsConfiguration","cartsConfiguration","data","getProject","masked","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","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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"}
1
+ {"version":3,"file":"commercetools-mock.esm.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/lib/masking.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/services/my-customer.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 (resource) {\n return this.expand(\n projectKey,\n resource,\n params.expand\n ) as ResourceMap[RepositoryTypes]\n }\n return null\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 limit = this._parseParam(request.query.limit)\n const offset = this._parseParam(request.query.offset)\n\n const result = this.repository.query(request.params.projectKey, {\n expand: this._parseParam(request.query.expand),\n where: this._parseParam(request.query.where),\n limit: limit !== undefined ? Number(limit) : undefined,\n offset: offset !== undefined ? Number(offset) : undefined,\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 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 offset?: number\n limit?: number\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 offset: params.offset,\n limit: params.limit,\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 externalId: draft.externalId || '',\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 CustomerChangeEmailAction,\n CustomerDraft,\n ReferenceTypeId,\n} from '@commercetools/platform-sdk'\nimport { Writable } from 'types'\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: Buffer.from(draft.password).toString('base64'),\n isEmailVerified: draft.isEmailVerified || false,\n addresses: [],\n }\n this.save(projectKey, resource)\n return resource\n }\n getMe(projectKey: string): Customer | undefined {\n const results = this._storage.query(projectKey, this.getTypeId(), {}) // grab the first customer you can find\n if (results.count > 0) {\n return results.results[0] as Customer\n }\n\n return\n }\n\n actions = {\n changeEmail: (\n _projectKey: string,\n resource: Writable<Customer>,\n { email }: CustomerChangeEmailAction\n ) => {\n resource.email = email\n },\n }\n}\n","import AbstractService from './abstract'\nimport { Router } from 'express'\nimport { CustomerRepository } from '../repositories/customer'\nimport { AbstractStorage } from '../storage'\nimport { getBaseResourceProperties } from '../helpers'\nimport { v4 as uuidv4 } from 'uuid'\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 extraRoutes(parent: Router) {\n parent.post('/password-token', (request, response) => {\n const customer = this.repository.query(request.params.projectKey, {\n where: [`email=\"${request.body.email}\"`],\n })\n const ttlMinutes: number = request.params.ttlMinutes\n ? +request.params.ttlMinutes\n : 34560\n const { version, ...rest } = getBaseResourceProperties()\n\n return response.status(200).send({\n ...rest,\n customerId: customer.results[0].id,\n expiresAt: new Date(Date.now() + ttlMinutes * 60).toISOString(),\n value: uuidv4(),\n })\n })\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 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 PaymentChangeTransactionStateAction,\n PaymentDraft,\n PaymentSetCustomFieldAction,\n PaymentSetCustomTypeAction,\n PaymentTransitionStateAction,\n ReferenceTypeId,\n State,\n StateReference,\n Transaction,\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 changeTransactionState: (\n _projectKey: string,\n resource: Writable<Payment>,\n { transactionId, state }: PaymentChangeTransactionStateAction\n ) => {\n const index = resource.transactions.findIndex(\n (e: Transaction) => e.id === transactionId\n )\n const updatedTransaction: Transaction = {\n ...resource.transactions[index],\n state,\n }\n resource.transactions[index] = updatedTransaction\n },\n transitionState: (\n projectKey: string,\n resource: Writable<Payment>,\n { state }: PaymentTransitionStateAction\n ) => {\n const stateObj = this._storage.getByResourceIdentifier(\n projectKey,\n state\n ) as State | null\n\n if (!stateObj) {\n throw new Error(`State ${state} not found`)\n }\n\n resource.paymentStatus.state = {\n typeId: 'state',\n id: stateObj.id,\n obj: stateObj,\n }\n },\n // addInterfaceInteraction: () => {},\n // changeAmountPlanned: () => {},\n // changeTransactionInteractionId: () => {},\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 }\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 filter = (query['filter.query'] ?? query.filter) as any\n const wherePredicate = filter ? parseFilterExpression(filter) : undefined\n\n const results = this._storage.query(projectKey, this.getTypeId(), {\n where: wherePredicate,\n offset: query.offset ? Number(query.offset) : undefined,\n limit: query.limit ? Number(query.limit) : undefined,\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","export const maskSecretValue = <T>(resource: T, path: string): T => {\n const parts = path.split('.')\n const clone = JSON.parse(JSON.stringify(resource))\n let val = clone\n\n const target = parts.pop()\n for (let i = 0; i < parts.length; i++) {\n const part = parts[i]\n val = val[part]\n\n if (val === undefined) {\n return resource\n }\n }\n\n if (val && target && val[target]) {\n val[target] = '****'\n }\n return clone\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'\nimport { maskSecretValue } from '../lib/masking'\n\nexport class ProjectRepository extends AbstractRepository {\n get(projectKey: string): Project | null {\n const resource = this._storage.getProject(projectKey)\n const masked = maskSecretValue<Project>(\n resource,\n 'externalOAuth.authorizationHeader'\n )\n return masked\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 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 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 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 { AbstractStorage } from '../storage'\nimport { Router } from 'express'\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 this.registerRoutes(parent)\n }\n\n getBasePath() {\n return 'shipping-methods'\n }\n\n extraRoutes(parent: Router) {\n parent.get('/matching-cart', this.get.bind(this))\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 getWithKey(projectKey: string, key: string): Store | 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 Store\n }\n\n if (result.count > 1) {\n throw new Error('Duplicate store key')\n }\n\n return\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, Request, Response } 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 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 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 !(\n loc.country === location.country && loc.state === location.state\n )\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 AbstractService from './abstract'\nimport { Request, Response, Router } from 'express'\nimport { AbstractStorage } from '../storage'\nimport { CustomerRepository } from '../repositories/customer'\n\nexport class MyCustomerService 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 'me'\n }\n\n registerRoutes(parent: Router) {\n // Overwrite this function to be able to handle /me path.\n const basePath = this.getBasePath()\n const router = Router({ mergeParams: true })\n\n this.extraRoutes(router)\n\n router.get('', this.getMe.bind(this))\n\n router.post('/signup', this.signUp.bind(this))\n\n parent.use(`/${basePath}`, router)\n }\n\n getMe(request: Request, response: Response) {\n const resource = this.repository.getMe(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 signUp(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({ customer: result })\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'\nimport { MyCustomerService } from './services/my-customer'\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-customer': new MyCustomerService(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","Number","_expandWithId","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","externalId","ancestors","d","tags","CategoryServices","ChannelRepository","roles","ChannelService","CustomerGroupRepository","changeName","groupName","CustomerGroupService","CustomerRepository","changeEmail","_projectKey","password","Buffer","isEmailVerified","addresses","getMe","CustomerService","ttlMinutes","customerId","expiresAt","now","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","changeTransactionState","transactionId","findIndex","updatedTransaction","transitionState","stateObj","paymentStatus","amountPlanned","paymentMethodInfo","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","attributeConstraint","inputHint","isSearchable","changeLocalizedEnumValueLabel","attributeName","newValue","updateAttributeType","label","elementType","changeLabel","attributeDefinitionFromAttributeDefinitionDraft","ProductTypeService","maskSecretValue","path","parts","clone","pop","i","part","ProjectRepository","changeCurrencies","changeCountries","changeLanguages","changeMessagesEnabled","messagesEnabled","changeProductSearchIndexingEnabled","changeOrderSearchStatus","setShippingRateInputType","setExternalOAuth","changeCountryTaxRateFallbackEnabled","changeCartsConfiguration","cartsConfiguration","getProject","masked","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","TaxCategoryService","TypeRepository","addFieldDefinition","fieldDefinition","fieldDefinitions","removeFieldDefinition","fieldName","f","changeFieldDefinitionOrder","fieldNames","field","addEnumValue","changeEnumValueLabel","resourceTypeIds","TypeService","ZoneRepository","addLocation","location","locations","removeLocation","loc","ZoneService","MyCustomerService","signUp","DEFAULT_OPTIONS","enableAuthentication","validateCredentials","defaultProjectKey","apiHost","authHost","silent","CommercetoolsMock","api","_projectService","_oauth2","app","createApp","mockAuthHost","mockApiHost","stop","_nockScopes","persist","runServer","port","server","listen","log","keepAliveTimeout","projectRouter","json","morgan","req","resp","errors","nock","reply","uri","supertest"],"mappings":"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"}