{"_id":"@35up/js-sdk-base","_rev":"4-29edbadf9ce26907bc13959aeaa0157e","name":"@35up/js-sdk-base","dist-tags":{"latest":"1.0.0"},"versions":{"1.0.0":{"name":"@35up/js-sdk-base","version":"1.0.0","keywords":["bootstrap"],"author":{"name":"35up GmbH","email":"the.engineers@35up.com"},"license":"MIT","_id":"@35up/js-sdk-base@1.0.0","maintainers":[{"name":"gustavoaz7","email":"gustavo_azevedo_7@hotmail.com"},{"name":"enjoythelive1","email":"enjoythelive1@gmail.com"},{"name":"drafter500","email":"vzemtsov@yahoo.com"},{"name":"schrodervictor","email":"schrodervictor@gmail.com"},{"name":"35up-npm","email":"npm@35up.com"}],"homepage":"https://github.com/35up/js-sdk#readme","bugs":{"url":"https://github.com/35up/js-sdk/issues"},"amd":"dist/35up-js-sdk.amd.min.js","dist":{"shasum":"dcab3ebabdb8c36cf0f4b8b927f8384c5f4f41ce","tarball":"https://registry.npmjs.org/@35up/js-sdk-base/-/js-sdk-base-1.0.0.tgz","fileCount":25,"integrity":"sha512-Qg0XogfM4pjBEB8wf4c5KWo+mXk8gdh82cc/2qA6wuGcjFSMF/kWmw2RjbSgrzOgRHMvpV2gOAL3noUJTLsNKA==","signatures":[{"sig":"MEUCIAIfOdL50FzCRXy4QwwD1TycVzNznzB+6e/M1Jf/XSvOAiEA5EVEoWHgaNKHIB0eDSBJ47VfV6Qk/z7zjtBsDLTTIQ8=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":190717,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJkNacjACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmqxFw/+LcRCw2rXPd2jvvu551yF1smQL2htjKAyt/L5ofit6ssb7xOo\r\nhjhb7fA9zvChuQUENzM1poruVW/OsNBbevb9kYZxp38ukhwUZlwAO0gkogxS\r\nIl+7t9U+9F0oSvh1VhBYdX2SVfK1fURJTNi5q6UAhTuMcrv5sLZrsnjKuo0k\r\nNnRpfOQSD5sCpzZJd5WXsmOPJjEjwdBH9KsJ/lFo6I3SmJnpDcMPhua8EMH2\r\n+vTIvg3JGCdQgjAQwHLcdhooi3wkyPY7WKIKUmbHFMkwuYRt3tujYLr1t4Ac\r\nL3C04hGBUd6pT9gI74+nAESANc/V9n0SrRw6khxEYY0QIxwa55+gWKfNbabm\r\nudLEpPk1ePID7yLBS694zGwG6LPnSDTJft5XxPlB8ALjD5HBGt0sDGfLZuxM\r\nT+IYHbLHBApto+FkoxXP76WWgV6v2fy2GL2B7+T0QgX/0KkD7aqxvc0w8rwt\r\nMWpLXaSmjPOQydvSSHHjOSKEsPhwl3t9RRhm2Y8lrHKMbbTszQkM/38e7KQg\r\nD8pVSK0JzTn5MAScJdiFp3k58Hpx6j1X6cKohCm5huBJm4+xonZcKP0FBp1R\r\npQ5BzHQCtDpOaijnOJsy7AYXbvMCZ1q6hmUshh7l29ihiDJBnprBBFtO+1Vs\r\ni+srYcCVrRpsI5vz/s0A9Ju07IMDiW9w06Y=\r\n=1FjN\r\n-----END PGP SIGNATURE-----\r\n"},"iife":"dist/35up-js-sdk.iife.min.js","main":"dist/35up-js-sdk.cjs.js","types":"dist/index.d.ts","module":"dist/35up-js-sdk.esm.js","gitHead":"f885f348926e0558ecd3f664363a19e80cc3b439","scripts":{"lint":"eslint --ext .js,.ts .","test":"jest --passWithNoTests","build":"ENV=production rollup --config rollup.config.js","bootstrap":"lerna bootstrap","build:mock":"ENV=mock rollup --config rollup.config.js","test:watch":"npm test -- --watch","build:stage":"ENV=staging rollup --config rollup.config.js","bump-version":"lerna version --no-git-tag-version --no-push","test:coverage":"npm test -- --coverage","prepublishOnly":"make ci"},"_npmUser":{"name":"drafter500","email":"vzemtsov@yahoo.com"},"repository":{"url":"git+https://github.com/35up/js-sdk.git","type":"git"},"_npmVersion":"9.3.1","description":"Javascript SDK library for integrating 35up into your web shop","directories":{},"_nodeVersion":"18.14.0","dependencies":{"zod":"^3.19.1","tslib":"^2.4.1","nanoid":"^3.3.4","@35up/http-client":"^2.1.6"},"_hasShrinkwrap":false,"devDependencies":{"chai":"^4.3.6","jest":"^28.1.0","lerna":"^5.5.2","sinon":"^14.0.0","eslint":"^8.23.0","rollup":"^2.79.0","ts-jest":"^28.0.8","babel-jest":"^28.1.0","sinon-chai":"^3.7.0","typescript":"^4.9.3","@babel/core":"^7.18.13","@types/chai":"^4.3.3","@types/jest":"^28.0.0","chai-string":"^1.5.0","@types/sinon":"^10.0.13","jest-fetch-mock":"^3.0.3","@babel/preset-env":"^7.18.10","@types/sinon-chai":"^3.2.8","@types/chai-string":"^1.4.2","rollup-plugin-terser":"^7.0.2","@35up/tslib-test-utils":"^2.0.1","jest-environment-jsdom":"^28.1.1","@rollup/plugin-commonjs":"^22.0.2","@rollup/plugin-typescript":"^8.4.0","@typescript-eslint/parser":"^5.9.1","@rollup/plugin-node-resolve":"^13.3.0","@35up/eslint-config-35up-base":"^4.0.9","@typescript-eslint/eslint-plugin":"^5.9.1"},"_npmOperationalInternal":{"tmp":"tmp/js-sdk-base_1.0.0_1681237794918_0.10826951689982023","host":"s3://npm-registry-packages"}}},"time":{"created":"2023-04-11T18:29:54.857Z","modified":"2026-04-01T20:19:17.103Z","1.0.0":"2023-04-11T18:29:55.125Z"},"bugs":{"url":"https://github.com/35up/js-sdk/issues"},"author":{"name":"35up GmbH","email":"the.engineers@35up.com"},"license":"MIT","homepage":"https://github.com/35up/js-sdk#readme","keywords":["bootstrap"],"repository":{"url":"git+https://github.com/35up/js-sdk.git","type":"git"},"description":"Javascript SDK library for integrating 35up into your web shop","maintainers":[{"email":"npm@35up.com","name":"35up-npm"},{"email":"vzemtsov@yahoo.com","name":"drafter500"}],"readme":"# 35up Javascript SDK - base\n\nThis library is used as a dependency for `js-sdk-browser` and `js-sdk-node`\npackages. It exposes common functionality that are used in both environments. \nDo not install this package directly. Instead, use either \n[browser](packages/browser/README.md) or [node](packages/node/README.md).\n\n## Methods\n\n### `getRecommendations`\nReturns a list of product recommendations based on the input\n\n#### Input\n```ts\n  interface RecommendationParams {\n    baseProduct: {\n      title: string,\n      price?: number,\n      value?: number,\n      color?: string,\n      category?: string,\n      tag?: boolean | string | number | object,\n      [key: string]?: unknown,\n    },\n    customer?: {\n      age?: number | [number, number],\n      gender?: string,\n      postcode?: number,\n      city?: string,\n      country?: string,\n      [key: string]?: unknown,\n    },\n    lang?: string,\n    country?: string,\n    limit?: number,\n  }\n```\n\nExample:\n\n```ts\n  const params: RecommendationParams = {\n    partner: 'partner-id',\n    limit: 10,\n    baseProduct: {\n      title: 'Samsung Galaxy S20',\n      category: 'Electronics',\n      extra: {\n        'device-type': 'smartphone',\n      },\n    },\n    customer: {\n      age: [20, 30],\n      cities: ['Berlin', 'Frankfurt am Main'],\n    },\n  };\n```\n\nNote that `getRecommendations` is an asynchronous function and returns a \n`Promise`.\n\n#### Output\n\n```ts\n  interface Recommendation {\n    sku: string;\n    vendor: {\n      id: string;\n      name: string;\n      legalName: string;\n      logo: {\n        square: string;\n        landscape: string;\n      };\n    };\n    name: string;\n    images: {\n      thumbnail: string;\n      small?: string;\n      medium?: string;\n      large?: string;\n    };\n    descriptions: {\n      short: string;\n      long: string;\n    };\n    specs: {\n      type: string;\n      materials?: string[];\n      color?: string;\n      weight?: { unit: string; value: number; };\n      width?: { unit: string; value: number; };\n      height?: { unit: string; value: number; };\n      length?: { unit: string; value: number; };\n      contract?: {\n        duration?: { unit: string; value: number; };\n      }\n    };\n    delivery?: {\n      timeMin?: number;\n      timeMax?: number;\n      package?: {\n        weight?: { unit: string; value: number; };\n        width?: { unit: string; value: number; };\n        height?: { unit: string; value: number; };\n        length?: { unit: string; value: number; };\n      }\n    };\n    price?: {\n      value: number;\n      currency: string;\n      formatted: string;\n      label?: string;\n    };\n    gtin?: Record<string, string>;\n    taxes?: {\n      code: string;\n      type: string;\n      base: string;\n      rate: number;\n      included: boolean;\n    }[];\n    urls?: Record<string, string>;\n    actions?: {\n      singleClickCheckout?: string;\n      addToCart: string;\n      deleteFromCart: string;\n      goToCart?: string;\n      goToCheckout: string;\n    };\n    details?: Record<string, unknown>;\n    categories?: string[];\n    tags?: string[];\n  }\n```\n\nExample: \n\n```ts\n  const recommendations: Recommendation[] = [{\n    name: 'Galaxy S500 HardCase, \"Realism\" by Dan Say',\n    sku: 'caseable/BCI60XX114014XXAPIP67',\n    categories: [],\n    vendor: {\n      id: 'caseable',\n      legalName: 'caseable GmbH',\n      name: 'caseable',\n      logo: {\n        landscape: 'https://caseable.com/media/logo/horizontal.png',\n        square: 'https://caseable.com/media/logo/squared.png',\n      },\n    },\n    price: {\n      value: 99.3,\n      currency: 'EUR',\n      formatted: '€ 99,30',\n    },\n    actions: {\n      addToCart: 'https://easy.35up.io/de/de/add/sku/BCI60XX114014XXAPIP67/?partner=o2',\n      deleteFromCart: 'https://easy.35up.io/de/de/delete/sku/BCI60XX114014XXAPIP67/?partner=o2',\n      goToCheckout: 'https://easy.35up.io/de/de/go/checkout/?partner=o2',\n      goToCart: 'https://easy.35up.io/de/de/go/cart/?partner=o2',\n      singleClickCheckout: 'https://easy.35up.io/de/de/add-and-go/sku/BCI60XX114014XXAPIP67/?partner=o2',\n    },\n    descriptions: {\n      short: 'Hardnut cello phone case',\n      long: 'Our hardnut cello phone cases can be attached to your smartphone...',\n    },\n    images: {\n      thumbnail: 'https://caseable.com/media/product/galaxy-s500-hc/dan-say/realism/thumb.jpg',\n      small: 'https://caseable.com/media/product/galaxy-s500-hc/dan-say/realism/small.jpg',\n      medium: 'https://caseable.com/media/product/galaxy-s500-hc/dan-say/realism/medium.jpg',\n      large: 'https://caseable.com/media/product/galaxy-s500-hc/dan-say/realism/large.jpg',\n    },\n    delivery: {\n      timeMin: 3,\n      timeMax: 5,\n      package: {\n        height: { value: 15, unit: 'cm' },\n        length: { value: 5, unit: 'mm' },\n        weight: { value: 300, unit: 'gr' },\n        width: { value: 5, unit: 'cm' },\n      },\n    },\n    taxes: [\n      {\n        code: 'MNL',\n        type: 'included',\n        base: 'net',\n        rate: 0.27,\n        included: false,\n      },\n      {\n        code: 'VAT',\n        type: 'standard',\n        base: 'gross',\n        rate: 0.15,\n        included: true,\n      },\n    ],\n    gtin: { isbn: '2355232435' },\n    specs: {\n      height: { value: 15, unit: 'cm' },\n      weight: { value: 300, unit: 'gr' },\n      width: { value: 5, unit: 'cm' },\n      length: { value: 5, unit: 'mm' },\n      color: 'darkblue',\n      type: 'phone hard case',\n      materials: [ 'silicon', 'plastic' ],\n    },\n  }];\n```\n\n#### `getProduct`\nReturns details of a given product\n\n#### Input\n```ts\n  interface GetProductDetailsParams {\n    sku: string,\n    lang?: string;\n    country?: string;\n  }\n```\n\nExample: \n```ts\n  const params: GetProductDetailsParams = {\n    sku: 'abcd1234',\n    lang: 'en',\n    country: 'uk',\n  };\n```\n\nNote that `getProduct` is an asynchronous function and returns a \n`Promise`.\n\n#### Output\n\n```ts\n  interface Product {\n    sku: string;\n    vendor: {\n        id: string;\n        name: string;\n        legalName: string;\n        logo: {\n          square: string;\n          landscape: string;\n        };\n      };\n      name: string;\n      images: {\n        thumbnail: string;\n        small?: string;\n        medium?: string;\n        large?: string;\n      };\n      descriptions: {\n        short: string;\n        long: string;\n      };\n    categories: string[];\n    actions: {\n      singleClickCheckout?: string;\n      addToCart: string;\n      deleteFromCart: string;\n      goToCart?: string;\n      goToCheckout: string;\n    };\n    delivery: {\n      timeMin?: number;\n      timeMax?: number;\n      package?: {\n        weight?: { unit: string; value: number; };\n        width?: { unit: string; value: number; };\n        height?: { unit: string; value: number; };\n        length?: { unit: string; value: number; };\n      }\n    };\n    specs?: {\n      type: string;\n      materials?: string[];\n      color?: string;\n      weight?: { unit: string; value: number; };\n      width?: { unit: string; value: number; };\n      height?: { unit: string; value: number; };\n      length?: { unit: string; value: number; };\n    };\n    gtin?: Record<string, string>;\n    taxes: {\n      code: string;\n      type: string;\n      base: string;\n      rate: number;\n      included: boolean;\n    }[];\n  }\n```\n\nExample:\n\n```ts\n  const product: Product = {\n    name: 'Galaxy S10 HardCase, \"Release\" by Dan May',\n    sku: 'caseable/HCI60XX114014XXAPIP60',\n    categories: [\n      'accessories',\n      'cases',\n    ],\n    vendor: {\n      id: 'caseable',\n      legalName: 'caseable GmbH',\n      name: 'caseable',\n      logo: {\n        landscape: 'https://caseable.com/media/logo/horizontal.png',\n        square: 'https://caseable.com/media/logo/squared.png',\n      },\n    },\n    price: {\n      value: 29.3,\n      currency: 'EUR',\n      formatted: '€ 29,30',\n    },\n    actions: {\n      addToCart: 'https://easy.35up.io/de/de/add/sku/HCI60XX114014XXAPIP60/?partner=o2',\n      deleteFromCart: 'https://easy.35up.io/de/de/delete/sku/HCI60XX114014XXAPIP60/?partner=o2',\n      goToCheckout: 'https://easy.35up.io/de/de/go/checkout/?partner=o2',\n      goToCart: 'https://easy.35up.io/de/de/go/cart/?partner=o2',\n      singleClickCheckout: 'https://easy.35up.io/de/de/add-and-go/sku/HCI60XX114014XXAPIP60/?partner=o2',\n    },\n    descriptions: {\n      short: 'Hardshell cell phone case',\n      long: 'Our hardshell cell phone cases can be attached to your smartphone...',\n    },\n    images: {\n      thumbnail: 'https://caseable.com/media/product/galaxy-s10-hc/dan-may/release/thumb.jpg',\n      small: 'https://caseable.com/media/product/galaxy-s10-hc/dan-may/release/small.jpg',\n      medium: 'https://caseable.com/media/product/galaxy-s10-hc/dan-may/release/medium.jpg',\n      large: 'https://caseable.com/media/product/galaxy-s10-hc/dan-may/release/large.jpg',\n    },\n    delivery: {\n      timeMax: 4,\n      timeMin: 2,\n    },\n    taxes: [],\n    gtin: { ian: 'asdfb' },\n    specs: {\n      type: 'phone hard case',\n    },\n  };\n```\n\n## Exceptions\n\nIn case there is an issue while executing any of the methods the exception is \ngoing to be thrown. In effect the promise returned by the method will be \nrejected. In addition to the default js errors, the following can be thrown \n(in case you want to handle them separately):\n- `BadParamsError`: in case provided input does not match the expected one\n- `ValidationError`: in case the response data is corrupted\n\n\n## Requirements\n\nSDK library uses following javascript API and features, please make sure you have them polyfilled if you support older browsers:\n - [Fetch API]\n - [Object.entries]\n - [Object.fromEntries]\n - [Object.values]\n - [Object.keys]\n - [Symbol]\n - [Array.isArray]\n\n\n<!-- LINKS -->\n\n[Fetch API]: https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API\n[Object.entries]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/entries\n[Object.fromEntries]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/fromEntries\n[Object.values]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/values\n[Object.keys]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/keys\n[Symbol]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol\n[Array.isArray]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/isArray\n","readmeFilename":"README.md"}