m2m-components 0.2.0 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (72) hide show
  1. package/LitMenuBaseElement.js +11 -91
  2. package/LitMenuBaseElement.js.map +1 -1
  3. package/cjs/LitMenuBaseElement.js +225 -0
  4. package/cjs/LitMenuBaseElement.js.map +1 -0
  5. package/cjs/domains.js +19 -0
  6. package/cjs/domains.js.map +1 -0
  7. package/cjs/endpoints/m2m-notifications.js +19 -0
  8. package/cjs/endpoints/m2m-notifications.js.map +1 -0
  9. package/cjs/endpoints/m2m-notifications.v1.js +169 -0
  10. package/cjs/endpoints/m2m-notifications.v1.js.map +1 -0
  11. package/cjs/endpoints/m2m-users.js +19 -0
  12. package/cjs/endpoints/m2m-users.js.map +1 -0
  13. package/cjs/endpoints/m2m-users.v1.js +672 -0
  14. package/cjs/endpoints/m2m-users.v1.js.map +1 -0
  15. package/cjs/index.js +14 -0
  16. package/cjs/index.js.map +1 -0
  17. package/cjs/m2m-apps-menu.js +105 -0
  18. package/cjs/m2m-apps-menu.js.map +1 -0
  19. package/cjs/m2m-user-menu.js +113 -0
  20. package/cjs/m2m-user-menu.js.map +1 -0
  21. package/cjs/notification/NotificationProvider.js +100 -0
  22. package/cjs/notification/NotificationProvider.js.map +1 -0
  23. package/cjs/notification/ServiceIdProvider.js +41 -0
  24. package/cjs/notification/ServiceIdProvider.js.map +1 -0
  25. package/cjs/notification/api.js +63 -0
  26. package/cjs/notification/api.js.map +1 -0
  27. package/cjs/notification/domain.js +6 -0
  28. package/cjs/notification/domain.js.map +1 -0
  29. package/cjs/notification/index.js +58 -0
  30. package/cjs/notification/index.js.map +1 -0
  31. package/cjs/storage/client.js +110 -0
  32. package/cjs/storage/client.js.map +1 -0
  33. package/cjs/storage/hub.js +21 -0
  34. package/cjs/storage/hub.js.map +1 -0
  35. package/cjs/storage/lib/client.js +203 -0
  36. package/cjs/storage/lib/client.js.map +1 -0
  37. package/cjs/storage/lib/hub.js +126 -0
  38. package/cjs/storage/lib/hub.js.map +1 -0
  39. package/cjs/storage/useM2mAuth.js +101 -0
  40. package/cjs/storage/useM2mAuth.js.map +1 -0
  41. package/domains.js +1 -1
  42. package/domains.js.map +1 -1
  43. package/endpoints/m2m-notifications.js +1 -1
  44. package/endpoints/m2m-notifications.js.map +1 -1
  45. package/endpoints/m2m-notifications.v1.js +71 -49
  46. package/endpoints/m2m-notifications.v1.js.map +1 -1
  47. package/endpoints/m2m-users.js +1 -1
  48. package/endpoints/m2m-users.js.map +1 -1
  49. package/endpoints/m2m-users.v1.js +335 -228
  50. package/endpoints/m2m-users.v1.js.map +1 -1
  51. package/m2m-apps-menu.js +11 -39
  52. package/m2m-apps-menu.js.map +1 -1
  53. package/m2m-user-menu.js +11 -33
  54. package/m2m-user-menu.js.map +1 -1
  55. package/notification/NotificationProvider.js +24 -21
  56. package/notification/NotificationProvider.js.map +1 -1
  57. package/notification/ServiceIdProvider.js +9 -8
  58. package/notification/ServiceIdProvider.js.map +1 -1
  59. package/notification/api.js +66 -38
  60. package/notification/api.js.map +1 -1
  61. package/package.json +32 -14
  62. package/storage/client.d.ts.map +1 -1
  63. package/storage/client.js +69 -31
  64. package/storage/client.js.map +1 -1
  65. package/storage/hub.js +2 -2
  66. package/storage/hub.js.map +1 -1
  67. package/storage/lib/client.js +21 -13
  68. package/storage/lib/client.js.map +1 -1
  69. package/storage/lib/hub.js +23 -23
  70. package/storage/lib/hub.js.map +1 -1
  71. package/storage/useM2mAuth.js +50 -32
  72. package/storage/useM2mAuth.js.map +1 -1
