@labdigital/commercetools-mock 0.5.22 → 0.6.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"commercetools-mock.cjs.development.js","sources":["../src/lib/expandParser.ts","../src/lib/haversine.ts","../src/lib/predicateParser.ts","../src/exceptions.ts","../src/storage.ts","../src/oauth/store.ts","../src/oauth/helpers.ts","../src/oauth/server.ts","../src/helpers.ts","../src/projectAPI.ts","../src/lib/proxy.ts","../src/constants.ts","../src/services/abstract.ts","../src/repositories/errors.ts","../src/repositories/abstract.ts","../src/repositories/helpers.ts","../src/repositories/cart-discount.ts","../src/services/cart-discount.ts","../src/repositories/cart.ts","../src/repositories/order.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/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/services/my-order.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\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 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 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 OrderState,\n OrderStateTransitionMessage,\n OrderTransitionStateAction,\n Product,\n ProductPagedQueryResponse,\n ProductVariant,\n ReferenceTypeId,\n State,\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 transitionState: (\n projectKey: string,\n resource: Writable<Order>,\n { state }: OrderTransitionStateAction\n ) => {\n const resolvedType = this._storage.getByResourceIdentifier(\n projectKey,\n state\n ) as State | null\n\n if (!resolvedType) {\n throw new Error(\n `No state found with key=${state.key} or id=${state.key}`\n )\n }\n\n resource.state = { typeId: 'state', id: resolvedType.id }\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 { Router } from 'express'\nimport { CartRepository } from '../repositories/cart'\nimport { AbstractStorage } from '../storage'\nimport { Cart, Order } from '@commercetools/platform-sdk'\nimport { OrderRepository } from '../repositories/order'\n\nexport class CartService extends AbstractService {\n public repository: CartRepository\n public orderRepository: OrderRepository\n\n constructor(parent: Router, storage: AbstractStorage) {\n super(parent)\n this.repository = new CartRepository(storage)\n this.orderRepository = new OrderRepository(storage)\n }\n\n getBasePath() {\n return 'carts'\n }\n\n extraRoutes(parent: Router) {\n parent.post('/replicate', (request, response) => {\n // @ts-ignore\n const cartOrOrder: Cart | Order | null =\n request.body.reference.typeId === 'order'\n ? this.orderRepository.get(\n request.params.projectKey,\n request.body.reference.id\n )\n : this.repository.get(\n request.params.projectKey,\n request.body.reference.id\n )\n\n if (!cartOrOrder) {\n return response.status(400).send()\n }\n\n const newCart = this.repository.create(request.params.projectKey, {\n ...cartOrOrder,\n currency: cartOrOrder.totalPrice.currencyCode,\n discountCodes: [],\n })\n\n return response.status(200).send(newCart)\n })\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\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\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 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 router.post('/login', this.signIn.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 signIn(request: Request, response: Response) {\n const { email, password } = request.body\n const encodedPassword = Buffer.from(password).toString('base64')\n\n const result = this.repository.query(request.params.projectKey, {\n where: [`email = \"${email}\"`, `password = \"${encodedPassword}\"`],\n })\n\n if (result.count === 0) {\n return response.status(400).send({\n message: 'Account with the given credentials not found.',\n errors: [\n {\n code: 'InvalidCredentials',\n message: 'Account with the given credentials not found.',\n },\n ],\n })\n }\n\n return response.status(200).send({ customer: result.results[0] })\n }\n}\n","import AbstractService from './abstract'\nimport { Router } from 'express'\nimport { AbstractStorage } from '../storage'\nimport { OrderRepository } from '../repositories/order'\n\nexport class MyOrderService 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 '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('/orders/', this.get.bind(this))\n router.get('/orders/:id', this.getWithId.bind(this))\n\n router.delete('/orders/:id', this.deletewithId.bind(this))\n\n router.post('/orders/', this.post.bind(this))\n router.post('/orders/:id', this.postWithId.bind(this))\n\n parent.use(`/${basePath}`, router)\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'\nimport { MyOrderService } from './services/my-order'\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-order': new MyOrderService(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","OrderRepository","addPayment","resolvedPayment","paymentInfo","payments","changeOrderState","orderState","changePaymentState","paymentState","transitionState","setOrderNumber","orderNumber","setStore","storeReference","syncInfo","lastMessageSequenceNumber","import","lineItemFromImportDraft","customLineItemFromImportDraft","taxRate","getWithOrderNumber","CartService","orderRepository","cartOrOrder","newCart","discountCodes","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","stateObj","paymentStatus","amountPlanned","paymentMethodInfo","interfaceInteractions","interaction","MyPaymentService","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","signIn","encodedPassword","errors","MyOrderService","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","nock","reply","uri","supertest"],"mappings":"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"}
1
+ {"version":3,"file":"commercetools-mock.cjs.development.js","sources":["../src/lib/expandParser.ts","../src/lib/haversine.ts","../src/lib/predicateParser.ts","../src/exceptions.ts","../src/storage.ts","../src/oauth/store.ts","../src/oauth/helpers.ts","../src/oauth/server.ts","../src/helpers.ts","../src/projectAPI.ts","../src/lib/proxy.ts","../src/constants.ts","../src/services/abstract.ts","../src/repositories/errors.ts","../src/repositories/abstract.ts","../src/repositories/helpers.ts","../src/repositories/cart-discount.ts","../src/services/cart-discount.ts","../src/repositories/cart.ts","../src/repositories/order.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/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/services/my-order.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 { GetParams } from 'repositories/abstract'\nimport { 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 params: GetParams\n ): ResourceMap[ReferenceTypeId] {\n return this._storage.get(\n this.projectKey,\n typeId,\n id,\n params\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\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 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 CartSetShippingMethodAction,\n GeneralError,\n LineItem,\n LineItemDraft,\n Price,\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 lineItems =\n draft.lineItems?.map(draftLineItem =>\n this.draftLineItemtoLineItem(\n projectKey,\n draftLineItem,\n draft.currency,\n draft.country\n )\n ) ?? []\n\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: draft.taxMode ?? 'Platform',\n taxRoundingMode: draft.taxRoundingMode ?? 'HalfEven',\n taxCalculationMode: draft.taxCalculationMode ?? 'LineItemLevel',\n refusedGifts: [],\n locale: draft.locale,\n country: draft.country,\n origin: draft.origin ?? 'Customer',\n custom: createCustomFields(draft.custom, projectKey, this._storage),\n }\n\n // @ts-ignore\n resource.totalPrice.centAmount = calculateCartTotalPrice(resource)\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 currency = resource.totalPrice.currencyCode\n\n const price = selectPrice({\n prices: variant.prices,\n currency,\n country: resource.country,\n })\n if (!price) {\n throw new Error(\n `No valid price found for ${productId} for country ${resource.country} and currency ${currency}`\n )\n }\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 setShippingMethod: (\n projectKey: string,\n resource: Writable<Cart>,\n { shippingMethod }: CartSetShippingMethodAction\n ) => {\n const resolvedType = this._storage.getByResourceIdentifier(\n projectKey,\n //@ts-ignore\n shippingMethod\n )\n\n if (!resolvedType) {\n throw new Error(`Type ${shippingMethod} not found`)\n }\n //@ts-ignore\n resource.shippingInfo = {\n shippingMethod: {\n typeId: 'shipping-method',\n id: resolvedType.id,\n },\n }\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 draftLineItemtoLineItem = (\n projectKey: string,\n draftLineItem: LineItemDraft,\n currency: string,\n country: string | undefined\n ): LineItem => {\n const { productId, quantity, variantId, sku } = draftLineItem\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 Error(\n 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 quant = quantity ?? 1\n\n const price = selectPrice({ prices: variant.prices, currency, country })\n if (!price) {\n throw new Error(\n `No valid price found for ${productId} for country ${country} and currency ${currency}`\n )\n }\n\n return {\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 * quant,\n },\n quantity: quant,\n discountedPricePerQuantity: [],\n lineItemMode: 'Standard',\n priceMode: 'Platform',\n state: [],\n }\n }\n}\n\nconst selectPrice = ({\n prices,\n currency,\n country,\n}: {\n prices: Price[] | undefined\n currency: string\n country: string | undefined\n}) => {\n if (!prices) {\n return undefined\n }\n\n // Quick-and-dirty way of selecting price based on the given currency and country.\n // Can be improved later to give more priority to exact matches over\n // 'all country' matches, and include customer groups in the mix as well\n return prices.find(price => {\n const countryMatch = !price.country || price.country === country\n const currencyMatch = price.value.currencyCode === currency\n return countryMatch && currencyMatch\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 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 OrderState,\n OrderStateTransitionMessage,\n OrderTransitionStateAction,\n Product,\n ProductPagedQueryResponse,\n ProductVariant,\n ReferenceTypeId,\n State,\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 transitionState: (\n projectKey: string,\n resource: Writable<Order>,\n { state }: OrderTransitionStateAction\n ) => {\n const resolvedType = this._storage.getByResourceIdentifier(\n projectKey,\n state\n ) as State | null\n\n if (!resolvedType) {\n throw new Error(\n `No state found with key=${state.key} or id=${state.key}`\n )\n }\n\n resource.state = { typeId: 'state', id: resolvedType.id }\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 { Router } from 'express'\nimport { CartRepository } from '../repositories/cart'\nimport { AbstractStorage } from '../storage'\nimport { Cart, CartDraft, Order } from '@commercetools/platform-sdk'\nimport { OrderRepository } from '../repositories/order'\n\nexport class CartService extends AbstractService {\n public repository: CartRepository\n public orderRepository: OrderRepository\n\n constructor(parent: Router, storage: AbstractStorage) {\n super(parent)\n this.repository = new CartRepository(storage)\n this.orderRepository = new OrderRepository(storage)\n }\n\n getBasePath() {\n return 'carts'\n }\n\n extraRoutes(parent: Router) {\n parent.post('/replicate', (request, response) => {\n // @ts-ignore\n const cartOrOrder: Cart | Order | null =\n request.body.reference.typeId === 'order'\n ? this.orderRepository.get(\n request.params.projectKey,\n request.body.reference.id\n )\n : this.repository.get(\n request.params.projectKey,\n request.body.reference.id\n )\n\n if (!cartOrOrder) {\n return response.status(400).send()\n }\n\n const cartDraft: CartDraft = {\n ...cartOrOrder,\n currency: cartOrOrder.totalPrice.currencyCode,\n discountCodes: [],\n lineItems: cartOrOrder.lineItems.map(lineItem => {\n return {\n ...lineItem,\n variantId: lineItem.variant.id,\n sku: lineItem.variant.sku,\n }\n }),\n }\n\n const newCart = this.repository.create(\n request.params.projectKey,\n cartDraft\n )\n\n return response.status(200).send(newCart)\n })\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\n create(projectKey: string, draft: CustomerDraft): Customer {\n const resource: Customer = {\n ...getBaseResourceProperties(),\n email: draft.email,\n password: draft.password\n ? Buffer.from(draft.password).toString('base64')\n : undefined,\n isEmailVerified: draft.isEmailVerified || false,\n addresses: [],\n }\n this.save(projectKey, resource)\n return resource\n }\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 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 router.post('/login', this.signIn.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 signIn(request: Request, response: Response) {\n const { email, password } = request.body\n const encodedPassword = Buffer.from(password).toString('base64')\n\n const result = this.repository.query(request.params.projectKey, {\n where: [`email = \"${email}\"`, `password = \"${encodedPassword}\"`],\n })\n\n if (result.count === 0) {\n return response.status(400).send({\n message: 'Account with the given credentials not found.',\n errors: [\n {\n code: 'InvalidCredentials',\n message: 'Account with the given credentials not found.',\n },\n ],\n })\n }\n\n return response.status(200).send({ customer: result.results[0] })\n }\n}\n","import AbstractService from './abstract'\nimport { Router } from 'express'\nimport { AbstractStorage } from '../storage'\nimport { OrderRepository } from '../repositories/order'\n\nexport class MyOrderService 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 '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('/orders/', this.get.bind(this))\n router.get('/orders/:id', this.getWithId.bind(this))\n\n router.delete('/orders/:id', this.deletewithId.bind(this))\n\n router.post('/orders/', this.post.bind(this))\n router.post('/orders/:id', this.postWithId.bind(this))\n\n parent.use(`/${basePath}`, router)\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'\nimport { MyOrderService } from './services/my-order'\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-order': new MyOrderService(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","currency","currencyCode","price","selectPrice","country","productKey","productSlug","slug","productType","discountedPricePerQuantity","lineItemMode","priceMode","calculateCartTotalPrice","removeLineItem","lineItemId","lineItem","shouldDelete","setBillingAddress","address","billingAddress","setShippingMethod","shippingMethod","resolvedType","shippingInfo","setCountry","setCustomerEmail","email","customerEmail","setCustomField","custom","setCustomType","setLocale","locale","setShippingAddress","shippingAddress","draftLineItem","quant","draftLineItemtoLineItem","cartState","customLineItems","taxMode","taxRoundingMode","taxCalculationMode","refusedGifts","origin","getActiveCart","countryMatch","currencyMatch","reduce","cur","OrderRepository","addPayment","resolvedPayment","paymentInfo","payments","changeOrderState","orderState","changePaymentState","paymentState","transitionState","setOrderNumber","orderNumber","setStore","storeReference","syncInfo","lastMessageSequenceNumber","import","lineItemFromImportDraft","customLineItemFromImportDraft","taxRate","getWithOrderNumber","CartService","orderRepository","cartOrOrder","cartDraft","discountCodes","newCart","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","stateObj","paymentStatus","amountPlanned","paymentMethodInfo","interfaceInteractions","interaction","MyPaymentService","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","signIn","encodedPassword","errors","MyOrderService","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","nock","reply","uri","supertest"],"mappings":"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"}