@wix/sdk 1.1.15 → 1.1.17

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.
@@ -0,0 +1,78 @@
1
+ "use strict";
2
+
3
+ exports.__esModule = true;
4
+ exports.OAuthStrategy = OAuthStrategy;
5
+ var _wixClient = require("../wixClient");
6
+ var _identity = require("@wix/identity");
7
+ function OAuthStrategy(config) {
8
+ const wixClient = (0, _wixClient.createClient)({
9
+ modules: {
10
+ oauth: _identity.oauth
11
+ }
12
+ });
13
+ const generateVisitorTokens = async tokens => {
14
+ if (tokens != null && tokens.accessToken && tokens != null && tokens.refreshToken && !isTokenExpired(tokens.accessToken)) {
15
+ return Promise.resolve(tokens);
16
+ }
17
+ if (tokens != null && tokens.refreshToken) {
18
+ return renewToken(tokens.refreshToken);
19
+ }
20
+ const tokensResponse = await wixClient.oauth.token({
21
+ preAuthenticated: {
22
+ clientId: config.clientId
23
+ }
24
+ });
25
+ return {
26
+ accessToken: tokensResponse.accessToken.token,
27
+ refreshToken: tokensResponse.refreshToken.token
28
+ };
29
+ };
30
+ const renewToken = async refreshToken => {
31
+ const tokensResponse = await wixClient.oauth.token({
32
+ refreshToken: {
33
+ token: refreshToken
34
+ },
35
+ preAuthenticated: {
36
+ clientId: config.clientId
37
+ }
38
+ });
39
+ return {
40
+ accessToken: tokensResponse.accessToken.token,
41
+ refreshToken: tokensResponse.refreshToken.token
42
+ };
43
+ };
44
+ return setHeaders => ({
45
+ generateVisitorTokens,
46
+ renewToken,
47
+ isTokenExpired,
48
+ setTokens: tokens => {
49
+ setHeaders({
50
+ Authorization: tokens.accessToken
51
+ });
52
+ }
53
+ });
54
+ }
55
+ function parseJWT(token) {
56
+ const base64Url = token.split('.')[1];
57
+ if (window) {
58
+ const base64 = base64Url.replace(/-/g, '+').replace(/_/g, '/');
59
+ const jsonPayload = decodeURIComponent(window.atob(base64).split('').map(c => {
60
+ return '%' + ('00' + c.charCodeAt(0).toString(16)).slice(-2);
61
+ }).join(''));
62
+ return JSON.parse(jsonPayload);
63
+ } else {
64
+ return JSON.parse(Buffer.from(base64Url, 'base64').toString());
65
+ }
66
+ }
67
+ function isTokenExpired(token) {
68
+ const {
69
+ expirationDate
70
+ } = parseJWT(token);
71
+ if (expirationDate) {
72
+ const expirationDateObj = new Date(expirationDate);
73
+ const currentDateObj = new Date();
74
+ return currentDateObj > expirationDateObj;
75
+ }
76
+ return false;
77
+ }
78
+ //# sourceMappingURL=OAuthStrategy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["OAuthStrategy","config","wixClient","createClient","modules","oauth","generateVisitorTokens","tokens","accessToken","refreshToken","isTokenExpired","Promise","resolve","renewToken","tokensResponse","token","preAuthenticated","clientId","setHeaders","setTokens","Authorization","parseJWT","base64Url","split","window","base64","replace","jsonPayload","decodeURIComponent","atob","map","c","charCodeAt","toString","slice","join","JSON","parse","Buffer","from","expirationDate","expirationDateObj","Date","currentDateObj"],"sources":["../../../src/auth/OAuthStrategy.ts"],"sourcesContent":["import { createClient } from '../wixClient';\nimport { oauth } from '@wix/identity';\n\ninterface Tokens {\n accessToken: string;\n refreshToken: string;\n}\n\ninterface IOAuthStrategy {\n generateVisitorTokens(tokens?: {\n refreshToken?: string;\n accessToken?: string;\n }): Promise<Tokens>;\n renewToken: (refreshToken: string) => Promise<Tokens>;\n isTokenExpired: (accessToken: string) => boolean;\n setTokens: (tokens: Tokens) => void;\n}\n\nexport function OAuthStrategy(config: { clientId: string }) {\n const wixClient = createClient({ modules: { oauth } });\n\n const generateVisitorTokens = async (\n tokens?: Partial<Tokens>,\n ): Promise<Tokens> => {\n if (\n tokens?.accessToken &&\n tokens?.refreshToken &&\n !isTokenExpired(tokens.accessToken)\n ) {\n return Promise.resolve(tokens) as Promise<Tokens>;\n }\n\n if (tokens?.refreshToken) {\n return renewToken(tokens.refreshToken);\n }\n\n const tokensResponse = await wixClient.oauth.token({\n preAuthenticated: {\n clientId: config.clientId,\n },\n });\n\n return {\n accessToken: tokensResponse.accessToken!.token!,\n refreshToken: tokensResponse.refreshToken!.token!,\n };\n };\n\n const renewToken = async (refreshToken: string): Promise<Tokens> => {\n const tokensResponse = await wixClient.oauth.token({\n refreshToken: { token: refreshToken },\n preAuthenticated: {\n clientId: config.clientId,\n },\n });\n return {\n accessToken: tokensResponse.accessToken!.token!,\n refreshToken: tokensResponse.refreshToken!.token!,\n };\n };\n\n return (setHeaders: Function): IOAuthStrategy => ({\n generateVisitorTokens,\n renewToken,\n isTokenExpired,\n setTokens: (tokens: Tokens): void => {\n setHeaders({ Authorization: tokens.accessToken });\n },\n });\n}\n\nfunction parseJWT(token: string) {\n const base64Url = token.split('.')[1];\n if (window) {\n const base64 = base64Url.replace(/-/g, '+').replace(/_/g, '/');\n const jsonPayload = decodeURIComponent(\n window\n .atob(base64)\n .split('')\n .map((c) => {\n return '%' + ('00' + c.charCodeAt(0).toString(16)).slice(-2);\n })\n .join(''),\n );\n\n return JSON.parse(jsonPayload);\n } else {\n return JSON.parse(Buffer.from(base64Url, 'base64').toString());\n }\n}\n\nfunction isTokenExpired(token: string): boolean {\n const { expirationDate } = parseJWT(token);\n if (expirationDate) {\n const expirationDateObj = new Date(expirationDate);\n const currentDateObj = new Date();\n return currentDateObj > expirationDateObj;\n }\n return false;\n}\n"],"mappings":";;;;AAAA;AACA;AAiBO,SAASA,aAAa,CAACC,MAA4B,EAAE;EAC1D,MAAMC,SAAS,GAAG,IAAAC,uBAAY,EAAC;IAAEC,OAAO,EAAE;MAAEC,KAAK,EAALA;IAAM;EAAE,CAAC,CAAC;EAEtD,MAAMC,qBAAqB,GAAG,MAC5BC,MAAwB,IACJ;IACpB,IACEA,MAAM,YAANA,MAAM,CAAEC,WAAW,IACnBD,MAAM,YAANA,MAAM,CAAEE,YAAY,IACpB,CAACC,cAAc,CAACH,MAAM,CAACC,WAAW,CAAC,EACnC;MACA,OAAOG,OAAO,CAACC,OAAO,CAACL,MAAM,CAAC;IAChC;IAEA,IAAIA,MAAM,YAANA,MAAM,CAAEE,YAAY,EAAE;MACxB,OAAOI,UAAU,CAACN,MAAM,CAACE,YAAY,CAAC;IACxC;IAEA,MAAMK,cAAc,GAAG,MAAMZ,SAAS,CAACG,KAAK,CAACU,KAAK,CAAC;MACjDC,gBAAgB,EAAE;QAChBC,QAAQ,EAAEhB,MAAM,CAACgB;MACnB;IACF,CAAC,CAAC;IAEF,OAAO;MACLT,WAAW,EAAEM,cAAc,CAACN,WAAW,CAAEO,KAAM;MAC/CN,YAAY,EAAEK,cAAc,CAACL,YAAY,CAAEM;IAC7C,CAAC;EACH,CAAC;EAED,MAAMF,UAAU,GAAG,MAAOJ,YAAoB,IAAsB;IAClE,MAAMK,cAAc,GAAG,MAAMZ,SAAS,CAACG,KAAK,CAACU,KAAK,CAAC;MACjDN,YAAY,EAAE;QAAEM,KAAK,EAAEN;MAAa,CAAC;MACrCO,gBAAgB,EAAE;QAChBC,QAAQ,EAAEhB,MAAM,CAACgB;MACnB;IACF,CAAC,CAAC;IACF,OAAO;MACLT,WAAW,EAAEM,cAAc,CAACN,WAAW,CAAEO,KAAM;MAC/CN,YAAY,EAAEK,cAAc,CAACL,YAAY,CAAEM;IAC7C,CAAC;EACH,CAAC;EAED,OAAQG,UAAoB,KAAsB;IAChDZ,qBAAqB;IACrBO,UAAU;IACVH,cAAc;IACdS,SAAS,EAAGZ,MAAc,IAAW;MACnCW,UAAU,CAAC;QAAEE,aAAa,EAAEb,MAAM,CAACC;MAAY,CAAC,CAAC;IACnD;EACF,CAAC,CAAC;AACJ;AAEA,SAASa,QAAQ,CAACN,KAAa,EAAE;EAC/B,MAAMO,SAAS,GAAGP,KAAK,CAACQ,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;EACrC,IAAIC,MAAM,EAAE;IACV,MAAMC,MAAM,GAAGH,SAAS,CAACI,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAACA,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC;IAC9D,MAAMC,WAAW,GAAGC,kBAAkB,CACpCJ,MAAM,CACHK,IAAI,CAACJ,MAAM,CAAC,CACZF,KAAK,CAAC,EAAE,CAAC,CACTO,GAAG,CAAEC,CAAC,IAAK;MACV,OAAO,GAAG,GAAG,CAAC,IAAI,GAAGA,CAAC,CAACC,UAAU,CAAC,CAAC,CAAC,CAACC,QAAQ,CAAC,EAAE,CAAC,EAAEC,KAAK,CAAC,CAAC,CAAC,CAAC;IAC9D,CAAC,CAAC,CACDC,IAAI,CAAC,EAAE,CAAC,CACZ;IAED,OAAOC,IAAI,CAACC,KAAK,CAACV,WAAW,CAAC;EAChC,CAAC,MAAM;IACL,OAAOS,IAAI,CAACC,KAAK,CAACC,MAAM,CAACC,IAAI,CAACjB,SAAS,EAAE,QAAQ,CAAC,CAACW,QAAQ,EAAE,CAAC;EAChE;AACF;AAEA,SAASvB,cAAc,CAACK,KAAa,EAAW;EAC9C,MAAM;IAAEyB;EAAe,CAAC,GAAGnB,QAAQ,CAACN,KAAK,CAAC;EAC1C,IAAIyB,cAAc,EAAE;IAClB,MAAMC,iBAAiB,GAAG,IAAIC,IAAI,CAACF,cAAc,CAAC;IAClD,MAAMG,cAAc,GAAG,IAAID,IAAI,EAAE;IACjC,OAAOC,cAAc,GAAGF,iBAAiB;EAC3C;EACA,OAAO,KAAK;AACd"}
package/dist/cjs/index.js CHANGED
@@ -1,20 +1,22 @@
1
1
  "use strict";