@@ -1,20 +1,20 @@
1
1
  /**
2
2
  * この実装はcross-storageほぼそのままです。
3
3
  */
4
- const context = {};
4
+ var context = {};
5
5
  /**
6
6
  * Do not use this directly. This specifications are subject to significant change.
7
7
  * @internal
8
8
  */
9
9
 
10
- export const init = permissions => {
10
+ export var init = permissions => {
11
11
  context.permissions = permissions;
12
12
  window.addEventListener("message", listener, false);
13
13
  window.parent.postMessage("cross-storage:ready", "*");
14
14
  };
15
15
 
16
- const permitted = (origin, method) => {
17
- const available = ["get", "set", "del", "clear", "getKeys"];
16
+ var permitted = (origin, method) => {
17
+ var available = ["get", "set", "del", "clear", "getKeys"];
18
18
 
19
19
  if (!available.includes(method)) {
20
20
  return false;
@@ -24,9 +24,9 @@ const permitted = (origin, method) => {
24
24
  return false;
25
25
  }
26
26
 
27
- for (let i = 0; i < context.permissions.length; i++) {
28
- const entry = context.permissions[i];
29
- const match = entry.origin.test(origin);
27
+ for (var i = 0; i < context.permissions.length; i++) {
28
+ var entry = context.permissions[i];
29
+ var match = entry.origin.test(origin);
30
30
 
31
31
  if (match && entry.allow.includes(method)) {
32
32
  return true;
@@ -36,13 +36,13 @@ const permitted = (origin, method) => {
36
36
  return false;
37
37
  };
38
38
 
39
- const methods = {
39
+ var methods = {
40
40
  get: params => {
41
- const storage = window.localStorage;
42
- const result = [];
41
+ var storage = window.localStorage;
42
+ var result = [];
43
43
 
44
- for (let i = 0; i < params.keys.length; i++) {
45
- const value = storage.getItem(params.keys[i]) || null;
44
+ for (var i = 0; i < params.keys.length; i++) {
45
+ var value = storage.getItem(params.keys[i]) || null;
46
46
  result.push(value);
47
47
  } // Todo: このパターン好きじゃない
48
48
 
@@ -59,10 +59,10 @@ const methods = {
59
59
  }
60
60
  },
61
61
  getKeys: () => {
62
- const keys = [];
63
- const length = window.localStorage.length;
62
+ var keys = [];
63
+ var length = window.localStorage.length;
64
64
 
65
- for (let i = 0; i < length; i++) {
65
+ for (var i = 0; i < length; i++) {
66
66
  keys.push(window.localStorage.key(i));
67
67
  }
68
68
 
@@ -73,9 +73,9 @@ const methods = {
73
73
  }
74
74
  };
75
75
 
76
- const listener = message => {
76
+ var listener = message => {
77
77
  // postMessage returns the string "null" as the origin for "file://"
78
- const origin = message.origin === "null" ? "file://" : message.origin; // Handle polling for a ready message
78
+ var origin = message.origin === "null" ? "file://" : message.origin; // Handle polling for a ready message
79
79
 
80
80
  if (message.data === "cross-storage:poll") {
81
81
  return window.parent.postMessage("cross-storage:ready", message.origin);
@@ -83,15 +83,15 @@ const listener = message => {
83
83
 
84
84
 
85
85
  if (message.data === "cross-storage:ready") return;
86
- const request = JSON.parse(message.data); // Check whether request.method is a string
86
+ var request = JSON.parse(message.data); // Check whether request.method is a string
87
87
 
88
88
  if (!request || typeof request.method !== "string") {
89
89
  return;
90
90
  }
91
91
 
92
- const method = request.method.split("cross-storage:")[1];
93
- let error = "";
94
- let result = undefined;
92
+ var method = request.method.split("cross-storage:")[1];
93
+ var error = "";
94
+ var result = undefined;
95
95
 
96
96
  if (!method) {
97
97
  return;
@@ -105,13 +105,13 @@ const listener = message => {
105
105
  }
106
106
  }
107
107
 
108
- const response = JSON.stringify({
108
+ var response = JSON.stringify({
109
109
  id: request.id,
110
110
  error: error,
111
111
  result: result
112
112
  }); // postMessage requires that the target origin be set to "*" for "file://"
113
113
 
114
- const targetOrigin = origin === "file://" ? "*" : origin;
114
+ var targetOrigin = origin === "file://" ? "*" : origin;
115
115
  window.parent.postMessage(response, targetOrigin);
116
116
  };
117
117
  //# sourceMappingURL=hub.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/storage/lib/hub.ts"],"names":["context","init","permissions","window","addEventListener","listener","parent","postMessage","permitted","origin","method","available","includes","undefined","i","length","entry","match","test","allow","methods","get","params","storage","localStorage","result","keys","value","getItem","push","set","setItem","key","del","removeItem","getKeys","clear","message","data","request","JSON","parse","split","error","err","response","stringify","id","targetOrigin"],"mappings":"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","sourcesContent":["/**\n * この実装はcross-storageほぼそのままです。\n */\ntype Method = \"get\" | \"set\" | \"del\" | \"getKeys\" | \"clear\";\n\nexport interface Permission {\n origin: RegExp;\n allow: Method[];\n}\n\nconst context: {\n permissions?: Permission[];\n} = {};\n\n/**\n * Do not use this directly. This specifications are subject to significant change.\n * @internal\n */\nexport const init = (permissions: Permission[]) => {\n context.permissions = permissions;\n window.addEventListener(\"message\", listener, false);\n window.parent.postMessage(\"cross-storage:ready\", \"*\");\n};\n\nconst permitted = (origin: string, method: Method) => {\n const available = [\"get\", \"set\", \"del\", \"clear\", \"getKeys\"];\n if (!available.includes(method)) {\n return false;\n }\n\n if (context.permissions === undefined) {\n return false;\n }\n\n for (let i = 0; i < context.permissions.length; i++) {\n const entry = context.permissions[i];\n const match = entry.origin.test(origin);\n if (match && entry.allow.includes(method)) {\n return true;\n }\n }\n return false;\n};\n\nconst methods: {\n // eslint-disable-next-line @typescript-eslint/ban-types\n [key in Method]: Function;\n} = {\n get: (params: { keys: string[] }) => {\n const storage = window.localStorage;\n const result = [];\n for (let i = 0; i < params.keys.length; i++) {\n const value = storage.getItem(params.keys[i]) || null;\n result.push(value);\n }\n // Todo: このパターン好きじゃない\n return result.length > 1 ? result : result[0];\n },\n set: (params: { key: string; value: string }) => {\n window.localStorage.setItem(params.key, params.value);\n },\n del: (params: { keys: string[] }) => {\n // eslint-disable-next-line no-var\n for (var i = 0; i < params.keys.length; i++) {\n window.localStorage.removeItem(params.keys[i]);\n }\n },\n getKeys: () => {\n const keys = [];\n const length = window.localStorage.length;\n\n for (let i = 0; i < length; i++) {\n keys.push(window.localStorage.key(i));\n }\n\n return keys;\n },\n clear: () => {\n window.localStorage.clear();\n },\n};\n\ninterface Message {\n origin: string;\n data: string;\n}\n\nconst listener = (message: Message) => {\n // postMessage returns the string \"null\" as the origin for \"file://\"\n const origin = message.origin === \"null\" ? \"file://\" : message.origin;\n\n // Handle polling for a ready message\n if (message.data === \"cross-storage:poll\") {\n return window.parent.postMessage(\"cross-storage:ready\", message.origin);\n }\n\n // Ignore the ready message when viewing the hub directly\n if (message.data === \"cross-storage:ready\") return;\n\n const request: {\n id: string;\n method?: string;\n // eslint-disable-next-line @typescript-eslint/ban-types\n params: Object;\n } = JSON.parse(message.data);\n\n // Check whether request.method is a string\n if (!request || typeof request.method !== \"string\") {\n return;\n }\n\n const method = request.method.split(\"cross-storage:\")[1] as Method;\n\n let error = \"\";\n let result: string | undefined = undefined;\n\n if (!method) {\n return;\n } else if (!permitted(origin, method)) {\n error = \"Invalid permissions for \" + method;\n } else {\n try {\n result = methods[method](request.params);\n } catch (err) {\n error = (err as unknown as Error).message;\n }\n }\n\n const response = JSON.stringify({\n id: request.id,\n error: error,\n result: result,\n });\n\n // postMessage requires that the target origin be set to \"*\" for \"file://\"\n const targetOrigin = origin === \"file://\" ? \"*\" : origin;\n\n window.parent.postMessage(response, targetOrigin);\n};\n"],"file":"hub.js"}
1
+ {"version":3,"sources":["../../src/storage/lib/hub.ts"],"names":["context","init","permissions","window","addEventListener","listener","parent","postMessage","permitted","origin","method","available","includes","undefined","i","length","entry","match","test","allow","methods","get","params","storage","localStorage","result","keys","value","getItem","push","set","setItem","key","del","removeItem","getKeys","clear","message","data","request","JSON","parse","split","error","err","response","stringify","id","targetOrigin"],"mappings":"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","sourcesContent":["/**\n * この実装はcross-storageほぼそのままです。\n */\ntype Method = \"get\" | \"set\" | \"del\" | \"getKeys\" | \"clear\";\n\nexport interface Permission {\n origin: RegExp;\n allow: Method[];\n}\n\nconst context: {\n permissions?: Permission[];\n} = {};\n\n/**\n * Do not use this directly. This specifications are subject to significant change.\n * @internal\n */\nexport const init = (permissions: Permission[]) => {\n context.permissions = permissions;\n window.addEventListener(\"message\", listener, false);\n window.parent.postMessage(\"cross-storage:ready\", \"*\");\n};\n\nconst permitted = (origin: string, method: Method) => {\n const available = [\"get\", \"set\", \"del\", \"clear\", \"getKeys\"];\n if (!available.includes(method)) {\n return false;\n }\n\n if (context.permissions === undefined) {\n return false;\n }\n\n for (let i = 0; i < context.permissions.length; i++) {\n const entry = context.permissions[i];\n const match = entry.origin.test(origin);\n if (match && entry.allow.includes(method)) {\n return true;\n }\n }\n return false;\n};\n\nconst methods: {\n // eslint-disable-next-line @typescript-eslint/ban-types\n [key in Method]: Function;\n} = {\n get: (params: { keys: string[] }) => {\n const storage = window.localStorage;\n const result = [];\n for (let i = 0; i < params.keys.length; i++) {\n const value = storage.getItem(params.keys[i]) || null;\n result.push(value);\n }\n // Todo: このパターン好きじゃない\n return result.length > 1 ? result : result[0];\n },\n set: (params: { key: string; value: string }) => {\n window.localStorage.setItem(params.key, params.value);\n },\n del: (params: { keys: string[] }) => {\n // eslint-disable-next-line no-var\n for (var i = 0; i < params.keys.length; i++) {\n window.localStorage.removeItem(params.keys[i]);\n }\n },\n getKeys: () => {\n const keys = [];\n const length = window.localStorage.length;\n\n for (let i = 0; i < length; i++) {\n keys.push(window.localStorage.key(i));\n }\n\n return keys;\n },\n clear: () => {\n window.localStorage.clear();\n },\n};\n\ninterface Message {\n origin: string;\n data: string;\n}\n\nconst listener = (message: Message) => {\n // postMessage returns the string \"null\" as the origin for \"file://\"\n const origin = message.origin === \"null\" ? \"file://\" : message.origin;\n\n // Handle polling for a ready message\n if (message.data === \"cross-storage:poll\") {\n return window.parent.postMessage(\"cross-storage:ready\", message.origin);\n }\n\n // Ignore the ready message when viewing the hub directly\n if (message.data === \"cross-storage:ready\") return;\n\n const request: {\n id: string;\n method?: string;\n // eslint-disable-next-line @typescript-eslint/ban-types\n params: Object;\n } = JSON.parse(message.data);\n\n // Check whether request.method is a string\n if (!request || typeof request.method !== \"string\") {\n return;\n }\n\n const method = request.method.split(\"cross-storage:\")[1] as Method;\n\n let error = \"\";\n let result: string | undefined = undefined;\n\n if (!method) {\n return;\n } else if (!permitted(origin, method)) {\n error = \"Invalid permissions for \" + method;\n } else {\n try {\n result = methods[method](request.params);\n } catch (err) {\n error = (err as unknown as Error).message;\n }\n }\n\n const response = JSON.stringify({\n id: request.id,\n error: error,\n result: result,\n });\n\n // postMessage requires that the target origin be set to \"*\" for \"file://\"\n const targetOrigin = origin === \"file://\" ? \"*\" : origin;\n\n window.parent.postMessage(response, targetOrigin);\n};\n"],"file":"hub.js"}
@@ -1,24 +1,35 @@
1
+ var _excluded = ["data"];
2
+
3
+ function _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }
4
+
5
+ function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }
6
+
7
+ function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }
8
+
9
+ function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; }
10
+
1
11
  import React, { createContext, useCallback, useContext, useEffect, useMemo, useState } from "react";
2
12
  import { fetcher } from "matsuri-hooks";
3
13
  import { m2mAuthTokenApi } from "./client";
4
14
  import { login as m2mUsers_v1_login } from "../endpoints/m2m-users.v1";
5
- const AuthenticationContext = /*#__PURE__*/createContext(undefined);
15
+ var AuthenticationContext = /*#__PURE__*/createContext(undefined);
6
16
 
7
- const checkJwtExpiration = jwt => {
8
- const splitted = jwt.split(".");
17
+ var checkJwtExpiration = jwt => {
18
+ var splitted = jwt.split(".");
9
19
  if (splitted.length !== 3) return false;
10
- const [, payload] = splitted;
11
- const exp = JSON.parse(atob(payload))["exp"];
20
+ var [, payload] = splitted;
21
+ var exp = JSON.parse(atob(payload))["exp"];
12
22
  return new Date() < new Date(exp * 1000);
13
23
  };
14
24
 
15
- export const M2mAuthenticationProvider = ({
16
- children
17
- }) => {
18
- const [token, setToken] = useState(m2mAuthTokenApi.getCache() || "");
19
- const authenticated = useMemo(() => !!token, [token]);
20
- const tryCheckAuth = useCallback(async () => {
21
- const authToken = await m2mAuthTokenApi.get();
25
+ export var M2mAuthenticationProvider = _ref => {
26
+ var {
27
+ children
28
+ } = _ref;
29
+ var [token, setToken] = useState(m2mAuthTokenApi.getCache() || "");
30
+ var authenticated = useMemo(() => !!token, [token]);
31
+ var tryCheckAuth = useCallback( /*#__PURE__*/_asyncToGenerator(function* () {
32
+ var authToken = yield m2mAuthTokenApi.get();
22
33
 
23
34
  if (!(authToken && checkJwtExpiration(authToken))) {
24
35
  m2mAuthTokenApi.clear();
@@ -27,32 +38,39 @@ export const M2mAuthenticationProvider = ({
27
38
  m2mAuthTokenApi.set(authToken);
28
39
  setToken(authToken);
29
40
  }
30
- }, []);
41
+ }), []);
31
42
  useEffect(() => {
32
43
  tryCheckAuth();
33
44
  }, [tryCheckAuth]);
34
- const login = useCallback(async input => {
35
- const {
36
- data,
37
- ...fetcherResult
38
- } = await fetcher(m2mUsers_v1_login(), {
39
- method: "POST",
40
- body: JSON.stringify(input)
41
- });
45
+ var login = useCallback( /*#__PURE__*/function () {
46
+ var _ref3 = _asyncToGenerator(function* (input) {
47
+ var _yield$fetcher = yield fetcher(m2mUsers_v1_login(), {
48
+ method: "POST",
49
+ body: JSON.stringify(input)
50
+ }),
51
+ {
52
+ data
53
+ } = _yield$fetcher,
54
+ fetcherResult = _objectWithoutProperties(_yield$fetcher, _excluded);
42
55
 
43
- if (data) {
44
- const authToken = data.accessToken;
45
- m2mAuthTokenApi.set(authToken);
46
- setToken(authToken);
47
- }
56
+ if (data) {
57
+ var authToken = data.accessToken;
58
+ m2mAuthTokenApi.set(authToken);
59
+ setToken(authToken);
60
+ }
48
61
 
49
- return fetcherResult;
50
- }, []);
51
- const logout = useCallback(() => {
62
+ return fetcherResult;
63
+ });
64
+
65
+ return function (_x) {
66
+ return _ref3.apply(this, arguments);
67
+ };
68
+ }(), []);
69
+ var logout = useCallback(() => {
52
70
  m2mAuthTokenApi.clear();
53
71
  window.location.reload();
54
72
  }, []);
55
- const state = useMemo(() => {
73
+ var state = useMemo(() => {
56
74
  return {
57
75
  login,
58
76
  logout,
@@ -64,8 +82,8 @@ export const M2mAuthenticationProvider = ({
64
82
  value: state
65
83
  }, children);
66
84
  };
67
- export const useAuth = () => {
68
- const ctx = useContext(AuthenticationContext);
85
+ export var useAuth = () => {
86
+ var ctx = useContext(AuthenticationContext);
69
87
 
70
88
  if (!ctx) {
71
89
  throw new Error("AuthenticationProvider is not found");
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/storage/useM2mAuth.tsx"],"names":["React","createContext","useCallback","useContext","useEffect","useMemo","useState","fetcher","m2mAuthTokenApi","login","m2mUsers_v1_login","AuthenticationContext","undefined","checkJwtExpiration","jwt","splitted","split","length","payload","exp","JSON","parse","atob","Date","M2mAuthenticationProvider","children","token","setToken","getCache","authenticated","tryCheckAuth","authToken","get","clear","set","input","data","fetcherResult","method","body","stringify","accessToken","logout","window","location","reload","state","useAuth","ctx","Error"],"mappings":"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","sourcesContent":["import React, {\n createContext,\n useCallback,\n useContext,\n useEffect,\n useMemo,\n useState,\n} from \"react\";\nimport { fetcher } from \"matsuri-hooks\";\nimport { m2mAuthTokenApi } from \"./client\";\nimport { login as m2mUsers_v1_login } from \"../endpoints/m2m-users.v1\";\n\ninterface LoginInput {\n email: string;\n password: string;\n}\n\ntype AuthenticationState = {\n token: string;\n authenticated: boolean;\n login: (input: LoginInput) => Promise<{ error?: Error }>;\n logout: () => void;\n};\n\nconst AuthenticationContext = createContext<AuthenticationState | undefined>(\n undefined\n);\n\nconst checkJwtExpiration = (jwt: string): boolean => {\n const splitted = jwt.split(\".\");\n if (splitted.length !== 3) return false;\n\n const [, payload] = splitted;\n const exp = JSON.parse(atob(payload))[\"exp\"];\n return new Date() < new Date(exp * 1000);\n};\n\nexport const M2mAuthenticationProvider = ({\n children,\n}: {\n children: React.ReactNode;\n}) => {\n const [token, setToken] = useState(m2mAuthTokenApi.getCache() || \"\");\n\n const authenticated = useMemo(() => !!token, [token]);\n\n const tryCheckAuth = useCallback(async () => {\n const authToken = await m2mAuthTokenApi.get();\n if (!(authToken && checkJwtExpiration(authToken))) {\n m2mAuthTokenApi.clear();\n setToken(\"\");\n } else {\n m2mAuthTokenApi.set(authToken);\n setToken(authToken);\n }\n }, []);\n\n useEffect(() => {\n tryCheckAuth();\n }, [tryCheckAuth]);\n\n const login = useCallback(async (input: LoginInput) => {\n const { data, ...fetcherResult } = await fetcher<{\n accessToken: string;\n }>(m2mUsers_v1_login(), {\n method: \"POST\",\n body: JSON.stringify(input),\n });\n if (data) {\n const authToken = data.accessToken;\n\n m2mAuthTokenApi.set(authToken);\n setToken(authToken);\n }\n return fetcherResult;\n }, []);\n\n const logout = useCallback(() => {\n m2mAuthTokenApi.clear();\n window.location.reload();\n }, []);\n\n const state = useMemo(() => {\n return {\n login,\n logout,\n token,\n authenticated,\n };\n }, [authenticated, login, logout, token]);\n return (\n <AuthenticationContext.Provider value={state}>\n {children}\n </AuthenticationContext.Provider>\n );\n};\n\nexport const useAuth = () => {\n const ctx = useContext(AuthenticationContext);\n if (!ctx) {\n throw new Error(\"AuthenticationProvider is not found\");\n }\n return ctx;\n};\n"],"file":"useM2mAuth.js"}
1
+ {"version":3,"sources":["../src/storage/useM2mAuth.tsx"],"names":["React","createContext","useCallback","useContext","useEffect","useMemo","useState","fetcher","m2mAuthTokenApi","login","m2mUsers_v1_login","AuthenticationContext","undefined","checkJwtExpiration","jwt","splitted","split","length","payload","exp","JSON","parse","atob","Date","M2mAuthenticationProvider","children","token","setToken","getCache","authenticated","tryCheckAuth","authToken","get","clear","set","input","method","body","stringify","data","fetcherResult","accessToken","logout","window","location","reload","state","useAuth","ctx","Error"],"mappings":"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","sourcesContent":["import React, {\n createContext,\n useCallback,\n useContext,\n useEffect,\n useMemo,\n useState,\n} from \"react\";\nimport { fetcher } from \"matsuri-hooks\";\nimport { m2mAuthTokenApi } from \"./client\";\nimport { login as m2mUsers_v1_login } from \"../endpoints/m2m-users.v1\";\n\ninterface LoginInput {\n email: string;\n password: string;\n}\n\ntype AuthenticationState = {\n token: string;\n authenticated: boolean;\n login: (input: LoginInput) => Promise<{ error?: Error }>;\n logout: () => void;\n};\n\nconst AuthenticationContext = createContext<AuthenticationState | undefined>(\n undefined\n);\n\nconst checkJwtExpiration = (jwt: string): boolean => {\n const splitted = jwt.split(\".\");\n if (splitted.length !== 3) return false;\n\n const [, payload] = splitted;\n const exp = JSON.parse(atob(payload))[\"exp\"];\n return new Date() < new Date(exp * 1000);\n};\n\nexport const M2mAuthenticationProvider = ({\n children,\n}: {\n children: React.ReactNode;\n}) => {\n const [token, setToken] = useState(m2mAuthTokenApi.getCache() || \"\");\n\n const authenticated = useMemo(() => !!token, [token]);\n\n const tryCheckAuth = useCallback(async () => {\n const authToken = await m2mAuthTokenApi.get();\n if (!(authToken && checkJwtExpiration(authToken))) {\n m2mAuthTokenApi.clear();\n setToken(\"\");\n } else {\n m2mAuthTokenApi.set(authToken);\n setToken(authToken);\n }\n }, []);\n\n useEffect(() => {\n tryCheckAuth();\n }, [tryCheckAuth]);\n\n const login = useCallback(async (input: LoginInput) => {\n const { data, ...fetcherResult } = await fetcher<{\n accessToken: string;\n }>(m2mUsers_v1_login(), {\n method: \"POST\",\n body: JSON.stringify(input),\n });\n if (data) {\n const authToken = data.accessToken;\n\n m2mAuthTokenApi.set(authToken);\n setToken(authToken);\n }\n return fetcherResult;\n }, []);\n\n const logout = useCallback(() => {\n m2mAuthTokenApi.clear();\n window.location.reload();\n }, []);\n\n const state = useMemo(() => {\n return {\n login,\n logout,\n token,\n authenticated,\n };\n }, [authenticated, login, logout, token]);\n return (\n <AuthenticationContext.Provider value={state}>\n {children}\n </AuthenticationContext.Provider>\n );\n};\n\nexport const useAuth = () => {\n const ctx = useContext(AuthenticationContext);\n if (!ctx) {\n throw new Error(\"AuthenticationProvider is not found\");\n }\n return ctx;\n};\n"],"file":"useM2mAuth.js"}