m2m-components 0.1.1 → 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 (78) 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.d.ts +5 -0
  48. package/endpoints/m2m-users.d.ts.map +1 -0
  49. package/endpoints/m2m-users.js +6 -0
  50. package/endpoints/m2m-users.js.map +1 -0
  51. package/endpoints/m2m-users.v1.d.ts +221 -0
  52. package/endpoints/m2m-users.v1.d.ts.map +1 -0
  53. package/endpoints/m2m-users.v1.js +682 -0
  54. package/endpoints/m2m-users.v1.js.map +1 -0
  55. package/m2m-apps-menu.js +11 -39
  56. package/m2m-apps-menu.js.map +1 -1
  57. package/m2m-user-menu.js +11 -33
  58. package/m2m-user-menu.js.map +1 -1
  59. package/notification/NotificationProvider.js +82 -0
  60. package/notification/NotificationProvider.js.map +1 -0
  61. package/notification/ServiceIdProvider.js +24 -0
  62. package/notification/ServiceIdProvider.js.map +1 -0
  63. package/notification/api.js +66 -38
  64. package/notification/api.js.map +1 -1
  65. package/package.json +38 -14
  66. package/storage/client.d.ts.map +1 -1
  67. package/storage/client.js +69 -31
  68. package/storage/client.js.map +1 -1
  69. package/storage/hub.js +2 -2
  70. package/storage/hub.js.map +1 -1
  71. package/storage/lib/client.js +21 -13
  72. package/storage/lib/client.js.map +1 -1
  73. package/storage/lib/hub.js +23 -23
  74. package/storage/lib/hub.js.map +1 -1
  75. package/storage/useM2mAuth.d.ts +19 -0
  76. package/storage/useM2mAuth.d.ts.map +1 -0
  77. package/storage/useM2mAuth.js +94 -0
  78. package/storage/useM2mAuth.js.map +1 -0