2
2
 
3
3
  exports.__esModule = true;
4
-
5
4
  var _wixClient = require("./wixClient");
6
-
7
5
  Object.keys(_wixClient).forEach(function (key) {
8
6
  if (key === "default" || key === "__esModule") return;
9
7
  if (key in exports && exports[key] === _wixClient[key]) return;
10
8
  exports[key] = _wixClient[key];
11
9
  });
12
-
13
10
  var _wixMedia = require("./wixMedia");
14
-
15
11
  Object.keys(_wixMedia).forEach(function (key) {
16
12
  if (key === "default" || key === "__esModule") return;
17
13
  if (key in exports && exports[key] === _wixMedia[key]) return;
18
14
  exports[key] = _wixMedia[key];
19
15
  });
16
+ var _OAuthStrategy = require("./auth/OAuthStrategy");
17
+ Object.keys(_OAuthStrategy).forEach(function (key) {
18
+ if (key === "default" || key === "__esModule") return;
19
+ if (key in exports && exports[key] === _OAuthStrategy[key]) return;
20
+ exports[key] = _OAuthStrategy[key];
21
+ });
20
22
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"names":[],"sources":["../../src/index.ts"],"sourcesContent":["export * from './wixClient';\nexport * from './wixMedia';\n"],"mappings":";;;;AAAA;;AAAA;EAAA;EAAA;EAAA;AAAA;;AACA;;AAAA;EAAA;EAAA;EAAA;AAAA"}
1
+ {"version":3,"names":[],"sources":["../../src/index.ts"],"sourcesContent":["export * from './wixClient';\nexport * from './wixMedia';\nexport * from './auth/OAuthStrategy';\n"],"mappings":";;;AAAA;AAAA;EAAA;EAAA;EAAA;AAAA;AACA;AAAA;EAAA;EAAA;EAAA;AAAA;AACA;AAAA;EAAA;EAAA;EAAA;AAAA"}
@@ -3,22 +3,20 @@
3
3
  exports.__esModule = true;