@@ -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"}
@@ -0,0 +1,19 @@
1
+ import React from "react";
2
+ interface LoginInput {
3
+ email: string;
4
+ password: string;
5
+ }
6
+ declare type AuthenticationState = {
7
+ token: string;
8
+ authenticated: boolean;
9
+ login: (input: LoginInput) => Promise<{
10
+ error?: Error;
11
+ }>;
12
+ logout: () => void;
13
+ };
14
+ export declare const M2mAuthenticationProvider: ({ children, }: {
15
+ children: React.ReactNode;
16
+ }) => JSX.Element;
17
+ export declare const useAuth: () => AuthenticationState;
18
+ export {};
19
+ //# sourceMappingURL=useM2mAuth.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useM2mAuth.d.ts","sourceRoot":"","sources":["../src/storage/useM2mAuth.tsx"],"names":[],"mappings":"AAAA,OAAO,KAON,MAAM,OAAO,CAAC;AAKf,UAAU,UAAU;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,aAAK,mBAAmB,GAAG;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,aAAa,EAAE,OAAO,CAAC;IACvB,KAAK,EAAE,CAAC,KAAK,EAAE,UAAU,KAAK,OAAO,CAAC;QAAE,KAAK,CAAC,EAAE,KAAK,CAAA;KAAE,CAAC,CAAC;IACzD,MAAM,EAAE,MAAM,IAAI,CAAC;CACpB,CAAC;AAeF,eAAO,MAAM,yBAAyB;cAG1B,MAAM,SAAS;iBAuD1B,CAAC;AAEF,eAAO,MAAM,OAAO,2BAMnB,CAAC"}
@@ -0,0 +1,94 @@
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
+
11
+ import React, { createContext, useCallback, useContext, useEffect, useMemo, useState } from "react";
12
+ import { fetcher } from "matsuri-hooks";
13
+ import { m2mAuthTokenApi } from "./client";
14
+ import { login as m2mUsers_v1_login } from "../endpoints/m2m-users.v1";
15
+ var AuthenticationContext = /*#__PURE__*/createContext(undefined);
16
+
17
+ var checkJwtExpiration = jwt => {
18
+ var splitted = jwt.split(".");
19
+ if (splitted.length !== 3) return false;
20
+ var [, payload] = splitted;
21
+ var exp = JSON.parse(atob(payload))["exp"];
22
+ return new Date() < new Date(exp * 1000);
23
+ };
24
+
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();
33
+
34
+ if (!(authToken && checkJwtExpiration(authToken))) {
35
+ m2mAuthTokenApi.clear();
36
+ setToken("");
37
+ } else {
38
+ m2mAuthTokenApi.set(authToken);
39
+ setToken(authToken);
40
+ }
41
+ }), []);
42
+ useEffect(() => {
43
+ tryCheckAuth();
44
+ }, [tryCheckAuth]);
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);
55
+
56
+ if (data) {
57
+ var authToken = data.accessToken;
58
+ m2mAuthTokenApi.set(authToken);
59
+ setToken(authToken);
60
+ }
61
+
62
+ return fetcherResult;
63
+ });
64
+
65
+ return function (_x) {
66
+ return _ref3.apply(this, arguments);
67
+ };
68
+ }(), []);
69
+ var logout = useCallback(() => {
70
+ m2mAuthTokenApi.clear();
71
+ window.location.reload();
72
+ }, []);
73
+ var state = useMemo(() => {
74
+ return {
75
+ login,
76
+ logout,
77
+ token,
78
+ authenticated
79
+ };
80
+ }, [authenticated, login, logout, token]);
81
+ return /*#__PURE__*/React.createElement(AuthenticationContext.Provider, {
82
+ value: state
83
+ }, children);
84
+ };
85
+ export var useAuth = () => {
86
+ var ctx = useContext(AuthenticationContext);
87
+
88
+ if (!ctx) {
89
+ throw new Error("AuthenticationProvider is not found");
90
+ }
91
+
92
+ return ctx;
93
+ };
94
+ //# sourceMappingURL=useM2mAuth.js.map
@@ -0,0 +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","method","body","stringify","data","fetcherResult","accessToken","logout","window","location","reload","state","useAuth","ctx","Error"],"mappings":";;;;;;;;;;AAAA,OAAOA,KAAP,IACEC,aADF,EAEEC,WAFF,EAGEC,UAHF,EAIEC,SAJF,EAKEC,OALF,EAMEC,QANF,QAOO,OAPP;AAQA,SAASC,OAAT,QAAwB,eAAxB;AACA,SAASC,eAAT,QAAgC,UAAhC;AACA,SAASC,KAAK,IAAIC,iBAAlB,QAA2C,2BAA3C;AAcA,IAAMC,qBAAqB,gBAAGV,aAAa,CACzCW,SADyC,CAA3C;;AAIA,IAAMC,kBAAkB,GAAIC,GAAD,IAA0B;AACnD,MAAMC,QAAQ,GAAGD,GAAG,CAACE,KAAJ,CAAU,GAAV,CAAjB;AACA,MAAID,QAAQ,CAACE,MAAT,KAAoB,CAAxB,EAA2B,OAAO,KAAP;AAE3B,MAAM,GAAGC,OAAH,IAAcH,QAApB;AACA,MAAMI,GAAG,GAAGC,IAAI,CAACC,KAAL,CAAWC,IAAI,CAACJ,OAAD,CAAf,EAA0B,KAA1B,CAAZ;AACA,SAAO,IAAIK,IAAJ,KAAa,IAAIA,IAAJ,CAASJ,GAAG,GAAG,IAAf,CAApB;AACD,CAPD;;AASA,OAAO,IAAMK,yBAAyB,GAAG,QAInC;AAAA,MAJoC;AACxCC,IAAAA;AADwC,GAIpC;AACJ,MAAM,CAACC,KAAD,EAAQC,QAAR,IAAoBrB,QAAQ,CAACE,eAAe,CAACoB,QAAhB,MAA8B,EAA/B,CAAlC;AAEA,MAAMC,aAAa,GAAGxB,OAAO,CAAC,MAAM,CAAC,CAACqB,KAAT,EAAgB,CAACA,KAAD,CAAhB,CAA7B;AAEA,MAAMI,YAAY,GAAG5B,WAAW,iCAAC,aAAY;AAC3C,QAAM6B,SAAS,SAASvB,eAAe,CAACwB,GAAhB,EAAxB;;AACA,QAAI,EAAED,SAAS,IAAIlB,kBAAkB,CAACkB,SAAD,CAAjC,CAAJ,EAAmD;AACjDvB,MAAAA,eAAe,CAACyB,KAAhB;AACAN,MAAAA,QAAQ,CAAC,EAAD,CAAR;AACD,KAHD,MAGO;AACLnB,MAAAA,eAAe,CAAC0B,GAAhB,CAAoBH,SAApB;AACAJ,MAAAA,QAAQ,CAACI,SAAD,CAAR;AACD;AACF,GAT+B,GAS7B,EAT6B,CAAhC;AAWA3B,EAAAA,SAAS,CAAC,MAAM;AACd0B,IAAAA,YAAY;AACb,GAFQ,EAEN,CAACA,YAAD,CAFM,CAAT;AAIA,MAAMrB,KAAK,GAAGP,WAAW;AAAA,kCAAC,WAAOiC,KAAP,EAA6B;AACrD,iCAAyC5B,OAAO,CAE7CG,iBAAiB,EAF4B,EAExB;AACtB0B,QAAAA,MAAM,EAAE,MADc;AAEtBC,QAAAA,IAAI,EAAEjB,IAAI,CAACkB,SAAL,CAAeH,KAAf;AAFgB,OAFwB,CAAhD;AAAA,UAAM;AAAEI,QAAAA;AAAF,OAAN;AAAA,UAAiBC,aAAjB;;AAMA,UAAID,IAAJ,EAAU;AACR,YAAMR,SAAS,GAAGQ,IAAI,CAACE,WAAvB;AAEAjC,QAAAA,eAAe,CAAC0B,GAAhB,CAAoBH,SAApB;AACAJ,QAAAA,QAAQ,CAACI,SAAD,CAAR;AACD;;AACD,aAAOS,aAAP;AACD,KAdwB;;AAAA;AAAA;AAAA;AAAA,OActB,EAdsB,CAAzB;AAgBA,MAAME,MAAM,GAAGxC,WAAW,CAAC,MAAM;AAC/BM,IAAAA,eAAe,CAACyB,KAAhB;AACAU,IAAAA,MAAM,CAACC,QAAP,CAAgBC,MAAhB;AACD,GAHyB,EAGvB,EAHuB,CAA1B;AAKA,MAAMC,KAAK,GAAGzC,OAAO,CAAC,MAAM;AAC1B,WAAO;AACLI,MAAAA,KADK;AAELiC,MAAAA,MAFK;AAGLhB,MAAAA,KAHK;AAILG,MAAAA;AAJK,KAAP;AAMD,GAPoB,EAOlB,CAACA,aAAD,EAAgBpB,KAAhB,EAAuBiC,MAAvB,EAA+BhB,KAA/B,CAPkB,CAArB;AAQA,sBACE,oBAAC,qBAAD,CAAuB,QAAvB;AAAgC,IAAA,KAAK,EAAEoB;AAAvC,KACGrB,QADH,CADF;AAKD,CA1DM;AA4DP,OAAO,IAAMsB,OAAO,GAAG,MAAM;AAC3B,MAAMC,GAAG,GAAG7C,UAAU,CAACQ,qBAAD,CAAtB;;AACA,MAAI,CAACqC,GAAL,EAAU;AACR,UAAM,IAAIC,KAAJ,CAAU,qCAAV,CAAN;AACD;;AACD,SAAOD,GAAP;AACD,CANM","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"}