4
4
  exports.createClient = createClient;
5
5
  const API_URL = 'www.wixapis.com';
6
-
7
- const wrapperBuilder = (origFunc, headers // @ts-expect-error
6
+ const wrapperBuilder = (origFunc, headers
7
+ // @ts-expect-error
8
8
  ) => {
9
9
  return origFunc({
10
10
  request: async factory => {
11
- if (!headers.Authorization) {
12
- // eslint-disable-next-line no-throw-literal
13
- throw errorBuilder(500, 'You must set Authorization header before triggering a call');
14
- }
15
-
16
11
  const requestOptions = factory({
17
12
  host: API_URL
18
13
  });
19
-
14
+ let url = `https://${API_URL}${requestOptions.url}`;
15
+ if (requestOptions.params) {
16
+ url += `?${new URLSearchParams(requestOptions.params)}`;
17
+ }
20
18
  try {
21
- const res = await fetch(`https://${API_URL}${requestOptions.url}`, {
19
+ const res = await fetch(url, {
22
20
  method: requestOptions.method,
23
21
  ...(requestOptions.data && {
24
22
  body: JSON.stringify(requestOptions.data)
@@ -28,42 +26,36 @@ const wrapperBuilder = (origFunc, headers // @ts-expect-error
28
26
  ...headers
29
27
  }
30
28
  });
31
-
32
29
  if (res.status !== 200) {
33
30
  var _dataError, _dataError2;
34
-
35
31
  let dataError = null;
36
-
37
32
  try {
38
33
  dataError = await res.json();
39
- } catch (e) {//
34
+ } catch (e) {
35
+ //
40
36
  }
41
-
42
37
  throw errorBuilder(res.status, (_dataError = dataError) == null ? void 0 : _dataError.message, (_dataError2 = dataError) == null ? void 0 : _dataError2.details);
43
38
  }
44
-
45
39
  const data = await res.json();
46
40
  return {
47
41
  data
48
42
  };
49
43
  } catch (e) {
50
44
  var _e$message;
51
-
52
45
  if ((_e$message = e.message) != null && _e$message.includes('fetch is not defined')) {
53
46
  console.error('Node.js v18+ is required');
54
47
  }
55
-
56
48
  throw e;
57
49
  }
58
50
  }
59
51
  });
60
52
  };
61
-
62
53
  const errorBuilder = (code, description, details) => {
63
54
  return {
64
55
  response: {
65
56
  data: {
66
- details: { ...details,
57
+ details: {
58
+ ...details,
67
59
  ...(!(details != null && details.validationError) && {
68
60
  applicationError: {
69
61
  description,
@@ -77,18 +69,14 @@ const errorBuilder = (code, description, details) => {
77
69
  }
78
70
  };
79
71
  };
80
-
81
72
  function createClient(config) {
82
73
  if (!config.modules || Object.entries(config.modules).length < 1) {
83
74
  throw new Error('Missing modules');
84
75
  }
85
-
86
76
  const _headers = config.headers || {
87
77
  Authorization: ''
88
78
  };
89
-
90
79
  const isObject = val => val && typeof val === 'object' && !Array.isArray(val);
91
-
92
80
  const traverse = obj => {
93
81
  return Object.entries(obj).reduce((prev, [key, value]) => {
94
82
  if (isObject(value)) {
@@ -98,18 +86,19 @@ function createClient(config) {
98
86
  } else {
99
87
  prev[key] = value;
100
88
  }
101
-
102
89
  return prev;
103
90
  }, {});
104
91
  };
105
-
106
- const wrappedModules = traverse(config.modules);
107
- return { ...wrappedModules,
108
- setHeaders: headers => {
109
- for (const k in headers) {
110
- _headers[k] = headers[k];
111
- }
92
+ const setHeaders = headers => {
93
+ for (const k in headers) {
94
+ _headers[k] = headers[k];
112
95
  }
113
96
  };
97
+ const wrappedModules = traverse(config.modules);
98
+ return {
99
+ ...wrappedModules,
100
+ auth: config.auth == null ? void 0 : config.auth(setHeaders),
101
+ setHeaders
102
+ };
114
103
  }
115
104
  //# sourceMappingURL=wixClient.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["API_URL","wrapperBuilder","origFunc","headers","request","factory","Authorization","errorBuilder","requestOptions","host","res","fetch","url","method","data","body","JSON","stringify","status","dataError","json","e","message","details","includes","console","error","code","description","response","validationError","applicationError","createClient","config","modules","Object","entries","length","Error","_headers","isObject","val","Array","isArray","traverse","obj","reduce","prev","key","value","wrappedModules","setHeaders","k"],"sources":["../../src/wixClient.ts"],"sourcesContent":["import { Simplify } from 'type-fest';\n\ntype Headers = { Authorization: string } & Record<string, string>;\n\ntype WithoutFunctionWrapper<T> = {\n [Key in keyof T]: T[Key] extends (...args: any) => any\n ? ReturnType<T[Key]>\n : Simplify<WithoutFunctionWrapper<T[Key]>>;\n};\n\nexport interface IWrapper {\n setHeaders(headers: Headers): void;\n}\n\nconst API_URL = 'www.wixapis.com';\n\nconst wrapperBuilder = <T extends Function>(\n origFunc: T,\n headers: Headers,\n // @ts-expect-error\n): ReturnType<T> => {\n return origFunc({\n request: async (factory: any) => {\n if (!headers.Authorization) {\n // eslint-disable-next-line no-throw-literal\n throw errorBuilder(\n 500,\n 'You must set Authorization header before triggering a call',\n );\n }\n\n const requestOptions = factory({ host: API_URL });\n try {\n const res = await fetch(`https://${API_URL}${requestOptions.url}`, {\n method: requestOptions.method,\n ...(requestOptions.data && {\n body: JSON.stringify(requestOptions.data),\n }),\n headers: {\n 'Content-Type': 'application/json',\n ...headers,\n },\n });\n if (res.status !== 200) {\n let dataError: any = null;\n try {\n dataError = await res.json();\n } catch (e) {\n //\n }\n throw errorBuilder(\n res.status,\n dataError?.message,\n dataError?.details,\n );\n }\n const data = await res.json();\n return { data };\n } catch (e: any) {\n if (e.message?.includes('fetch is not defined')) {\n console.error('Node.js v18+ is required');\n }\n throw e;\n }\n },\n });\n};\n\nconst errorBuilder = (code: number, description: string, details?: any) => {\n return {\n response: {\n data: {\n details: {\n ...details,\n ...(!details?.validationError && {\n applicationError: {\n description,\n code,\n },\n }),\n },\n message: description,\n },\n status: code,\n },\n };\n};\n\nexport function createClient<T = any>(config: {\n modules: T;\n headers?: Headers;\n}): WithoutFunctionWrapper<T> & IWrapper {\n if (!config.modules || Object.entries(config.modules).length < 1) {\n throw new Error('Missing modules');\n }\n\n const _headers: Headers = config.headers || { Authorization: '' };\n const isObject = (val: any) =>\n val && typeof val === 'object' && !Array.isArray(val);\n\n const traverse = (obj: any) => {\n return Object.entries(obj).reduce((prev: any, [key, value]) => {\n if (isObject(value)) {\n prev[key] = traverse(value);\n } else if (typeof obj[key] === 'function') {\n prev[key] = wrapperBuilder(value as Function, _headers);\n } else {\n prev[key] = value;\n }\n return prev;\n }, {});\n };\n\n const wrappedModules = traverse(config.modules);\n return {\n ...wrappedModules,\n setHeaders: (headers: Headers) => {\n for (const k in headers) {\n _headers[k] = headers[k];\n }\n },\n };\n}\n"],"mappings":"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"}
1
+ {"version":3,"names":["API_URL","wrapperBuilder","origFunc","headers","request","factory","requestOptions","host","url","params","URLSearchParams","res","fetch","method","data","body","JSON","stringify","status","dataError","json","e","errorBuilder","message","details","includes","console","error","code","description","response","validationError","applicationError","createClient","config","modules","Object","entries","length","Error","_headers","Authorization","isObject","val","Array","isArray","traverse","obj","reduce","prev","key","value","setHeaders","k","wrappedModules","auth"],"sources":["../../src/wixClient.ts"],"sourcesContent":["import { Simplify } from 'type-fest';\n\ntype Headers = { Authorization: string } & Record<string, string>;\n\ntype WithoutFunctionWrapper<T> = {\n [Key in keyof T]: T[Key] extends (...args: any) => any\n ? ReturnType<T[Key]>\n : Simplify<WithoutFunctionWrapper<T[Key]>>;\n};\n\nexport interface IWrapper<Z extends (...args: any) => any> {\n setHeaders(headers: Headers): void;\n auth: ReturnType<Z>;\n}\n\nconst API_URL = 'www.wixapis.com';\n\nconst wrapperBuilder = <T extends Function>(\n origFunc: T,\n headers: Headers,\n // @ts-expect-error\n): ReturnType<T> => {\n return origFunc({\n request: async (factory: any) => {\n const requestOptions = factory({ host: API_URL });\n let url = `https://${API_URL}${requestOptions.url}`;\n if (requestOptions.params) {\n url += `?${new URLSearchParams(requestOptions.params)}`;\n }\n try {\n const res = await fetch(url, {\n method: requestOptions.method,\n ...(requestOptions.data && {\n body: JSON.stringify(requestOptions.data),\n }),\n headers: {\n 'Content-Type': 'application/json',\n ...headers,\n },\n });\n if (res.status !== 200) {\n let dataError: any = null;\n try {\n dataError = await res.json();\n } catch (e) {\n //\n }\n throw errorBuilder(\n res.status,\n dataError?.message,\n dataError?.details,\n );\n }\n const data = await res.json();\n return { data };\n } catch (e: any) {\n if (e.message?.includes('fetch is not defined')) {\n console.error('Node.js v18+ is required');\n }\n throw e;\n }\n },\n });\n};\n\nconst errorBuilder = (code: number, description: string, details?: any) => {\n return {\n response: {\n data: {\n details: {\n ...details,\n ...(!details?.validationError && {\n applicationError: {\n description,\n code,\n },\n }),\n },\n message: description,\n },\n status: code,\n },\n };\n};\n\nexport function createClient<\n T = any,\n Z extends (...args: any) => any = any,\n>(config: {\n modules: T;\n auth?: Z;\n headers?: Headers;\n}): WithoutFunctionWrapper<T> & IWrapper<Z> {\n if (!config.modules || Object.entries(config.modules).length < 1) {\n throw new Error('Missing modules');\n }\n\n const _headers: Headers = config.headers || { Authorization: '' };\n const isObject = (val: any) =>\n val && typeof val === 'object' && !Array.isArray(val);\n\n const traverse = (obj: any) => {\n return Object.entries(obj).reduce((prev: any, [key, value]) => {\n if (isObject(value)) {\n prev[key] = traverse(value);\n } else if (typeof obj[key] === 'function') {\n prev[key] = wrapperBuilder(value as Function, _headers);\n } else {\n prev[key] = value;\n }\n return prev;\n }, {});\n };\n\n const setHeaders = (headers: Headers) => {\n for (const k in headers) {\n _headers[k] = headers[k];\n }\n };\n\n const wrappedModules = traverse(config.modules);\n return {\n ...wrappedModules,\n auth: config.auth?.(setHeaders),\n setHeaders,\n };\n}\n"],"mappings":"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"}
@@ -3,45 +3,34 @@
3
3
  exports.__esModule = true;
4
4
  exports.decodeText = decodeText;
5
5
  exports.media = void 0;
6
-
7
6
  var _imageKit = require("@wix/image-kit");
8
-
9
7
  var _querystring = require("querystring");
10
-
11
8
  const URL_HASH_PREFIX = '#';
12
9
  const WIX_PROTOCOL = 'wix:';
13
10
  const WIX_IMAGE = 'image';
14
-
15
- function getScaleToFillImageUrl(wixMediaIdentifier, targetWidth, targetHeight, options) {
16
- const img = getRawImageUrl(wixMediaIdentifier);
11
+ function getScaledToFillImageUrl(wixMediaIdentifier, targetWidth, targetHeight, options) {
12
+ const img = getImageUrl(wixMediaIdentifier);
17
13
  return _imageKit.sdk.getScaleToFillImageURL(img.id, img.height, img.width, targetWidth, targetHeight, options);
18
14
  }
19
-
20
- function getScaleToFitImageURL(wixMediaIdentifier, targetWidth, targetHeight, options) {
21
- const img = getRawImageUrl(wixMediaIdentifier);
15
+ function getScaledToFitImageUrl(wixMediaIdentifier, targetWidth, targetHeight, options) {
16
+ const img = getImageUrl(wixMediaIdentifier);
22
17
  return _imageKit.sdk.getScaleToFitImageURL(img.id, img.height, img.width, targetWidth, targetHeight, options);
23
18
  }
24
-
25
- function getCropImageURL(wixMediaIdentifier, cropX, cropY, cropWidth, cropHeight, targetWidth, targetHeight, options) {
26
- const img = getRawImageUrl(wixMediaIdentifier);
19
+ function getCroppedImageUrl(wixMediaIdentifier, cropX, cropY, cropWidth, cropHeight, targetWidth, targetHeight, options) {
20
+ const img = getImageUrl(wixMediaIdentifier);
27
21
  return _imageKit.sdk.getCropImageURL(img.id, img.height, img.width, cropX, cropY, cropWidth, cropHeight, targetWidth, targetHeight, options);
28
22
  }
29
-
30
- function getRawImageUrl(val) {
23
+ function getImageUrl(val) {
31
24
  const alignedImage = alignIfLegacy(val, WIX_IMAGE);
32
-
33
- const _URL = new URL(alignedImage),
34
- hash = _URL.hash,
35
- pathname = _URL.pathname;
36
-
37
- const _parse = (0, _querystring.parse)(hash.replace(URL_HASH_PREFIX, '')),
38
- height = _parse.originHeight,
39
- width = _parse.originWidth;
40
-
41
- const _pathname$replace$spl = pathname.replace(`${WIX_IMAGE}://v1/`, '').split('/'),
42
- id = _pathname$replace$spl[0],
43
- filenameOrAltText = _pathname$replace$spl[1];
44
-
25
+ const {
26
+ hash,
27
+ pathname
28
+ } = new URL(alignedImage);
29
+ const {
30
+ originHeight: height,
31
+ originWidth: width
32
+ } = (0, _querystring.parse)(hash.replace(URL_HASH_PREFIX, ''));
33
+ const [id, filenameOrAltText] = pathname.replace(`${WIX_IMAGE}://v1/`, '').split('/');
45
34
  const decodedFilenameOrAltText = decodeText(filenameOrAltText);
46
35
  const res = {
47
36
  id,
@@ -49,37 +38,32 @@ function getRawImageUrl(val) {
49
38
  height: Number(height),
50
39
  width: Number(width)
51
40
  };
52
-
53
41
  if (!decodedFilenameOrAltText) {
54
42
  return res;
55
43
  }
56
-
57
- return { ...res,
44
+ return {
45
+ ...res,
58
46
  altText: decodedFilenameOrAltText,
59
47
  filename: decodedFilenameOrAltText
60
48
  };
61
49
  }
62
-
63
50
  function decodeText(s) {
64
51
  if (!s) {
65
52
  return s;
66
53
  }
67
-
68
54
  return decodeURIComponent(s);
69
55
  }
70
-
71
56
  function alignIfLegacy(url, type) {
72
- const _URL2 = new URL(url),
73
- protocol = _URL2.protocol;
74
-
57
+ const {
58
+ protocol
59
+ } = new URL(url);
75
60
  return protocol === `${type}:` ? `${WIX_PROTOCOL}${url}` : url;
76
61
  }
77
-
78
62
  const media = {
79
- getCropImageURL,
80
- getScaleToFillImageUrl,
81
- getScaleToFitImageURL,
82
- getRawImageUrl
63
+ getCroppedImageUrl,
64
+ getScaledToFillImageUrl,
65
+ getScaledToFitImageUrl,
66
+ getImageUrl
83
67
  };
84
68
  exports.media = media;
85
69
  //# sourceMappingURL=wixMedia.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["URL_HASH_PREFIX","WIX_PROTOCOL","WIX_IMAGE","getScaleToFillImageUrl","wixMediaIdentifier","targetWidth","targetHeight","options","img","getRawImageUrl","sdk","getScaleToFillImageURL","id","height","width","getScaleToFitImageURL","getCropImageURL","cropX","cropY","cropWidth","cropHeight","val","alignedImage","alignIfLegacy","URL","hash","pathname","parse","replace","originHeight","originWidth","split","filenameOrAltText","decodedFilenameOrAltText","decodeText","res","url","Number","altText","filename","s","decodeURIComponent","type","protocol","media"],"sources":["../../src/wixMedia.ts"],"sourcesContent":["import { sdk, ImageTransformOptions } from '@wix/image-kit';\nimport { parse } from 'querystring';\n\nconst URL_HASH_PREFIX = '#';\nconst WIX_PROTOCOL = 'wix:';\nconst WIX_IMAGE = 'image';\n\nfunction getScaleToFillImageUrl(\n wixMediaIdentifier: string,\n targetWidth: number,\n targetHeight: number,\n options: ImageTransformOptions,\n) {\n const img = getRawImageUrl(wixMediaIdentifier);\n\n return sdk.getScaleToFillImageURL(\n img.id,\n img.height,\n img.width,\n targetWidth,\n targetHeight,\n options,\n );\n}\n\nfunction getScaleToFitImageURL(\n wixMediaIdentifier: string,\n targetWidth: number,\n targetHeight: number,\n options: ImageTransformOptions,\n) {\n const img = getRawImageUrl(wixMediaIdentifier);\n\n return sdk.getScaleToFitImageURL(\n img.id,\n img.height,\n img.width,\n targetWidth,\n targetHeight,\n options,\n );\n}\n\nfunction getCropImageURL(\n wixMediaIdentifier: string,\n cropX: number,\n cropY: number,\n cropWidth: number,\n cropHeight: number,\n targetWidth: number,\n targetHeight: number,\n options?: ImageTransformOptions,\n) {\n const img = getRawImageUrl(wixMediaIdentifier);\n\n return sdk.getCropImageURL(\n img.id,\n img.height,\n img.width,\n cropX,\n cropY,\n cropWidth,\n cropHeight,\n targetWidth,\n targetHeight,\n options,\n );\n}\n\nfunction getRawImageUrl(val: string) {\n const alignedImage = alignIfLegacy(val, WIX_IMAGE);\n\n const { hash, pathname } = new URL(alignedImage);\n\n const { originHeight: height, originWidth: width } = parse(\n hash.replace(URL_HASH_PREFIX, ''),\n );\n const [id, filenameOrAltText] = pathname\n .replace(`${WIX_IMAGE}://v1/`, '')\n .split('/');\n\n const decodedFilenameOrAltText = decodeText(filenameOrAltText);\n\n const res = {\n id,\n url: `https://static.wixstatic.com/media/${id}`,\n height: Number(height),\n width: Number(width),\n };\n\n if (!decodedFilenameOrAltText) {\n return res;\n }\n\n return {\n ...res,\n altText: decodedFilenameOrAltText,\n filename: decodedFilenameOrAltText,\n };\n}\n\nexport function decodeText(s: string) {\n if (!s) {\n return s;\n }\n\n return decodeURIComponent(s);\n}\n\nfunction alignIfLegacy(url: string, type: string): string {\n const { protocol } = new URL(url);\n\n return protocol === `${type}:` ? `${WIX_PROTOCOL}${url}` : url;\n}\n\nexport const media = {\n getCropImageURL,\n getScaleToFillImageUrl,\n getScaleToFitImageURL,\n getRawImageUrl,\n};\n"],"mappings":"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"}
1
+ {"version":3,"names":["URL_HASH_PREFIX","WIX_PROTOCOL","WIX_IMAGE","getScaledToFillImageUrl","wixMediaIdentifier","targetWidth","targetHeight","options","img","getImageUrl","sdk","getScaleToFillImageURL","id","height","width","getScaledToFitImageUrl","getScaleToFitImageURL","getCroppedImageUrl","cropX","cropY","cropWidth","cropHeight","getCropImageURL","val","alignedImage","alignIfLegacy","hash","pathname","URL","originHeight","originWidth","parse","replace","filenameOrAltText","split","decodedFilenameOrAltText","decodeText","res","url","Number","altText","filename","s","decodeURIComponent","type","protocol","media"],"sources":["../../src/wixMedia.ts"],"sourcesContent":["import { sdk, ImageTransformOptions } from '@wix/image-kit';\nimport { parse } from 'querystring';\n\nconst URL_HASH_PREFIX = '#';\nconst WIX_PROTOCOL = 'wix:';\nconst WIX_IMAGE = 'image';\n\nfunction getScaledToFillImageUrl(\n wixMediaIdentifier: string,\n targetWidth: number,\n targetHeight: number,\n options: ImageTransformOptions,\n) {\n const img = getImageUrl(wixMediaIdentifier);\n\n return sdk.getScaleToFillImageURL(\n img.id,\n img.height,\n img.width,\n targetWidth,\n targetHeight,\n options,\n );\n}\n\nfunction getScaledToFitImageUrl(\n wixMediaIdentifier: string,\n targetWidth: number,\n targetHeight: number,\n options: ImageTransformOptions,\n) {\n const img = getImageUrl(wixMediaIdentifier);\n\n return sdk.getScaleToFitImageURL(\n img.id,\n img.height,\n img.width,\n targetWidth,\n targetHeight,\n options,\n );\n}\n\nfunction getCroppedImageUrl(\n wixMediaIdentifier: string,\n cropX: number,\n cropY: number,\n cropWidth: number,\n cropHeight: number,\n targetWidth: number,\n targetHeight: number,\n options?: ImageTransformOptions,\n) {\n const img = getImageUrl(wixMediaIdentifier);\n\n return sdk.getCropImageURL(\n img.id,\n img.height,\n img.width,\n cropX,\n cropY,\n cropWidth,\n cropHeight,\n targetWidth,\n targetHeight,\n options,\n );\n}\n\nfunction getImageUrl(val: string) {\n const alignedImage = alignIfLegacy(val, WIX_IMAGE);\n\n const { hash, pathname } = new URL(alignedImage);\n\n const { originHeight: height, originWidth: width } = parse(\n hash.replace(URL_HASH_PREFIX, ''),\n );\n const [id, filenameOrAltText] = pathname\n .replace(`${WIX_IMAGE}://v1/`, '')\n .split('/');\n\n const decodedFilenameOrAltText = decodeText(filenameOrAltText);\n\n const res = {\n id,\n url: `https://static.wixstatic.com/media/${id}`,\n height: Number(height),\n width: Number(width),\n };\n\n if (!decodedFilenameOrAltText) {\n return res;\n }\n\n return {\n ...res,\n altText: decodedFilenameOrAltText,\n filename: decodedFilenameOrAltText,\n };\n}\n\nexport function decodeText(s: string) {\n if (!s) {\n return s;\n }\n\n return decodeURIComponent(s);\n}\n\nfunction alignIfLegacy(url: string, type: string): string {\n const { protocol } = new URL(url);\n\n return protocol === `${type}:` ? `${WIX_PROTOCOL}${url}` : url;\n}\n\nexport const media = {\n getCroppedImageUrl,\n getScaledToFillImageUrl,\n getScaledToFitImageUrl,\n getImageUrl,\n};\n"],"mappings":"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"}
@@ -0,0 +1,74 @@
1
+ import { createClient } from '../wixClient';
2
+ import { oauth } from '@wix/identity';
3
+ export function OAuthStrategy(config) {
4
+ const wixClient = createClient({
5
+ modules: {
6
+ oauth
7
+ }
8
+ });
9
+ const generateVisitorTokens = async tokens => {
10
+ if (tokens != null && tokens.accessToken && tokens != null && tokens.refreshToken && !isTokenExpired(tokens.accessToken)) {
11
+ return Promise.resolve(tokens);
12
+ }
13
+ if (tokens != null && tokens.refreshToken) {
14
+ return renewToken(tokens.refreshToken);
15
+ }
16
+ const tokensResponse = await wixClient.oauth.token({
17
+ preAuthenticated: {
18
+ clientId: config.clientId
19
+ }
20
+ });
21
+ return {
22
+ accessToken: tokensResponse.accessToken.token,
23
+ refreshToken: tokensResponse.refreshToken.token
24
+ };
25
+ };
26
+ const renewToken = async refreshToken => {
27
+ const tokensResponse = await wixClient.oauth.token({
28
+ refreshToken: {
29
+ token: refreshToken
30
+ },
31
+ preAuthenticated: {
32
+ clientId: config.clientId
33
+ }
34
+ });
35
+ return {
36
+ accessToken: tokensResponse.accessToken.token,
37
+ refreshToken: tokensResponse.refreshToken.token
38
+ };
39
+ };
40
+ return setHeaders => ({
41
+ generateVisitorTokens,
42
+ renewToken,
43
+ isTokenExpired,
44
+ setTokens: tokens => {
45
+ setHeaders({
46
+ Authorization: tokens.accessToken
47
+ });
48
+ }
49
+ });
50
+ }
51
+ function parseJWT(token) {
52
+ const base64Url = token.split('.')[1];
53
+ if (window) {
54
+ const base64 = base64Url.replace(/-/g, '+').replace(/_/g, '/');
55
+ const jsonPayload = decodeURIComponent(window.atob(base64).split('').map(c => {
56
+ return '%' + ('00' + c.charCodeAt(0).toString(16)).slice(-2);
57
+ }).join(''));
58
+ return JSON.parse(jsonPayload);
59
+ } else {
60
+ return JSON.parse(Buffer.from(base64Url, 'base64').toString());
61
+ }
62
+ }
63
+ function isTokenExpired(token) {
64
+ const {
65
+ expirationDate
66
+ } = parseJWT(token);
67
+ if (expirationDate) {
68
+ const expirationDateObj = new Date(expirationDate);
69
+ const currentDateObj = new Date();
70
+ return currentDateObj > expirationDateObj;
71
+ }
72
+ return false;
73
+ }
74
+ //# sourceMappingURL=OAuthStrategy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["createClient","oauth","OAuthStrategy","config","wixClient","modules","generateVisitorTokens","tokens","accessToken","refreshToken","isTokenExpired","Promise","resolve","renewToken","tokensResponse","token","preAuthenticated","clientId","setHeaders","setTokens","Authorization","parseJWT","base64Url","split","window","base64","replace","jsonPayload","decodeURIComponent","atob","map","c","charCodeAt","toString","slice","join","JSON","parse","Buffer","from","expirationDate","expirationDateObj","Date","currentDateObj"],"sources":["../../../src/auth/OAuthStrategy.ts"],"sourcesContent":["import { createClient } from '../wixClient';\nimport { oauth } from '@wix/identity';\n\ninterface Tokens {\n accessToken: string;\n refreshToken: string;\n}\n\ninterface IOAuthStrategy {\n generateVisitorTokens(tokens?: {\n refreshToken?: string;\n accessToken?: string;\n }): Promise<Tokens>;\n renewToken: (refreshToken: string) => Promise<Tokens>;\n isTokenExpired: (accessToken: string) => boolean;\n setTokens: (tokens: Tokens) => void;\n}\n\nexport function OAuthStrategy(config: { clientId: string }) {\n const wixClient = createClient({ modules: { oauth } });\n\n const generateVisitorTokens = async (\n tokens?: Partial<Tokens>,\n ): Promise<Tokens> => {\n if (\n tokens?.accessToken &&\n tokens?.refreshToken &&\n !isTokenExpired(tokens.accessToken)\n ) {\n return Promise.resolve(tokens) as Promise<Tokens>;\n }\n\n if (tokens?.refreshToken) {\n return renewToken(tokens.refreshToken);\n }\n\n const tokensResponse = await wixClient.oauth.token({\n preAuthenticated: {\n clientId: config.clientId,\n },\n });\n\n return {\n accessToken: tokensResponse.accessToken!.token!,\n refreshToken: tokensResponse.refreshToken!.token!,\n };\n };\n\n const renewToken = async (refreshToken: string): Promise<Tokens> => {\n const tokensResponse = await wixClient.oauth.token({\n refreshToken: { token: refreshToken },\n preAuthenticated: {\n clientId: config.clientId,\n },\n });\n return {\n accessToken: tokensResponse.accessToken!.token!,\n refreshToken: tokensResponse.refreshToken!.token!,\n };\n };\n\n return (setHeaders: Function): IOAuthStrategy => ({\n generateVisitorTokens,\n renewToken,\n isTokenExpired,\n setTokens: (tokens: Tokens): void => {\n setHeaders({ Authorization: tokens.accessToken });\n },\n });\n}\n\nfunction parseJWT(token: string) {\n const base64Url = token.split('.')[1];\n if (window) {\n const base64 = base64Url.replace(/-/g, '+').replace(/_/g, '/');\n const jsonPayload = decodeURIComponent(\n window\n .atob(base64)\n .split('')\n .map((c) => {\n return '%' + ('00' + c.charCodeAt(0).toString(16)).slice(-2);\n })\n .join(''),\n );\n\n return JSON.parse(jsonPayload);\n } else {\n return JSON.parse(Buffer.from(base64Url, 'base64').toString());\n }\n}\n\nfunction isTokenExpired(token: string): boolean {\n const { expirationDate } = parseJWT(token);\n if (expirationDate) {\n const expirationDateObj = new Date(expirationDate);\n const currentDateObj = new Date();\n return currentDateObj > expirationDateObj;\n }\n return false;\n}\n"],"mappings":"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"}
package/dist/esm/index.js CHANGED
@@ -1,3 +1,4 @@
1
1
  export * from './wixClient';
2
2
  export * from './wixMedia';
3
+ export * from './auth/OAuthStrategy';
3
4
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"names":[],"sources":["../../src/index.ts"],"sourcesContent":["export * from './wixClient';\nexport * from './wixMedia';\n"],"mappings":"AAAA,cAAc,aAAd;AACA,cAAc,YAAd"}
1
+ {"version":3,"names":[],"sources":["../../src/index.ts"],"sourcesContent":["export * from './wixClient';\nexport * from './wixMedia';\nexport * from './auth/OAuthStrategy';\n"],"mappings":"AAAA,cAAc,aAAa;AAC3B,cAAc,YAAY;AAC1B,cAAc,sBAAsB"}