m2m-components 7.1.9-alpha-1762751119966-7abe527.0 → 8.0.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 (106) hide show
  1. package/MenuBaseElement.d.mts +12 -1
  2. package/MenuBaseElement.d.ts +12 -1
  3. package/MenuBaseElement.js +11 -19
  4. package/MenuBaseElement.js.map +1 -1
  5. package/MenuBaseElement.mjs +1 -1
  6. package/apps.d.mts +16 -0
  7. package/apps.d.ts +16 -0
  8. package/apps.js +94 -0
  9. package/apps.js.map +1 -0
  10. package/apps.mjs +11 -0
  11. package/apps.mjs.map +1 -0
  12. package/{chunk-SAILIWRH.mjs → chunk-3QIUILX5.mjs} +48 -18
  13. package/chunk-3QIUILX5.mjs.map +1 -0
  14. package/{chunk-EAE7RJIC.mjs → chunk-5EK67DDX.mjs} +12 -16
  15. package/chunk-5EK67DDX.mjs.map +1 -0
  16. package/{chunk-EMMKRND5.mjs → chunk-7AZEHVZT.mjs} +3 -3
  17. package/{chunk-DFNQXQZT.mjs → chunk-7VHUBWOT.mjs} +20 -6
  18. package/chunk-7VHUBWOT.mjs.map +1 -0
  19. package/{chunk-DEAGPWGW.mjs → chunk-BFCTE2XZ.mjs} +3 -3
  20. package/chunk-CP2PCNLU.mjs +63 -0
  21. package/chunk-CP2PCNLU.mjs.map +1 -0
  22. package/chunk-IGOSAWM6.mjs +29 -0
  23. package/chunk-IGOSAWM6.mjs.map +1 -0
  24. package/{chunk-FGCQFIXK.mjs → chunk-INOKCKLW.mjs} +4 -1
  25. package/chunk-INOKCKLW.mjs.map +1 -0
  26. package/{chunk-B4ZVSYUD.mjs → chunk-OU3IGV6H.mjs} +2 -2
  27. package/{chunk-T5BIUVZ3.mjs → chunk-QWW2VCZM.mjs} +5 -6
  28. package/chunk-QWW2VCZM.mjs.map +1 -0
  29. package/{chunk-33H52IEC.mjs → chunk-T3MVHAME.mjs} +2 -2
  30. package/chunk-W5DAWJ2F.mjs +12 -0
  31. package/chunk-W5DAWJ2F.mjs.map +1 -0
  32. package/chunk-ZBZMUI2R.mjs +42 -0
  33. package/chunk-ZBZMUI2R.mjs.map +1 -0
  34. package/domains.d.mts +14 -9
  35. package/domains.d.ts +14 -9
  36. package/domains.js +43 -16
  37. package/domains.js.map +1 -1
  38. package/domains.mjs +6 -1
  39. package/index.d.mts +2 -1
  40. package/index.d.ts +2 -1
  41. package/index.js +172 -53
  42. package/index.js.map +1 -1
  43. package/index.mjs +12 -10
  44. package/initM2mComponents.js +9 -5
  45. package/initM2mComponents.js.map +1 -1
  46. package/initM2mComponents.mjs +3 -2
  47. package/m2m-apps-menu.d.mts +4 -2
  48. package/m2m-apps-menu.d.ts +4 -2
  49. package/m2m-apps-menu.js +146 -44
  50. package/m2m-apps-menu.js.map +1 -1
  51. package/m2m-apps-menu.mjs +5 -3
  52. package/m2m-releases-link.d.mts +9 -1
  53. package/m2m-releases-link.d.ts +9 -1
  54. package/m2m-releases-link.js +7 -4
  55. package/m2m-releases-link.js.map +1 -1
  56. package/m2m-releases-link.mjs +8 -5
  57. package/m2m-releases-link.mjs.map +1 -1
  58. package/m2m-user-menu.d.mts +4 -2
  59. package/m2m-user-menu.d.ts +4 -2
  60. package/m2m-user-menu.js +74 -36
  61. package/m2m-user-menu.js.map +1 -1
  62. package/m2m-user-menu.mjs +7 -6
  63. package/package.json +2 -4
  64. package/storage/clearAuth.js +8 -5
  65. package/storage/clearAuth.js.map +1 -1
  66. package/storage/clearAuth.mjs +4 -3
  67. package/storage/client.js +9 -5
  68. package/storage/client.js.map +1 -1
  69. package/storage/client.mjs +2 -1
  70. package/storage/getM2MStorageHubDomain.d.mts +3 -0
  71. package/storage/getM2MStorageHubDomain.d.ts +3 -0
  72. package/storage/getM2MStorageHubDomain.js +36 -0
  73. package/storage/getM2MStorageHubDomain.js.map +1 -0
  74. package/storage/getM2MStorageHubDomain.mjs +8 -0
  75. package/storage/getM2MStorageHubDomain.mjs.map +1 -0
  76. package/storage/hub.js +3 -0
  77. package/storage/hub.js.map +1 -1
  78. package/storage/hub.mjs +2 -2
  79. package/storage/lib/hub.js +3 -0
  80. package/storage/lib/hub.js.map +1 -1
  81. package/storage/lib/hub.mjs +1 -1
  82. package/storage/persistenceDatabase.d.mts +2 -2
  83. package/storage/persistenceDatabase.d.ts +2 -2
  84. package/storage/persistenceDatabase.js +8 -5
  85. package/storage/persistenceDatabase.js.map +1 -1
  86. package/storage/persistenceDatabase.mjs +1 -1
  87. package/storage/refreshAuth.js +8 -5
  88. package/storage/refreshAuth.js.map +1 -1
  89. package/storage/refreshAuth.mjs +4 -3
  90. package/storage/useM2mAuth.js +8 -5
  91. package/storage/useM2mAuth.js.map +1 -1
  92. package/storage/useM2mAuth.mjs +8 -7
  93. package/storage/useM2mAuth.mjs.map +1 -1
  94. package/chunk-BRSUJNLC.mjs +0 -23
  95. package/chunk-BRSUJNLC.mjs.map +0 -1
  96. package/chunk-DFNQXQZT.mjs.map +0 -1
  97. package/chunk-E5KIJ5DQ.mjs +0 -26
  98. package/chunk-E5KIJ5DQ.mjs.map +0 -1
  99. package/chunk-EAE7RJIC.mjs.map +0 -1
  100. package/chunk-FGCQFIXK.mjs.map +0 -1
  101. package/chunk-SAILIWRH.mjs.map +0 -1
  102. package/chunk-T5BIUVZ3.mjs.map +0 -1
  103. /package/{chunk-EMMKRND5.mjs.map → chunk-7AZEHVZT.mjs.map} +0 -0
  104. /package/{chunk-DEAGPWGW.mjs.map → chunk-BFCTE2XZ.mjs.map} +0 -0
  105. /package/{chunk-B4ZVSYUD.mjs.map → chunk-OU3IGV6H.mjs.map} +0 -0
  106. /package/{chunk-33H52IEC.mjs.map → chunk-T3MVHAME.mjs.map} +0 -0
package/storage/hub.mjs CHANGED
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  m2mStorageHub
3
- } from "../chunk-33H52IEC.mjs";
4
- import "../chunk-FGCQFIXK.mjs";
3
+ } from "../chunk-T3MVHAME.mjs";
4
+ import "../chunk-INOKCKLW.mjs";
5
5
  import "../chunk-ZOXT4E27.mjs";
6
6
  export {
7
7
  m2mStorageHub
@@ -77,6 +77,9 @@ var methods = {
77
77
  }
78
78
  };
79
79
  var listener = (message) => {
80
+ if (typeof message.data !== "string") {
81
+ return;
82
+ }
80
83
  const origin = message.origin === "null" ? "file://" : message.origin;
81
84
  if (message.data === "cross-storage:poll") {
82
85
  return window.parent.postMessage("cross-storage:ready", message.origin);
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/storage/lib/hub.ts"],"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 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 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"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAUA,IAAM,UAEF,CAAC;AAME,IAAM,OAAO,CAAC,gBAA8B;AACjD,UAAQ,cAAc;AACtB,SAAO,iBAAiB,WAAW,UAAU,KAAK;AAClD,SAAO,OAAO,YAAY,uBAAuB,GAAG;AACtD;AAEA,IAAM,YAAY,CAAC,QAAgB,WAAmB;AACpD,QAAM,YAAY,CAAC,OAAO,OAAO,OAAO,SAAS,SAAS;AAC1D,MAAI,CAAC,UAAU,SAAS,MAAM,GAAG;AAC/B,WAAO;AAAA,EACT;AAEA,MAAI,QAAQ,gBAAgB,QAAW;AACrC,WAAO;AAAA,EACT;AAEA,WAAS,IAAI,GAAG,IAAI,QAAQ,YAAY,QAAQ,KAAK;AACnD,UAAM,QAAQ,QAAQ,YAAY,CAAC;AACnC,UAAM,QAAQ,MAAM,OAAO,KAAK,MAAM;AACtC,QAAI,SAAS,MAAM,MAAM,SAAS,MAAM,GAAG;AACzC,aAAO;AAAA,IACT;AAAA,EACF;AACA,SAAO;AACT;AAEA,IAAM,UAGF;AAAA,EACF,KAAK,CAAC,WAA+B;AACnC,UAAM,UAAU,OAAO;AACvB,UAAM,SAAS,CAAC;AAChB,aAAS,IAAI,GAAG,IAAI,OAAO,KAAK,QAAQ,KAAK;AAC3C,YAAM,QAAQ,QAAQ,QAAQ,OAAO,KAAK,CAAC,CAAC,KAAK;AACjD,aAAO,KAAK,KAAK;AAAA,IACnB;AAEA,WAAO,OAAO,SAAS,IAAI,SAAS,OAAO,CAAC;AAAA,EAC9C;AAAA,EACA,KAAK,CAAC,WAA2C;AAC/C,WAAO,aAAa,QAAQ,OAAO,KAAK,OAAO,KAAK;AAAA,EACtD;AAAA,EACA,KAAK,CAAC,WAA+B;AACnC,aAAS,IAAI,GAAG,IAAI,OAAO,KAAK,QAAQ,KAAK;AAC3C,aAAO,aAAa,WAAW,OAAO,KAAK,CAAC,CAAC;AAAA,IAC/C;AAAA,EACF;AAAA,EACA,SAAS,MAAM;AACb,UAAM,OAAO,CAAC;AACd,UAAM,SAAS,OAAO,aAAa;AAEnC,aAAS,IAAI,GAAG,IAAI,QAAQ,KAAK;AAC/B,WAAK,KAAK,OAAO,aAAa,IAAI,CAAC,CAAC;AAAA,IACtC;AAEA,WAAO;AAAA,EACT;AAAA,EACA,OAAO,MAAM;AACX,WAAO,aAAa,MAAM;AAAA,EAC5B;AACF;AAOA,IAAM,WAAW,CAAC,YAAqB;AAErC,QAAM,SAAS,QAAQ,WAAW,SAAS,YAAY,QAAQ;AAG/D,MAAI,QAAQ,SAAS,sBAAsB;AACzC,WAAO,OAAO,OAAO,YAAY,uBAAuB,QAAQ,MAAM;AAAA,EACxE;AAGA,MAAI,QAAQ,SAAS,sBAAuB;AAE5C,QAAM,UAKF,KAAK,MAAM,QAAQ,IAAI;AAG3B,MAAI,CAAC,WAAW,OAAO,QAAQ,WAAW,UAAU;AAClD;AAAA,EACF;AAEA,QAAM,SAAS,QAAQ,OAAO,MAAM,gBAAgB,EAAE,CAAC;AAEvD,MAAI,QAAQ;AACZ,MAAI,SAA6B;AAEjC,MAAI,CAAC,QAAQ;AACX;AAAA,EACF,WAAW,CAAC,UAAU,QAAQ,MAAM,GAAG;AACrC,YAAQ,6BAA6B;AAAA,EACvC,OAAO;AACL,QAAI;AACF,eAAS,QAAQ,MAAM,EAAE,QAAQ,MAAM;AAAA,IACzC,SAAS,KAAK;AACZ,cAAS,IAAc;AAAA,IACzB;AAAA,EACF;AAEA,QAAM,WAAW,KAAK,UAAU;AAAA,IAC9B,IAAI,QAAQ;AAAA,IACZ;AAAA,IACA;AAAA,EACF,CAAC;AAGD,QAAM,eAAe,WAAW,YAAY,MAAM;AAElD,SAAO,OAAO,YAAY,UAAU,YAAY;AAClD;","names":[]}
1
+ {"version":3,"sources":["../../../src/storage/lib/hub.ts"],"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 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 // Messages can be sent in various formats, so limit it to string\n if (typeof message.data !== \"string\") {\n return;\n }\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 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"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAUA,IAAM,UAEF,CAAC;AAME,IAAM,OAAO,CAAC,gBAA8B;AACjD,UAAQ,cAAc;AACtB,SAAO,iBAAiB,WAAW,UAAU,KAAK;AAClD,SAAO,OAAO,YAAY,uBAAuB,GAAG;AACtD;AAEA,IAAM,YAAY,CAAC,QAAgB,WAAmB;AACpD,QAAM,YAAY,CAAC,OAAO,OAAO,OAAO,SAAS,SAAS;AAC1D,MAAI,CAAC,UAAU,SAAS,MAAM,GAAG;AAC/B,WAAO;AAAA,EACT;AAEA,MAAI,QAAQ,gBAAgB,QAAW;AACrC,WAAO;AAAA,EACT;AAEA,WAAS,IAAI,GAAG,IAAI,QAAQ,YAAY,QAAQ,KAAK;AACnD,UAAM,QAAQ,QAAQ,YAAY,CAAC;AACnC,UAAM,QAAQ,MAAM,OAAO,KAAK,MAAM;AACtC,QAAI,SAAS,MAAM,MAAM,SAAS,MAAM,GAAG;AACzC,aAAO;AAAA,IACT;AAAA,EACF;AACA,SAAO;AACT;AAEA,IAAM,UAGF;AAAA,EACF,KAAK,CAAC,WAA+B;AACnC,UAAM,UAAU,OAAO;AACvB,UAAM,SAAS,CAAC;AAChB,aAAS,IAAI,GAAG,IAAI,OAAO,KAAK,QAAQ,KAAK;AAC3C,YAAM,QAAQ,QAAQ,QAAQ,OAAO,KAAK,CAAC,CAAC,KAAK;AACjD,aAAO,KAAK,KAAK;AAAA,IACnB;AAEA,WAAO,OAAO,SAAS,IAAI,SAAS,OAAO,CAAC;AAAA,EAC9C;AAAA,EACA,KAAK,CAAC,WAA2C;AAC/C,WAAO,aAAa,QAAQ,OAAO,KAAK,OAAO,KAAK;AAAA,EACtD;AAAA,EACA,KAAK,CAAC,WAA+B;AACnC,aAAS,IAAI,GAAG,IAAI,OAAO,KAAK,QAAQ,KAAK;AAC3C,aAAO,aAAa,WAAW,OAAO,KAAK,CAAC,CAAC;AAAA,IAC/C;AAAA,EACF;AAAA,EACA,SAAS,MAAM;AACb,UAAM,OAAO,CAAC;AACd,UAAM,SAAS,OAAO,aAAa;AAEnC,aAAS,IAAI,GAAG,IAAI,QAAQ,KAAK;AAC/B,WAAK,KAAK,OAAO,aAAa,IAAI,CAAC,CAAC;AAAA,IACtC;AAEA,WAAO;AAAA,EACT;AAAA,EACA,OAAO,MAAM;AACX,WAAO,aAAa,MAAM;AAAA,EAC5B;AACF;AAOA,IAAM,WAAW,CAAC,YAAqB;AAErC,MAAI,OAAO,QAAQ,SAAS,UAAU;AACpC;AAAA,EACF;AAEA,QAAM,SAAS,QAAQ,WAAW,SAAS,YAAY,QAAQ;AAG/D,MAAI,QAAQ,SAAS,sBAAsB;AACzC,WAAO,OAAO,OAAO,YAAY,uBAAuB,QAAQ,MAAM;AAAA,EACxE;AAGA,MAAI,QAAQ,SAAS,sBAAuB;AAE5C,QAAM,UAKF,KAAK,MAAM,QAAQ,IAAI;AAG3B,MAAI,CAAC,WAAW,OAAO,QAAQ,WAAW,UAAU;AAClD;AAAA,EACF;AAEA,QAAM,SAAS,QAAQ,OAAO,MAAM,gBAAgB,EAAE,CAAC;AAEvD,MAAI,QAAQ;AACZ,MAAI,SAA6B;AAEjC,MAAI,CAAC,QAAQ;AACX;AAAA,EACF,WAAW,CAAC,UAAU,QAAQ,MAAM,GAAG;AACrC,YAAQ,6BAA6B;AAAA,EACvC,OAAO;AACL,QAAI;AACF,eAAS,QAAQ,MAAM,EAAE,QAAQ,MAAM;AAAA,IACzC,SAAS,KAAK;AACZ,cAAS,IAAc;AAAA,IACzB;AAAA,EACF;AAEA,QAAM,WAAW,KAAK,UAAU;AAAA,IAC9B,IAAI,QAAQ;AAAA,IACZ;AAAA,IACA;AAAA,EACF,CAAC;AAGD,QAAM,eAAe,WAAW,YAAY,MAAM;AAElD,SAAO,OAAO,YAAY,UAAU,YAAY;AAClD;","names":[]}
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  init
3
- } from "../../chunk-FGCQFIXK.mjs";
3
+ } from "../../chunk-INOKCKLW.mjs";
4
4
  import "../../chunk-ZOXT4E27.mjs";
5
5
  export {
6
6
  init
@@ -3,8 +3,8 @@ import 'matsuri-hooks';
3
3
 
4
4
  declare const persistenceDatabase: {
5
5
  get: (key: "auth") => Promise<LoginResponse | undefined>;
6
- set: (key: "auth", val: LoginResponse) => Promise<"auth">;
7
- clear: (key: "auth") => Promise<void>;
6
+ set: (key: "auth", val: LoginResponse) => Promise<"auth" | undefined>;
7
+ clear: (key: "auth") => Promise<void | undefined>;
8
8
  };
9
9
 
10
10
  export { persistenceDatabase };
@@ -3,8 +3,8 @@ import 'matsuri-hooks';
3
3
 
4
4
  declare const persistenceDatabase: {
5
5
  get: (key: "auth") => Promise<LoginResponse | undefined>;
6
- set: (key: "auth", val: LoginResponse) => Promise<"auth">;
7
- clear: (key: "auth") => Promise<void>;
6
+ set: (key: "auth", val: LoginResponse) => Promise<"auth" | undefined>;
7
+ clear: (key: "auth") => Promise<void | undefined>;
8
8
  };
9
9
 
10
10
  export { persistenceDatabase };
@@ -24,19 +24,22 @@ __export(persistenceDatabase_exports, {
24
24
  });
25
25
  module.exports = __toCommonJS(persistenceDatabase_exports);
26
26
  var import_idb = require("idb");
27
- var dbPromise = (0, import_idb.openDB)("persistence-store", 1, {
27
+ var dbPromise = typeof window !== "undefined" || process.env.VITEST === "true" ? (0, import_idb.openDB)("persistence-store", 1, {
28
28
  upgrade(db) {
29
29
  db.createObjectStore("persistence");
30
30
  }
31
- });
31
+ }) : Promise.resolve(null);
32
32
  var get = async (key) => {
33
- return (await dbPromise).get("persistence", key);
33
+ var _a;
34
+ return (_a = await dbPromise) == null ? void 0 : _a.get("persistence", key);
34
35
  };
35
36
  var set = async (key, val) => {
36
- return (await dbPromise).put("persistence", val, key);
37
+ var _a;
38
+ return (_a = await dbPromise) == null ? void 0 : _a.put("persistence", val, key);
37
39
  };
38
40
  var clear = async (key) => {
39
- return (await dbPromise).delete("persistence", key);
41
+ var _a;
42
+ return (_a = await dbPromise) == null ? void 0 : _a.delete("persistence", key);
40
43
  };
41
44
  var persistenceDatabase = {
42
45
  get,
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/storage/persistenceDatabase.ts"],"sourcesContent":["import { DBSchema, openDB } from \"idb\";\nimport { LoginResponse } from \"./api/login\";\n\ninterface PersistenceDatabase extends DBSchema {\n persistence: {\n value: LoginResponse;\n key: \"auth\";\n };\n}\n\nconst dbPromise = openDB<PersistenceDatabase>(\"persistence-store\", 1, {\n upgrade(db) {\n db.createObjectStore(\"persistence\");\n },\n});\n\nconst get = async (key: \"auth\") => {\n return (await dbPromise).get(\"persistence\", key);\n};\nconst set = async (key: \"auth\", val: LoginResponse) => {\n return (await dbPromise).put(\"persistence\", val, key);\n};\nconst clear = async (key: \"auth\") => {\n return (await dbPromise).delete(\"persistence\", key);\n};\n\nexport const persistenceDatabase = {\n get,\n set,\n clear,\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,iBAAiC;AAUjC,IAAM,gBAAY,mBAA4B,qBAAqB,GAAG;AAAA,EACpE,QAAQ,IAAI;AACV,OAAG,kBAAkB,aAAa;AAAA,EACpC;AACF,CAAC;AAED,IAAM,MAAM,OAAO,QAAgB;AACjC,UAAQ,MAAM,WAAW,IAAI,eAAe,GAAG;AACjD;AACA,IAAM,MAAM,OAAO,KAAa,QAAuB;AACrD,UAAQ,MAAM,WAAW,IAAI,eAAe,KAAK,GAAG;AACtD;AACA,IAAM,QAAQ,OAAO,QAAgB;AACnC,UAAQ,MAAM,WAAW,OAAO,eAAe,GAAG;AACpD;AAEO,IAAM,sBAAsB;AAAA,EACjC;AAAA,EACA;AAAA,EACA;AACF;","names":[]}
1
+ {"version":3,"sources":["../../src/storage/persistenceDatabase.ts"],"sourcesContent":["import { DBSchema, openDB } from \"idb\";\nimport { LoginResponse } from \"./api/login\";\n\ninterface PersistenceDatabase extends DBSchema {\n persistence: {\n value: LoginResponse;\n key: \"auth\";\n };\n}\n\n// Only create connectors on client-side or in test environments to avoid SSR issues\nconst dbPromise =\n typeof window !== \"undefined\" || process.env.VITEST === \"true\"\n ? openDB<PersistenceDatabase>(\"persistence-store\", 1, {\n upgrade(db) {\n db.createObjectStore(\"persistence\");\n },\n })\n : Promise.resolve(null);\n\nconst get = async (key: \"auth\") => {\n return (await dbPromise)?.get(\"persistence\", key);\n};\nconst set = async (key: \"auth\", val: LoginResponse) => {\n return (await dbPromise)?.put(\"persistence\", val, key);\n};\nconst clear = async (key: \"auth\") => {\n return (await dbPromise)?.delete(\"persistence\", key);\n};\n\nexport const persistenceDatabase = {\n get,\n set,\n clear,\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,iBAAiC;AAWjC,IAAM,YACJ,OAAO,WAAW,eAAe,QAAQ,IAAI,WAAW,aACpD,mBAA4B,qBAAqB,GAAG;AAAA,EAClD,QAAQ,IAAI;AACV,OAAG,kBAAkB,aAAa;AAAA,EACpC;AACF,CAAC,IACD,QAAQ,QAAQ,IAAI;AAE1B,IAAM,MAAM,OAAO,QAAgB;AApBnC;AAqBE,UAAQ,WAAM,cAAN,mBAAkB,IAAI,eAAe;AAC/C;AACA,IAAM,MAAM,OAAO,KAAa,QAAuB;AAvBvD;AAwBE,UAAQ,WAAM,cAAN,mBAAkB,IAAI,eAAe,KAAK;AACpD;AACA,IAAM,QAAQ,OAAO,QAAgB;AA1BrC;AA2BE,UAAQ,WAAM,cAAN,mBAAkB,OAAO,eAAe;AAClD;AAEO,IAAM,sBAAsB;AAAA,EACjC;AAAA,EACA;AAAA,EACA;AACF;","names":[]}
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  persistenceDatabase
3
- } from "../chunk-E5KIJ5DQ.mjs";
3
+ } from "../chunk-IGOSAWM6.mjs";
4
4
  import "../chunk-ZOXT4E27.mjs";
5
5
  export {
6
6
  persistenceDatabase
@@ -119,19 +119,22 @@ var parseJwtPayload = (jwt) => {
119
119
 
120
120
  // src/storage/persistenceDatabase.ts
121
121
  var import_idb = require("idb");
122
- var dbPromise = (0, import_idb.openDB)("persistence-store", 1, {
122
+ var dbPromise = typeof window !== "undefined" || process.env.VITEST === "true" ? (0, import_idb.openDB)("persistence-store", 1, {
123
123
  upgrade(db) {
124
124
  db.createObjectStore("persistence");
125
125
  }
126
- });
126
+ }) : Promise.resolve(null);
127
127
  var get = async (key) => {
128
- return (await dbPromise).get("persistence", key);
128
+ var _a;
129
+ return (_a = await dbPromise) == null ? void 0 : _a.get("persistence", key);
129
130
  };
130
131
  var set = async (key, val) => {
131
- return (await dbPromise).put("persistence", val, key);
132
+ var _a;
133
+ return (_a = await dbPromise) == null ? void 0 : _a.put("persistence", val, key);
132
134
  };
133
135
  var clear = async (key) => {
134
- return (await dbPromise).delete("persistence", key);
136
+ var _a;
137
+ return (_a = await dbPromise) == null ? void 0 : _a.delete("persistence", key);
135
138
  };
136
139
  var persistenceDatabase = {
137
140
  get,
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/storage/refreshAuth.tsx","../../src/storage/client.ts","../../src/storage/jwt.tsx","../../src/storage/persistenceDatabase.ts","../../src/storage/api/getToken.ts","../../src/endpoints/m2m-users.v1.ts"],"sourcesContent":["import { m2mAuthTokenApi } from \"./client\";\nimport { parseJwtPayload } from \"./jwt\";\nimport { persistenceDatabase } from \"./persistenceDatabase\";\nimport { requestGetToken } from \"./api/getToken\";\n\nexport const refreshAuth = async () => {\n const auth = await persistenceDatabase.get(\"auth\");\n if (!auth) return null;\n\n const payload = parseJwtPayload(auth.accessToken);\n if (!payload) {\n return null;\n }\n\n const { data: newAuth } = await requestGetToken({\n refreshToken: auth.refreshToken.refreshToken,\n userId: payload.userId,\n });\n\n if (newAuth) {\n const authToken = newAuth.accessToken;\n await m2mAuthTokenApi.set(authToken);\n await persistenceDatabase.set(\"auth\", newAuth);\n return authToken;\n }\n return null;\n};\n","import { StorageClient } from \"./lib/client\";\n\nclass M2mStorageClient extends StorageClient {}\n\nexport type { M2mStorageClient };\n\n/**\n * Get the connected storage client.\n * @param timeout\n * @default 5000\n */\nconst getStorage = async (timeout = 5000) => {\n const storage = await new Promise<M2mStorageClient>((resolve, reject) => {\n const rejectTimer = globalThis.setTimeout(function () {\n reject(\n new Error(\n \"Timeout: M2mStorageClient could not connect. Please call m2mStorageClient.init() before using m2mStorageClient.\",\n ),\n );\n }, timeout);\n\n const storage = globalThis.M2M_STORAGE;\n if (storage) {\n globalThis.clearTimeout(rejectTimer);\n resolve(storage);\n }\n\n const timer = globalThis.setInterval(() => {\n const storage = globalThis.M2M_STORAGE;\n if (storage) {\n globalThis.clearTimeout(rejectTimer);\n globalThis.clearInterval(timer);\n resolve(storage);\n }\n }, 200);\n });\n\n await storage.onConnect();\n\n return storage;\n};\n\nconst M2M_STORAGE_HUB_URL = \"https://hub.m2msystems.cloud/\";\n\nconst M2M_STORAGE_HUB_URL_DEV =\n \"https://m2m-components-storage-hub-dev.netlify.app/\";\n\nconst initStorageClient = (options?: {\n env?: \"development\" | \"production\";\n}) => {\n if (globalThis.M2M_STORAGE) {\n throw new Error(\n \"M2mStorageClient already initialized. Do not call m2mStorageClient.init multiple times.\",\n );\n }\n const storage = new M2mStorageClient(\n options?.env === \"production\"\n ? M2M_STORAGE_HUB_URL\n : M2M_STORAGE_HUB_URL_DEV,\n );\n globalThis.M2M_STORAGE = storage;\n};\n\nexport const m2mStorageClient = {\n init: initStorageClient,\n getStorage: getStorage,\n};\n\nexport const M2M_AUTH_TOKEN_KEY = \"M2M_APP_AUTH_TOKEN\";\n\nconst getAuthTokenCache = () => {\n return globalThis.localStorage.getItem(M2M_AUTH_TOKEN_KEY);\n};\n\nconst getAuthToken = async () => {\n try {\n const storage = await getStorage();\n const autuToken = (await storage.get(M2M_AUTH_TOKEN_KEY)) as string;\n return autuToken !== null && autuToken !== undefined && autuToken.length > 0\n ? autuToken\n : getAuthTokenCache();\n } catch (error) {\n console.warn(error);\n return getAuthTokenCache();\n }\n};\n\nconst setAuthToken = async (token: string) => {\n globalThis.localStorage.setItem(M2M_AUTH_TOKEN_KEY, token);\n try {\n const storage = await getStorage();\n await storage.set(M2M_AUTH_TOKEN_KEY, token);\n } catch (error) {\n console.warn(error);\n }\n};\n\nconst clearAuthToken = async () => {\n globalThis.localStorage.removeItem(M2M_AUTH_TOKEN_KEY);\n try {\n const storage = await getStorage();\n await storage.del(M2M_AUTH_TOKEN_KEY);\n } catch (error) {\n console.warn(error);\n }\n};\n\nexport const m2mAuthTokenApi = {\n get: getAuthToken,\n getCache: getAuthTokenCache,\n set: setAuthToken,\n clear: clearAuthToken,\n};\n","interface JwtPayload {\n aud: string;\n authority: string;\n companyId: string;\n exp: number;\n iss: string;\n loginType: string;\n scope: Record<string, string>;\n userId: string;\n}\n\nconst isObject = (value: unknown): value is Record<string, unknown> => {\n return typeof value === \"object\" && value !== null;\n};\n/**\n * 利用するパラメータが存在するかどうかを確認する\n */\nconst validateJwtPayload = (payload: unknown): JwtPayload => {\n if (isObject(payload) === false) {\n throw new Error(\"JWT payload is not an object\");\n }\n\n if (typeof payload?.exp !== \"number\" || typeof payload?.userId !== \"string\") {\n throw new Error(\"JWT payload is missing required fields\");\n }\n\n return payload as unknown as JwtPayload;\n};\n\nexport const parseJwtPayload = (jwt: string): JwtPayload | null => {\n try {\n const splitted = jwt.split(\".\");\n if (splitted.length !== 3) {\n throw new Error(\"Invalid JWT\");\n }\n const [, payload] = splitted;\n return validateJwtPayload(JSON.parse(atob(payload)));\n } catch (error: unknown) {\n console.error(error);\n return null;\n }\n};\n\nexport const checkJwtExpiration = (jwt: string): boolean => {\n const payload = parseJwtPayload(jwt);\n if (!payload) {\n return false;\n }\n return new Date() < new Date(payload.exp * 1000);\n};\n","import { DBSchema, openDB } from \"idb\";\nimport { LoginResponse } from \"./api/login\";\n\ninterface PersistenceDatabase extends DBSchema {\n persistence: {\n value: LoginResponse;\n key: \"auth\";\n };\n}\n\nconst dbPromise = openDB<PersistenceDatabase>(\"persistence-store\", 1, {\n upgrade(db) {\n db.createObjectStore(\"persistence\");\n },\n});\n\nconst get = async (key: \"auth\") => {\n return (await dbPromise).get(\"persistence\", key);\n};\nconst set = async (key: \"auth\", val: LoginResponse) => {\n return (await dbPromise).put(\"persistence\", val, key);\n};\nconst clear = async (key: \"auth\") => {\n return (await dbPromise).delete(\"persistence\", key);\n};\n\nexport const persistenceDatabase = {\n get,\n set,\n clear,\n};\n","import { fetcher } from \"matsuri-hooks\";\nimport { getToken as m2mUsers_v1_getToken } from \"../../endpoints/m2m-users.v1\";\nimport { LoginResponse } from \"./login\";\n\n// @see https://github.com/matsuri-tech/m2m-users/blob/master/web/request/login.go#L10-L13\ninterface GetTokenInput {\n userId: string;\n refreshToken: string;\n}\ntype GetTokenResponse = LoginResponse;\nexport const requestGetToken = async (input: GetTokenInput) => {\n return await fetcher<GetTokenResponse>(m2mUsers_v1_getToken(), {\n method: \"POST\",\n body: JSON.stringify(input),\n });\n};\n","/* eslint-disable */\n/**\n * A function that returns the URL part common to the endpoints.\n */\nexport const root = () => {\n let __root = \"\";\n\n if (globalThis.M2M_COMPONENTS_ENV === \"local\") {\n __root = \"http://localhost:8080\";\n }\n\n if (globalThis.M2M_COMPONENTS_ENV === \"localDev\") {\n __root = \"https://api-users.dev.m2msystems.cloud\";\n }\n\n if (globalThis.M2M_COMPONENTS_ENV === \"development\") {\n __root = \"https://api-users.dev.m2msystems.cloud\";\n }\n\n if (globalThis.M2M_COMPONENTS_ENV === \"production\") {\n __root = \"https://api.m2msystems.cloud\";\n }\n\n return __root;\n};\n/**\n * ヘルスチェック\n *\n */\nexport const healthCheck = () => {\n const __root = root();\n const __queries = Object.entries({})\n .filter(([_, value]) => {\n return value !== undefined;\n })\n .map(([key, value]) => {\n return `${key}=${value}`;\n })\n .join(\"&\");\n const __path = `${__root}/${`health_check`}`;\n return __queries ? `${__path}?${__queries}` : __path;\n};\n/**\n * 会社を作成する\n *\n */\nexport const createCompany = () => {\n const __root = root();\n const __queries = Object.entries({})\n .filter(([_, value]) => {\n return value !== undefined;\n })\n .map(([key, value]) => {\n return `${key}=${value}`;\n })\n .join(\"&\");\n const __path = `${__root}/${`companies/`}`;\n return __queries ? `${__path}?${__queries}` : __path;\n};\n/**\n * 会社情報を取得する\n *\n */\nexport const getCompany = ({ id }: { id: string }) => {\n const __root = root();\n const __queries = Object.entries({})\n .filter(([_, value]) => {\n return value !== undefined;\n })\n .map(([key, value]) => {\n return `${key}=${value}`;\n })\n .join(\"&\");\n const __path = `${__root}/${`companies/${id}`}`;\n return __queries ? `${__path}?${__queries}` : __path;\n};\n/**\n * 会社情報を更新する\n *\n */\nexport const updateCompany = () => {\n const __root = root();\n const __queries = Object.entries({})\n .filter(([_, value]) => {\n return value !== undefined;\n })\n .map(([key, value]) => {\n return `${key}=${value}`;\n })\n .join(\"&\");\n const __path = `${__root}/${`companies/`}`;\n return __queries ? `${__path}?${__queries}` : __path;\n};\n/**\n * 会社情報を更新する\n *\n */\nexport const updateCompanyPatch = () => {\n const __root = root();\n const __queries = Object.entries({})\n .filter(([_, value]) => {\n return value !== undefined;\n })\n .map(([key, value]) => {\n return `${key}=${value}`;\n })\n .join(\"&\");\n const __path = `${__root}/${`companies/`}`;\n return __queries ? `${__path}?${__queries}` : __path;\n};\n/**\n * idを指定して複数の会社情報を取得する\n * @param {string} company_ids a,b,c\n */\nexport const findCompaniesByIds = ({\n company_ids,\n}: {\n company_ids?: string;\n}) => {\n const __root = root();\n const __queries = Object.entries({ company_ids })\n .filter(([_, value]) => {\n return value !== undefined;\n })\n .map(([key, value]) => {\n return `${key}=${value}`;\n })\n .join(\"&\");\n const __path = `${__root}/${`companies/find_by_ids`}`;\n return __queries ? `${__path}?${__queries}` : __path;\n};\n/**\n * ユーザーを作成する\n *\n */\nexport const createUser = () => {\n const __root = root();\n const __queries = Object.entries({})\n .filter(([_, value]) => {\n return value !== undefined;\n })\n .map(([key, value]) => {\n return `${key}=${value}`;\n })\n .join(\"&\");\n const __path = `${__root}/${`users/`}`;\n return __queries ? `${__path}?${__queries}` : __path;\n};\n/**\n * ユーザーを取得する\n *\n */\nexport const findUserById = ({ id }: { id: string }) => {\n const __root = root();\n const __queries = Object.entries({})\n .filter(([_, value]) => {\n return value !== undefined;\n })\n .map(([key, value]) => {\n return `${key}=${value}`;\n })\n .join(\"&\");\n const __path = `${__root}/${`users/${id}`}`;\n return __queries ? `${__path}?${__queries}` : __path;\n};\n/**\n * ユーザーを更新する\n *\n */\nexport const updateUser = ({ id }: { id: string }) => {\n const __root = root();\n const __queries = Object.entries({})\n .filter(([_, value]) => {\n return value !== undefined;\n })\n .map(([key, value]) => {\n return `${key}=${value}`;\n })\n .join(\"&\");\n const __path = `${__root}/${`users/${id}`}`;\n return __queries ? `${__path}?${__queries}` : __path;\n};\n/**\n * ユーザーを更新する\n *\n */\nexport const updateUserPatch = ({ id }: { id: string }) => {\n const __root = root();\n const __queries = Object.entries({})\n .filter(([_, value]) => {\n return value !== undefined;\n })\n .map(([key, value]) => {\n return `${key}=${value}`;\n })\n .join(\"&\");\n const __path = `${__root}/${`users/${id}`}`;\n return __queries ? `${__path}?${__queries}` : __path;\n};\n/**\n * ユーザーを強制的に有効化する\n *\n */\nexport const activateUserByAdmin = ({ id }: { id: string }) => {\n const __root = root();\n const __queries = Object.entries({})\n .filter(([_, value]) => {\n return value !== undefined;\n })\n .map(([key, value]) => {\n return `${key}=${value}`;\n })\n .join(\"&\");\n const __path = `${__root}/${`users/${id}/admin_activate`}`;\n return __queries ? `${__path}?${__queries}` : __path;\n};\n/**\n * ユーザーを無効化する\n *\n */\nexport const deactivateUser = ({ id }: { id: string }) => {\n const __root = root();\n const __queries = Object.entries({})\n .filter(([_, value]) => {\n return value !== undefined;\n })\n .map(([key, value]) => {\n return `${key}=${value}`;\n })\n .join(\"&\");\n const __path = `${__root}/${`users/${id}/deactivate`}`;\n return __queries ? `${__path}?${__queries}` : __path;\n};\n/**\n * パスワードリセットのメールを送信する\n *\n */\nexport const sendResetPasswordEmail = () => {\n const __root = root();\n const __queries = Object.entries({})\n .filter(([_, value]) => {\n return value !== undefined;\n })\n .map(([key, value]) => {\n return `${key}=${value}`;\n })\n .join(\"&\");\n const __path = `${__root}/${`users/reset_password_email`}`;\n return __queries ? `${__path}?${__queries}` : __path;\n};\n/**\n * パスワードをリセットする\n *\n */\nexport const resetPassword = () => {\n const __root = root();\n const __queries = Object.entries({})\n .filter(([_, value]) => {\n return value !== undefined;\n })\n .map(([key, value]) => {\n return `${key}=${value}`;\n })\n .join(\"&\");\n const __path = `${__root}/${`users/reset_password`}`;\n return __queries ? `${__path}?${__queries}` : __path;\n};\n/**\n * アクティベーションメールを送信する\n *\n */\nexport const sendActivationEmail = () => {\n const __root = root();\n const __queries = Object.entries({})\n .filter(([_, value]) => {\n return value !== undefined;\n })\n .map(([key, value]) => {\n return `${key}=${value}`;\n })\n .join(\"&\");\n const __path = `${__root}/${`users/activation_email`}`;\n return __queries ? `${__path}?${__queries}` : __path;\n};\n/**\n * ユーザーを有効化する\n *\n */\nexport const activateUser = () => {\n const __root = root();\n const __queries = Object.entries({})\n .filter(([_, value]) => {\n return value !== undefined;\n })\n .map(([key, value]) => {\n return `${key}=${value}`;\n })\n .join(\"&\");\n const __path = `${__root}/${`users/activate`}`;\n return __queries ? `${__path}?${__queries}` : __path;\n};\n/**\n * 認可スコープを設定する\n *\n */\nexport const setAuthorityScope = () => {\n const __root = root();\n const __queries = Object.entries({})\n .filter(([_, value]) => {\n return value !== undefined;\n })\n .map(([key, value]) => {\n return `${key}=${value}`;\n })\n .join(\"&\");\n const __path = `${__root}/${`users/scope`}`;\n return __queries ? `${__path}?${__queries}` : __path;\n};\n/**\n * メールを指定してユーザーを取得する\n *\n */\nexport const findUserByEmail = () => {\n const __root = root();\n const __queries = Object.entries({})\n .filter(([_, value]) => {\n return value !== undefined;\n })\n .map(([key, value]) => {\n return `${key}=${value}`;\n })\n .join(\"&\");\n const __path = `${__root}/${`users/find_by_email`}`;\n return __queries ? `${__path}?${__queries}` : __path;\n};\n/**\n * ユーザーの権限を更新する\n *\n */\nexport const updateAuthority = ({ id }: { id: string }) => {\n const __root = root();\n const __queries = Object.entries({})\n .filter(([_, value]) => {\n return value !== undefined;\n })\n .map(([key, value]) => {\n return `${key}=${value}`;\n })\n .join(\"&\");\n const __path = `${__root}/${`users/authority/${id}`}`;\n return __queries ? `${__path}?${__queries}` : __path;\n};\n/**\n * companyIdからユーザーを取得する\n * @param {string} statuses BeforeVerification,Active,Deactivated\n */\nexport const findUsersByCompanyId = ({ statuses }: { statuses?: string }) => {\n const __root = root();\n const __queries = Object.entries({ statuses })\n .filter(([_, value]) => {\n return value !== undefined;\n })\n .map(([key, value]) => {\n return `${key}=${value}`;\n })\n .join(\"&\");\n const __path = `${__root}/${`users/find_by_company_id`}`;\n return __queries ? `${__path}?${__queries}` : __path;\n};\n/**\n * ユーザー情報をAdminが変更する\n *\n */\nexport const updateUserByAdmin = ({ id }: { id: string }) => {\n const __root = root();\n const __queries = Object.entries({})\n .filter(([_, value]) => {\n return value !== undefined;\n })\n .map(([key, value]) => {\n return `${key}=${value}`;\n })\n .join(\"&\");\n const __path = `${__root}/${`users/${id}/admin_update`}`;\n return __queries ? `${__path}?${__queries}` : __path;\n};\n/**\n * ユーザーの会社を移動する\n *\n */\nexport const transferUserCompany = () => {\n const __root = root();\n const __queries = Object.entries({})\n .filter(([_, value]) => {\n return value !== undefined;\n })\n .map(([key, value]) => {\n return `${key}=${value}`;\n })\n .join(\"&\");\n const __path = `${__root}/${`users/transfer_company`}`;\n return __queries ? `${__path}?${__queries}` : __path;\n};\n/**\n * ログインする\n *\n */\nexport const login = () => {\n const __root = root();\n const __queries = Object.entries({})\n .filter(([_, value]) => {\n return value !== undefined;\n })\n .map(([key, value]) => {\n return `${key}=${value}`;\n })\n .join(\"&\");\n const __path = `${__root}/${`login`}`;\n return __queries ? `${__path}?${__queries}` : __path;\n};\n/**\n * ログインする\n *\n */\nexport const loginWithSlash = () => {\n const __root = root();\n const __queries = Object.entries({})\n .filter(([_, value]) => {\n return value !== undefined;\n })\n .map(([key, value]) => {\n return `${key}=${value}`;\n })\n .join(\"&\");\n const __path = `${__root}/${`login/`}`;\n return __queries ? `${__path}?${__queries}` : __path;\n};\n/**\n * JWKを取得する\n *\n */\nexport const getJwks = () => {\n const __root = root();\n const __queries = Object.entries({})\n .filter(([_, value]) => {\n return value !== undefined;\n })\n .map(([key, value]) => {\n return `${key}=${value}`;\n })\n .join(\"&\");\n const __path = `${__root}/${`login/jwks`}`;\n return __queries ? `${__path}?${__queries}` : __path;\n};\n/**\n * 公開鍵を取得する\n *\n */\nexport const getPublicKeys = () => {\n const __root = root();\n const __queries = Object.entries({})\n .filter(([_, value]) => {\n return value !== undefined;\n })\n .map(([key, value]) => {\n return `${key}=${value}`;\n })\n .join(\"&\");\n const __path = `${__root}/${`login/public_keys`}`;\n return __queries ? `${__path}?${__queries}` : __path;\n};\n/**\n * MFAのコードを発行する\n *\n */\nexport const publishMFACode = () => {\n const __root = root();\n const __queries = Object.entries({})\n .filter(([_, value]) => {\n return value !== undefined;\n })\n .map(([key, value]) => {\n return `${key}=${value}`;\n })\n .join(\"&\");\n const __path = `${__root}/${`login/publish_mfa_code`}`;\n return __queries ? `${__path}?${__queries}` : __path;\n};\n/**\n * MFAを使ってログインする\n *\n */\nexport const loginWithMFA = () => {\n const __root = root();\n const __queries = Object.entries({})\n .filter(([_, value]) => {\n return value !== undefined;\n })\n .map(([key, value]) => {\n return `${key}=${value}`;\n })\n .join(\"&\");\n const __path = `${__root}/${`login/mfa_login`}`;\n return __queries ? `${__path}?${__queries}` : __path;\n};\n/**\n * トークンを取得する\n *\n */\nexport const getToken = () => {\n const __root = root();\n const __queries = Object.entries({})\n .filter(([_, value]) => {\n return value !== undefined;\n })\n .map(([key, value]) => {\n return `${key}=${value}`;\n })\n .join(\"&\");\n const __path = `${__root}/${`login/token`}`;\n return __queries ? `${__path}?${__queries}` : __path;\n};\n/**\n * usersに存在しないアカウントのトークンを作成する(deprecated)\n *\n */\nexport const generateToken = () => {\n const __root = root();\n const __queries = Object.entries({})\n .filter(([_, value]) => {\n return value !== undefined;\n })\n .map(([key, value]) => {\n return `${key}=${value}`;\n })\n .join(\"&\");\n const __path = `${__root}/${`guest/token`}`;\n return __queries ? `${__path}?${__queries}` : __path;\n};\n/**\n * usersに存在しないアカウントのトークンを作成する\n *\n */\nexport const generateUserToken = () => {\n const __root = root();\n const __queries = Object.entries({})\n .filter(([_, value]) => {\n return value !== undefined;\n })\n .map(([key, value]) => {\n return `${key}=${value}`;\n })\n .join(\"&\");\n const __path = `${__root}/${`generate/token`}`;\n return __queries ? `${__path}?${__queries}` : __path;\n};\nexport const m2mUsers_v1 = {\n healthCheck,\n createCompany,\n getCompany,\n updateCompany,\n updateCompanyPatch,\n findCompaniesByIds,\n createUser,\n findUserById,\n updateUser,\n updateUserPatch,\n activateUserByAdmin,\n deactivateUser,\n sendResetPasswordEmail,\n resetPassword,\n sendActivationEmail,\n activateUser,\n setAuthorityScope,\n findUserByEmail,\n updateAuthority,\n findUsersByCompanyId,\n updateUserByAdmin,\n transferUserCompany,\n login,\n loginWithSlash,\n getJwks,\n getPublicKeys,\n publishMFACode,\n loginWithMFA,\n getToken,\n generateToken,\n generateUserToken,\n};\n"],"mappings":"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","names":["storage"]}
1
+ {"version":3,"sources":["../../src/storage/refreshAuth.tsx","../../src/storage/client.ts","../../src/storage/jwt.tsx","../../src/storage/persistenceDatabase.ts","../../src/storage/api/getToken.ts","../../src/endpoints/m2m-users.v1.ts"],"sourcesContent":["import { m2mAuthTokenApi } from \"./client\";\nimport { parseJwtPayload } from \"./jwt\";\nimport { persistenceDatabase } from \"./persistenceDatabase\";\nimport { requestGetToken } from \"./api/getToken\";\n\nexport const refreshAuth = async () => {\n const auth = await persistenceDatabase.get(\"auth\");\n if (!auth) return null;\n\n const payload = parseJwtPayload(auth.accessToken);\n if (!payload) {\n return null;\n }\n\n const { data: newAuth } = await requestGetToken({\n refreshToken: auth.refreshToken.refreshToken,\n userId: payload.userId,\n });\n\n if (newAuth) {\n const authToken = newAuth.accessToken;\n await m2mAuthTokenApi.set(authToken);\n await persistenceDatabase.set(\"auth\", newAuth);\n return authToken;\n }\n return null;\n};\n","import { getM2MStorageHubDomain } from \"./getM2MStorageHubDomain\";\nimport { StorageClient } from \"./lib/client\";\n\nclass M2mStorageClient extends StorageClient {}\n\nexport type { M2mStorageClient };\n\n/**\n * Get the connected storage client.\n * @param timeout\n * @default 5000\n */\nconst getStorage = async (timeout = 5000) => {\n const storage = await new Promise<M2mStorageClient>((resolve, reject) => {\n const rejectTimer = globalThis.setTimeout(function () {\n reject(\n new Error(\n \"Timeout: M2mStorageClient could not connect. Please call m2mStorageClient.init() before using m2mStorageClient.\",\n ),\n );\n }, timeout);\n\n const storage = globalThis.M2M_STORAGE;\n if (storage) {\n globalThis.clearTimeout(rejectTimer);\n resolve(storage);\n }\n\n const timer = globalThis.setInterval(() => {\n const storage = globalThis.M2M_STORAGE;\n if (storage) {\n globalThis.clearTimeout(rejectTimer);\n globalThis.clearInterval(timer);\n resolve(storage);\n }\n }, 200);\n });\n\n await storage.onConnect();\n\n return storage;\n};\n\nconst initStorageClient = (options?: {\n env?: \"development\" | \"production\";\n}) => {\n if (globalThis.M2M_STORAGE) {\n throw new Error(\n \"M2mStorageClient already initialized. Do not call m2mStorageClient.init multiple times.\",\n );\n }\n const storage = new M2mStorageClient(getM2MStorageHubDomain(options?.env));\n globalThis.M2M_STORAGE = storage;\n};\n\nexport const m2mStorageClient = {\n init: initStorageClient,\n getStorage: getStorage,\n};\n\nexport const M2M_AUTH_TOKEN_KEY = \"M2M_APP_AUTH_TOKEN\";\n\nconst getAuthTokenCache = () => {\n return globalThis.localStorage.getItem(M2M_AUTH_TOKEN_KEY);\n};\n\nconst getAuthToken = async () => {\n try {\n const storage = await getStorage();\n const autuToken = (await storage.get(M2M_AUTH_TOKEN_KEY)) as string;\n return autuToken !== null && autuToken !== undefined && autuToken.length > 0\n ? autuToken\n : getAuthTokenCache();\n } catch (error) {\n console.warn(error);\n return getAuthTokenCache();\n }\n};\n\nconst setAuthToken = async (token: string) => {\n globalThis.localStorage.setItem(M2M_AUTH_TOKEN_KEY, token);\n try {\n const storage = await getStorage();\n await storage.set(M2M_AUTH_TOKEN_KEY, token);\n } catch (error) {\n console.warn(error);\n }\n};\n\nconst clearAuthToken = async () => {\n globalThis.localStorage.removeItem(M2M_AUTH_TOKEN_KEY);\n try {\n const storage = await getStorage();\n await storage.del(M2M_AUTH_TOKEN_KEY);\n } catch (error) {\n console.warn(error);\n }\n};\n\nexport const m2mAuthTokenApi = {\n get: getAuthToken,\n getCache: getAuthTokenCache,\n set: setAuthToken,\n clear: clearAuthToken,\n};\n","interface JwtPayload {\n aud: string;\n authority: string;\n companyId: string;\n exp: number;\n iss: string;\n loginType: string;\n scope: Record<string, string>;\n userId: string;\n}\n\nconst isObject = (value: unknown): value is Record<string, unknown> => {\n return typeof value === \"object\" && value !== null;\n};\n/**\n * 利用するパラメータが存在するかどうかを確認する\n */\nconst validateJwtPayload = (payload: unknown): JwtPayload => {\n if (isObject(payload) === false) {\n throw new Error(\"JWT payload is not an object\");\n }\n\n if (typeof payload?.exp !== \"number\" || typeof payload?.userId !== \"string\") {\n throw new Error(\"JWT payload is missing required fields\");\n }\n\n return payload as unknown as JwtPayload;\n};\n\nexport const parseJwtPayload = (jwt: string): JwtPayload | null => {\n try {\n const splitted = jwt.split(\".\");\n if (splitted.length !== 3) {\n throw new Error(\"Invalid JWT\");\n }\n const [, payload] = splitted;\n return validateJwtPayload(JSON.parse(atob(payload)));\n } catch (error: unknown) {\n console.error(error);\n return null;\n }\n};\n\nexport const checkJwtExpiration = (jwt: string): boolean => {\n const payload = parseJwtPayload(jwt);\n if (!payload) {\n return false;\n }\n return new Date() < new Date(payload.exp * 1000);\n};\n","import { DBSchema, openDB } from \"idb\";\nimport { LoginResponse } from \"./api/login\";\n\ninterface PersistenceDatabase extends DBSchema {\n persistence: {\n value: LoginResponse;\n key: \"auth\";\n };\n}\n\n// Only create connectors on client-side or in test environments to avoid SSR issues\nconst dbPromise =\n typeof window !== \"undefined\" || process.env.VITEST === \"true\"\n ? openDB<PersistenceDatabase>(\"persistence-store\", 1, {\n upgrade(db) {\n db.createObjectStore(\"persistence\");\n },\n })\n : Promise.resolve(null);\n\nconst get = async (key: \"auth\") => {\n return (await dbPromise)?.get(\"persistence\", key);\n};\nconst set = async (key: \"auth\", val: LoginResponse) => {\n return (await dbPromise)?.put(\"persistence\", val, key);\n};\nconst clear = async (key: \"auth\") => {\n return (await dbPromise)?.delete(\"persistence\", key);\n};\n\nexport const persistenceDatabase = {\n get,\n set,\n clear,\n};\n","import { fetcher } from \"matsuri-hooks\";\nimport { getToken as m2mUsers_v1_getToken } from \"../../endpoints/m2m-users.v1\";\nimport { LoginResponse } from \"./login\";\n\n// @see https://github.com/matsuri-tech/m2m-users/blob/master/web/request/login.go#L10-L13\ninterface GetTokenInput {\n userId: string;\n refreshToken: string;\n}\ntype GetTokenResponse = LoginResponse;\nexport const requestGetToken = async (input: GetTokenInput) => {\n return await fetcher<GetTokenResponse>(m2mUsers_v1_getToken(), {\n method: \"POST\",\n body: JSON.stringify(input),\n });\n};\n","/* eslint-disable */\n/**\n * A function that returns the URL part common to the endpoints.\n */\nexport const root = () => {\n let __root = \"\";\n\n if (globalThis.M2M_COMPONENTS_ENV === \"local\") {\n __root = \"http://localhost:8080\";\n }\n\n if (globalThis.M2M_COMPONENTS_ENV === \"localDev\") {\n __root = \"https://api-users.dev.m2msystems.cloud\";\n }\n\n if (globalThis.M2M_COMPONENTS_ENV === \"development\") {\n __root = \"https://api-users.dev.m2msystems.cloud\";\n }\n\n if (globalThis.M2M_COMPONENTS_ENV === \"production\") {\n __root = \"https://api.m2msystems.cloud\";\n }\n\n return __root;\n};\n/**\n * ヘルスチェック\n *\n */\nexport const healthCheck = () => {\n const __root = root();\n const __queries = Object.entries({})\n .filter(([_, value]) => {\n return value !== undefined;\n })\n .map(([key, value]) => {\n return `${key}=${value}`;\n })\n .join(\"&\");\n const __path = `${__root}/${`health_check`}`;\n return __queries ? `${__path}?${__queries}` : __path;\n};\n/**\n * 会社を作成する\n *\n */\nexport const createCompany = () => {\n const __root = root();\n const __queries = Object.entries({})\n .filter(([_, value]) => {\n return value !== undefined;\n })\n .map(([key, value]) => {\n return `${key}=${value}`;\n })\n .join(\"&\");\n const __path = `${__root}/${`companies/`}`;\n return __queries ? `${__path}?${__queries}` : __path;\n};\n/**\n * 会社情報を取得する\n *\n */\nexport const getCompany = ({ id }: { id: string }) => {\n const __root = root();\n const __queries = Object.entries({})\n .filter(([_, value]) => {\n return value !== undefined;\n })\n .map(([key, value]) => {\n return `${key}=${value}`;\n })\n .join(\"&\");\n const __path = `${__root}/${`companies/${id}`}`;\n return __queries ? `${__path}?${__queries}` : __path;\n};\n/**\n * 会社情報を更新する\n *\n */\nexport const updateCompany = () => {\n const __root = root();\n const __queries = Object.entries({})\n .filter(([_, value]) => {\n return value !== undefined;\n })\n .map(([key, value]) => {\n return `${key}=${value}`;\n })\n .join(\"&\");\n const __path = `${__root}/${`companies/`}`;\n return __queries ? `${__path}?${__queries}` : __path;\n};\n/**\n * 会社情報を更新する\n *\n */\nexport const updateCompanyPatch = () => {\n const __root = root();\n const __queries = Object.entries({})\n .filter(([_, value]) => {\n return value !== undefined;\n })\n .map(([key, value]) => {\n return `${key}=${value}`;\n })\n .join(\"&\");\n const __path = `${__root}/${`companies/`}`;\n return __queries ? `${__path}?${__queries}` : __path;\n};\n/**\n * idを指定して複数の会社情報を取得する\n * @param {string} company_ids a,b,c\n */\nexport const findCompaniesByIds = ({\n company_ids,\n}: {\n company_ids?: string;\n}) => {\n const __root = root();\n const __queries = Object.entries({ company_ids })\n .filter(([_, value]) => {\n return value !== undefined;\n })\n .map(([key, value]) => {\n return `${key}=${value}`;\n })\n .join(\"&\");\n const __path = `${__root}/${`companies/find_by_ids`}`;\n return __queries ? `${__path}?${__queries}` : __path;\n};\n/**\n * ユーザーを作成する\n *\n */\nexport const createUser = () => {\n const __root = root();\n const __queries = Object.entries({})\n .filter(([_, value]) => {\n return value !== undefined;\n })\n .map(([key, value]) => {\n return `${key}=${value}`;\n })\n .join(\"&\");\n const __path = `${__root}/${`users/`}`;\n return __queries ? `${__path}?${__queries}` : __path;\n};\n/**\n * ユーザーを取得する\n *\n */\nexport const findUserById = ({ id }: { id: string }) => {\n const __root = root();\n const __queries = Object.entries({})\n .filter(([_, value]) => {\n return value !== undefined;\n })\n .map(([key, value]) => {\n return `${key}=${value}`;\n })\n .join(\"&\");\n const __path = `${__root}/${`users/${id}`}`;\n return __queries ? `${__path}?${__queries}` : __path;\n};\n/**\n * ユーザーを更新する\n *\n */\nexport const updateUser = ({ id }: { id: string }) => {\n const __root = root();\n const __queries = Object.entries({})\n .filter(([_, value]) => {\n return value !== undefined;\n })\n .map(([key, value]) => {\n return `${key}=${value}`;\n })\n .join(\"&\");\n const __path = `${__root}/${`users/${id}`}`;\n return __queries ? `${__path}?${__queries}` : __path;\n};\n/**\n * ユーザーを更新する\n *\n */\nexport const updateUserPatch = ({ id }: { id: string }) => {\n const __root = root();\n const __queries = Object.entries({})\n .filter(([_, value]) => {\n return value !== undefined;\n })\n .map(([key, value]) => {\n return `${key}=${value}`;\n })\n .join(\"&\");\n const __path = `${__root}/${`users/${id}`}`;\n return __queries ? `${__path}?${__queries}` : __path;\n};\n/**\n * ユーザーを強制的に有効化する\n *\n */\nexport const activateUserByAdmin = ({ id }: { id: string }) => {\n const __root = root();\n const __queries = Object.entries({})\n .filter(([_, value]) => {\n return value !== undefined;\n })\n .map(([key, value]) => {\n return `${key}=${value}`;\n })\n .join(\"&\");\n const __path = `${__root}/${`users/${id}/admin_activate`}`;\n return __queries ? `${__path}?${__queries}` : __path;\n};\n/**\n * ユーザーを無効化する\n *\n */\nexport const deactivateUser = ({ id }: { id: string }) => {\n const __root = root();\n const __queries = Object.entries({})\n .filter(([_, value]) => {\n return value !== undefined;\n })\n .map(([key, value]) => {\n return `${key}=${value}`;\n })\n .join(\"&\");\n const __path = `${__root}/${`users/${id}/deactivate`}`;\n return __queries ? `${__path}?${__queries}` : __path;\n};\n/**\n * パスワードリセットのメールを送信する\n *\n */\nexport const sendResetPasswordEmail = () => {\n const __root = root();\n const __queries = Object.entries({})\n .filter(([_, value]) => {\n return value !== undefined;\n })\n .map(([key, value]) => {\n return `${key}=${value}`;\n })\n .join(\"&\");\n const __path = `${__root}/${`users/reset_password_email`}`;\n return __queries ? `${__path}?${__queries}` : __path;\n};\n/**\n * パスワードをリセットする\n *\n */\nexport const resetPassword = () => {\n const __root = root();\n const __queries = Object.entries({})\n .filter(([_, value]) => {\n return value !== undefined;\n })\n .map(([key, value]) => {\n return `${key}=${value}`;\n })\n .join(\"&\");\n const __path = `${__root}/${`users/reset_password`}`;\n return __queries ? `${__path}?${__queries}` : __path;\n};\n/**\n * アクティベーションメールを送信する\n *\n */\nexport const sendActivationEmail = () => {\n const __root = root();\n const __queries = Object.entries({})\n .filter(([_, value]) => {\n return value !== undefined;\n })\n .map(([key, value]) => {\n return `${key}=${value}`;\n })\n .join(\"&\");\n const __path = `${__root}/${`users/activation_email`}`;\n return __queries ? `${__path}?${__queries}` : __path;\n};\n/**\n * ユーザーを有効化する\n *\n */\nexport const activateUser = () => {\n const __root = root();\n const __queries = Object.entries({})\n .filter(([_, value]) => {\n return value !== undefined;\n })\n .map(([key, value]) => {\n return `${key}=${value}`;\n })\n .join(\"&\");\n const __path = `${__root}/${`users/activate`}`;\n return __queries ? `${__path}?${__queries}` : __path;\n};\n/**\n * 認可スコープを設定する\n *\n */\nexport const setAuthorityScope = () => {\n const __root = root();\n const __queries = Object.entries({})\n .filter(([_, value]) => {\n return value !== undefined;\n })\n .map(([key, value]) => {\n return `${key}=${value}`;\n })\n .join(\"&\");\n const __path = `${__root}/${`users/scope`}`;\n return __queries ? `${__path}?${__queries}` : __path;\n};\n/**\n * メールを指定してユーザーを取得する\n *\n */\nexport const findUserByEmail = () => {\n const __root = root();\n const __queries = Object.entries({})\n .filter(([_, value]) => {\n return value !== undefined;\n })\n .map(([key, value]) => {\n return `${key}=${value}`;\n })\n .join(\"&\");\n const __path = `${__root}/${`users/find_by_email`}`;\n return __queries ? `${__path}?${__queries}` : __path;\n};\n/**\n * ユーザーの権限を更新する\n *\n */\nexport const updateAuthority = ({ id }: { id: string }) => {\n const __root = root();\n const __queries = Object.entries({})\n .filter(([_, value]) => {\n return value !== undefined;\n })\n .map(([key, value]) => {\n return `${key}=${value}`;\n })\n .join(\"&\");\n const __path = `${__root}/${`users/authority/${id}`}`;\n return __queries ? `${__path}?${__queries}` : __path;\n};\n/**\n * companyIdからユーザーを取得する\n * @param {string} statuses BeforeVerification,Active,Deactivated\n */\nexport const findUsersByCompanyId = ({ statuses }: { statuses?: string }) => {\n const __root = root();\n const __queries = Object.entries({ statuses })\n .filter(([_, value]) => {\n return value !== undefined;\n })\n .map(([key, value]) => {\n return `${key}=${value}`;\n })\n .join(\"&\");\n const __path = `${__root}/${`users/find_by_company_id`}`;\n return __queries ? `${__path}?${__queries}` : __path;\n};\n/**\n * ユーザー情報をAdminが変更する\n *\n */\nexport const updateUserByAdmin = ({ id }: { id: string }) => {\n const __root = root();\n const __queries = Object.entries({})\n .filter(([_, value]) => {\n return value !== undefined;\n })\n .map(([key, value]) => {\n return `${key}=${value}`;\n })\n .join(\"&\");\n const __path = `${__root}/${`users/${id}/admin_update`}`;\n return __queries ? `${__path}?${__queries}` : __path;\n};\n/**\n * ユーザーの会社を移動する\n *\n */\nexport const transferUserCompany = () => {\n const __root = root();\n const __queries = Object.entries({})\n .filter(([_, value]) => {\n return value !== undefined;\n })\n .map(([key, value]) => {\n return `${key}=${value}`;\n })\n .join(\"&\");\n const __path = `${__root}/${`users/transfer_company`}`;\n return __queries ? `${__path}?${__queries}` : __path;\n};\n/**\n * ログインする\n *\n */\nexport const login = () => {\n const __root = root();\n const __queries = Object.entries({})\n .filter(([_, value]) => {\n return value !== undefined;\n })\n .map(([key, value]) => {\n return `${key}=${value}`;\n })\n .join(\"&\");\n const __path = `${__root}/${`login`}`;\n return __queries ? `${__path}?${__queries}` : __path;\n};\n/**\n * ログインする\n *\n */\nexport const loginWithSlash = () => {\n const __root = root();\n const __queries = Object.entries({})\n .filter(([_, value]) => {\n return value !== undefined;\n })\n .map(([key, value]) => {\n return `${key}=${value}`;\n })\n .join(\"&\");\n const __path = `${__root}/${`login/`}`;\n return __queries ? `${__path}?${__queries}` : __path;\n};\n/**\n * JWKを取得する\n *\n */\nexport const getJwks = () => {\n const __root = root();\n const __queries = Object.entries({})\n .filter(([_, value]) => {\n return value !== undefined;\n })\n .map(([key, value]) => {\n return `${key}=${value}`;\n })\n .join(\"&\");\n const __path = `${__root}/${`login/jwks`}`;\n return __queries ? `${__path}?${__queries}` : __path;\n};\n/**\n * 公開鍵を取得する\n *\n */\nexport const getPublicKeys = () => {\n const __root = root();\n const __queries = Object.entries({})\n .filter(([_, value]) => {\n return value !== undefined;\n })\n .map(([key, value]) => {\n return `${key}=${value}`;\n })\n .join(\"&\");\n const __path = `${__root}/${`login/public_keys`}`;\n return __queries ? `${__path}?${__queries}` : __path;\n};\n/**\n * MFAのコードを発行する\n *\n */\nexport const publishMFACode = () => {\n const __root = root();\n const __queries = Object.entries({})\n .filter(([_, value]) => {\n return value !== undefined;\n })\n .map(([key, value]) => {\n return `${key}=${value}`;\n })\n .join(\"&\");\n const __path = `${__root}/${`login/publish_mfa_code`}`;\n return __queries ? `${__path}?${__queries}` : __path;\n};\n/**\n * MFAを使ってログインする\n *\n */\nexport const loginWithMFA = () => {\n const __root = root();\n const __queries = Object.entries({})\n .filter(([_, value]) => {\n return value !== undefined;\n })\n .map(([key, value]) => {\n return `${key}=${value}`;\n })\n .join(\"&\");\n const __path = `${__root}/${`login/mfa_login`}`;\n return __queries ? `${__path}?${__queries}` : __path;\n};\n/**\n * トークンを取得する\n *\n */\nexport const getToken = () => {\n const __root = root();\n const __queries = Object.entries({})\n .filter(([_, value]) => {\n return value !== undefined;\n })\n .map(([key, value]) => {\n return `${key}=${value}`;\n })\n .join(\"&\");\n const __path = `${__root}/${`login/token`}`;\n return __queries ? `${__path}?${__queries}` : __path;\n};\n/**\n * usersに存在しないアカウントのトークンを作成する(deprecated)\n *\n */\nexport const generateToken = () => {\n const __root = root();\n const __queries = Object.entries({})\n .filter(([_, value]) => {\n return value !== undefined;\n })\n .map(([key, value]) => {\n return `${key}=${value}`;\n })\n .join(\"&\");\n const __path = `${__root}/${`guest/token`}`;\n return __queries ? `${__path}?${__queries}` : __path;\n};\n/**\n * usersに存在しないアカウントのトークンを作成する\n *\n */\nexport const generateUserToken = () => {\n const __root = root();\n const __queries = Object.entries({})\n .filter(([_, value]) => {\n return value !== undefined;\n })\n .map(([key, value]) => {\n return `${key}=${value}`;\n })\n .join(\"&\");\n const __path = `${__root}/${`generate/token`}`;\n return __queries ? `${__path}?${__queries}` : __path;\n};\nexport const m2mUsers_v1 = {\n healthCheck,\n createCompany,\n getCompany,\n updateCompany,\n updateCompanyPatch,\n findCompaniesByIds,\n createUser,\n findUserById,\n updateUser,\n updateUserPatch,\n activateUserByAdmin,\n deactivateUser,\n sendResetPasswordEmail,\n resetPassword,\n sendActivationEmail,\n activateUser,\n setAuthorityScope,\n findUserByEmail,\n updateAuthority,\n findUsersByCompanyId,\n updateUserByAdmin,\n transferUserCompany,\n login,\n loginWithSlash,\n getJwks,\n getPublicKeys,\n publishMFACode,\n loginWithMFA,\n getToken,\n generateToken,\n generateUserToken,\n};\n"],"mappings":"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","names":["storage"]}
@@ -1,12 +1,13 @@
1
1
  import {
2
2
  refreshAuth
3
- } from "../chunk-EMMKRND5.mjs";
3
+ } from "../chunk-7AZEHVZT.mjs";
4
4
  import "../chunk-YK5WXFFQ.mjs";
5
5
  import "../chunk-JG5QN6O7.mjs";
6
6
  import "../chunk-E2ELQNMR.mjs";
7
- import "../chunk-E5KIJ5DQ.mjs";
8
- import "../chunk-T5BIUVZ3.mjs";
7
+ import "../chunk-IGOSAWM6.mjs";
8
+ import "../chunk-QWW2VCZM.mjs";
9
9
  import "../chunk-R73ITKF5.mjs";
10
+ import "../chunk-W5DAWJ2F.mjs";
10
11
  import "../chunk-ZOXT4E27.mjs";
11
12
  export {
12
13
  refreshAuth
@@ -177,19 +177,22 @@ var m2mAuthTokenApi = {
177
177
 
178
178
  // src/storage/persistenceDatabase.ts
179
179
  var import_idb = require("idb");
180
- var dbPromise = (0, import_idb.openDB)("persistence-store", 1, {
180
+ var dbPromise = typeof window !== "undefined" || process.env.VITEST === "true" ? (0, import_idb.openDB)("persistence-store", 1, {
181
181
  upgrade(db) {
182
182
  db.createObjectStore("persistence");
183
183
  }
184
- });
184
+ }) : Promise.resolve(null);
185
185
  var get = async (key) => {
186
- return (await dbPromise).get("persistence", key);
186
+ var _a;
187
+ return (_a = await dbPromise) == null ? void 0 : _a.get("persistence", key);
187
188
  };
188
189
  var set = async (key, val) => {
189
- return (await dbPromise).put("persistence", val, key);
190
+ var _a;
191
+ return (_a = await dbPromise) == null ? void 0 : _a.put("persistence", val, key);
190
192
  };
191
193
  var clear = async (key) => {
192
- return (await dbPromise).delete("persistence", key);
194
+ var _a;
195
+ return (_a = await dbPromise) == null ? void 0 : _a.delete("persistence", key);
193
196
  };
194
197
  var persistenceDatabase = {
195
198
  get,
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/storage/useM2mAuth.tsx","../../src/storage/api/login.ts","../../src/endpoints/m2m-users.v1.ts","../../src/storage/jwt.tsx","../../src/storage/client.ts","../../src/storage/persistenceDatabase.ts","../../src/storage/clearAuth.tsx","../../src/storage/api/getToken.ts","../../src/storage/refreshAuth.tsx"],"sourcesContent":["import React, {\n createContext,\n useCallback,\n useContext,\n useEffect,\n useMemo,\n useState,\n} from \"react\";\nimport { LoginInput, requestLogin } from \"./api/login\";\nimport { checkJwtExpiration } from \"./jwt\";\nimport { clearAuth } from \"./clearAuth\";\nimport { m2mAuthTokenApi } from \"./client\";\nimport { persistenceDatabase } from \"./persistenceDatabase\";\nimport { refreshAuth } from \"./refreshAuth\";\n\ninterface AuthenticationState {\n token: string;\n authenticated: boolean;\n login: (input: LoginInput) => Promise<{ token?: string; error?: Error }>;\n logout: () => void;\n updateToken: (token: string) => Promise<{ error?: Error }>;\n revalidating: boolean;\n isLoginRequired: boolean;\n}\n\nconst AuthenticationContext = createContext<AuthenticationState | undefined>(\n undefined,\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 !== null && checkJwtExpiration(authToken))) {\n void m2mAuthTokenApi.clear();\n setToken(\"\");\n } else {\n void m2mAuthTokenApi.set(authToken);\n setToken(authToken);\n }\n }, []);\n\n useEffect(() => {\n // tryCheckAuthは依存配列が空のuseCallbackで定義されているため、\n // 常に同じ関数参照を返し、このuseEffectは初回レンダリング後のみ実行される。\n // レンダリング後に一度認証状態を確認する意図的な動作のため、このルールを無効化。\n // eslint-disable-next-line react-hooks/set-state-in-effect\n void tryCheckAuth();\n }, [tryCheckAuth]);\n\n const login = useCallback(async (input: LoginInput) => {\n const { data: auth, error } = await requestLogin(input);\n if (auth) {\n const authToken = auth.accessToken;\n\n setToken(authToken);\n await m2mAuthTokenApi.set(authToken);\n await persistenceDatabase.set(\"auth\", auth);\n }\n return {\n error,\n token: auth ? auth.accessToken : undefined,\n };\n }, []);\n\n const [revalidating, setRevalidating] = useState(true);\n\n useEffect(() => {\n const callback = async () => {\n const authToken = await refreshAuth();\n if (authToken !== null) {\n setToken(authToken);\n }\n setRevalidating(false);\n };\n void callback();\n // Update auth every 3 hours\n const timer = setInterval(callback, 3 * 60 * 60 * 1000);\n return () => clearInterval(timer);\n }, []);\n\n const logout = useCallback(async () => {\n await clearAuth();\n window.location.reload();\n }, []);\n\n const updateToken = useCallback(async (token: string) => {\n if (checkJwtExpiration(token)) {\n return {\n error: new Error(\"M2MAuthToken is expired\"),\n };\n }\n await m2mAuthTokenApi.set(token);\n setToken(token);\n return { error: undefined };\n }, []);\n\n const state = useMemo(() => {\n return {\n login,\n logout,\n token,\n authenticated,\n updateToken,\n revalidating,\n isLoginRequired: authenticated === false && revalidating === false,\n } satisfies AuthenticationState;\n }, [authenticated, login, logout, revalidating, token, updateToken]);\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","import { fetcher } from \"matsuri-hooks\";\nimport { login as m2mUsers_v1_login } from \"../../endpoints/m2m-users.v1\";\n\nexport interface LoginInput {\n email: string;\n password: string;\n}\n// @see https://github.com/matsuri-tech/m2m-users/blob/master/domain/model/common/accessToken.go#L7\nexport interface LoginResponse {\n accessToken: string;\n expiresAt: number;\n refreshToken: {\n refreshToken: string;\n refreshTokenExpiresAt: number;\n };\n}\nexport const requestLogin = async (input: LoginInput) => {\n return await fetcher<LoginResponse>(m2mUsers_v1_login(), {\n method: \"POST\",\n body: JSON.stringify(input),\n });\n};\n","/* eslint-disable */\n/**\n * A function that returns the URL part common to the endpoints.\n */\nexport const root = () => {\n let __root = \"\";\n\n if (globalThis.M2M_COMPONENTS_ENV === \"local\") {\n __root = \"http://localhost:8080\";\n }\n\n if (globalThis.M2M_COMPONENTS_ENV === \"localDev\") {\n __root = \"https://api-users.dev.m2msystems.cloud\";\n }\n\n if (globalThis.M2M_COMPONENTS_ENV === \"development\") {\n __root = \"https://api-users.dev.m2msystems.cloud\";\n }\n\n if (globalThis.M2M_COMPONENTS_ENV === \"production\") {\n __root = \"https://api.m2msystems.cloud\";\n }\n\n return __root;\n};\n/**\n * ヘルスチェック\n *\n */\nexport const healthCheck = () => {\n const __root = root();\n const __queries = Object.entries({})\n .filter(([_, value]) => {\n return value !== undefined;\n })\n .map(([key, value]) => {\n return `${key}=${value}`;\n })\n .join(\"&\");\n const __path = `${__root}/${`health_check`}`;\n return __queries ? `${__path}?${__queries}` : __path;\n};\n/**\n * 会社を作成する\n *\n */\nexport const createCompany = () => {\n const __root = root();\n const __queries = Object.entries({})\n .filter(([_, value]) => {\n return value !== undefined;\n })\n .map(([key, value]) => {\n return `${key}=${value}`;\n })\n .join(\"&\");\n const __path = `${__root}/${`companies/`}`;\n return __queries ? `${__path}?${__queries}` : __path;\n};\n/**\n * 会社情報を取得する\n *\n */\nexport const getCompany = ({ id }: { id: string }) => {\n const __root = root();\n const __queries = Object.entries({})\n .filter(([_, value]) => {\n return value !== undefined;\n })\n .map(([key, value]) => {\n return `${key}=${value}`;\n })\n .join(\"&\");\n const __path = `${__root}/${`companies/${id}`}`;\n return __queries ? `${__path}?${__queries}` : __path;\n};\n/**\n * 会社情報を更新する\n *\n */\nexport const updateCompany = () => {\n const __root = root();\n const __queries = Object.entries({})\n .filter(([_, value]) => {\n return value !== undefined;\n })\n .map(([key, value]) => {\n return `${key}=${value}`;\n })\n .join(\"&\");\n const __path = `${__root}/${`companies/`}`;\n return __queries ? `${__path}?${__queries}` : __path;\n};\n/**\n * 会社情報を更新する\n *\n */\nexport const updateCompanyPatch = () => {\n const __root = root();\n const __queries = Object.entries({})\n .filter(([_, value]) => {\n return value !== undefined;\n })\n .map(([key, value]) => {\n return `${key}=${value}`;\n })\n .join(\"&\");\n const __path = `${__root}/${`companies/`}`;\n return __queries ? `${__path}?${__queries}` : __path;\n};\n/**\n * idを指定して複数の会社情報を取得する\n * @param {string} company_ids a,b,c\n */\nexport const findCompaniesByIds = ({\n company_ids,\n}: {\n company_ids?: string;\n}) => {\n const __root = root();\n const __queries = Object.entries({ company_ids })\n .filter(([_, value]) => {\n return value !== undefined;\n })\n .map(([key, value]) => {\n return `${key}=${value}`;\n })\n .join(\"&\");\n const __path = `${__root}/${`companies/find_by_ids`}`;\n return __queries ? `${__path}?${__queries}` : __path;\n};\n/**\n * ユーザーを作成する\n *\n */\nexport const createUser = () => {\n const __root = root();\n const __queries = Object.entries({})\n .filter(([_, value]) => {\n return value !== undefined;\n })\n .map(([key, value]) => {\n return `${key}=${value}`;\n })\n .join(\"&\");\n const __path = `${__root}/${`users/`}`;\n return __queries ? `${__path}?${__queries}` : __path;\n};\n/**\n * ユーザーを取得する\n *\n */\nexport const findUserById = ({ id }: { id: string }) => {\n const __root = root();\n const __queries = Object.entries({})\n .filter(([_, value]) => {\n return value !== undefined;\n })\n .map(([key, value]) => {\n return `${key}=${value}`;\n })\n .join(\"&\");\n const __path = `${__root}/${`users/${id}`}`;\n return __queries ? `${__path}?${__queries}` : __path;\n};\n/**\n * ユーザーを更新する\n *\n */\nexport const updateUser = ({ id }: { id: string }) => {\n const __root = root();\n const __queries = Object.entries({})\n .filter(([_, value]) => {\n return value !== undefined;\n })\n .map(([key, value]) => {\n return `${key}=${value}`;\n })\n .join(\"&\");\n const __path = `${__root}/${`users/${id}`}`;\n return __queries ? `${__path}?${__queries}` : __path;\n};\n/**\n * ユーザーを更新する\n *\n */\nexport const updateUserPatch = ({ id }: { id: string }) => {\n const __root = root();\n const __queries = Object.entries({})\n .filter(([_, value]) => {\n return value !== undefined;\n })\n .map(([key, value]) => {\n return `${key}=${value}`;\n })\n .join(\"&\");\n const __path = `${__root}/${`users/${id}`}`;\n return __queries ? `${__path}?${__queries}` : __path;\n};\n/**\n * ユーザーを強制的に有効化する\n *\n */\nexport const activateUserByAdmin = ({ id }: { id: string }) => {\n const __root = root();\n const __queries = Object.entries({})\n .filter(([_, value]) => {\n return value !== undefined;\n })\n .map(([key, value]) => {\n return `${key}=${value}`;\n })\n .join(\"&\");\n const __path = `${__root}/${`users/${id}/admin_activate`}`;\n return __queries ? `${__path}?${__queries}` : __path;\n};\n/**\n * ユーザーを無効化する\n *\n */\nexport const deactivateUser = ({ id }: { id: string }) => {\n const __root = root();\n const __queries = Object.entries({})\n .filter(([_, value]) => {\n return value !== undefined;\n })\n .map(([key, value]) => {\n return `${key}=${value}`;\n })\n .join(\"&\");\n const __path = `${__root}/${`users/${id}/deactivate`}`;\n return __queries ? `${__path}?${__queries}` : __path;\n};\n/**\n * パスワードリセットのメールを送信する\n *\n */\nexport const sendResetPasswordEmail = () => {\n const __root = root();\n const __queries = Object.entries({})\n .filter(([_, value]) => {\n return value !== undefined;\n })\n .map(([key, value]) => {\n return `${key}=${value}`;\n })\n .join(\"&\");\n const __path = `${__root}/${`users/reset_password_email`}`;\n return __queries ? `${__path}?${__queries}` : __path;\n};\n/**\n * パスワードをリセットする\n *\n */\nexport const resetPassword = () => {\n const __root = root();\n const __queries = Object.entries({})\n .filter(([_, value]) => {\n return value !== undefined;\n })\n .map(([key, value]) => {\n return `${key}=${value}`;\n })\n .join(\"&\");\n const __path = `${__root}/${`users/reset_password`}`;\n return __queries ? `${__path}?${__queries}` : __path;\n};\n/**\n * アクティベーションメールを送信する\n *\n */\nexport const sendActivationEmail = () => {\n const __root = root();\n const __queries = Object.entries({})\n .filter(([_, value]) => {\n return value !== undefined;\n })\n .map(([key, value]) => {\n return `${key}=${value}`;\n })\n .join(\"&\");\n const __path = `${__root}/${`users/activation_email`}`;\n return __queries ? `${__path}?${__queries}` : __path;\n};\n/**\n * ユーザーを有効化する\n *\n */\nexport const activateUser = () => {\n const __root = root();\n const __queries = Object.entries({})\n .filter(([_, value]) => {\n return value !== undefined;\n })\n .map(([key, value]) => {\n return `${key}=${value}`;\n })\n .join(\"&\");\n const __path = `${__root}/${`users/activate`}`;\n return __queries ? `${__path}?${__queries}` : __path;\n};\n/**\n * 認可スコープを設定する\n *\n */\nexport const setAuthorityScope = () => {\n const __root = root();\n const __queries = Object.entries({})\n .filter(([_, value]) => {\n return value !== undefined;\n })\n .map(([key, value]) => {\n return `${key}=${value}`;\n })\n .join(\"&\");\n const __path = `${__root}/${`users/scope`}`;\n return __queries ? `${__path}?${__queries}` : __path;\n};\n/**\n * メールを指定してユーザーを取得する\n *\n */\nexport const findUserByEmail = () => {\n const __root = root();\n const __queries = Object.entries({})\n .filter(([_, value]) => {\n return value !== undefined;\n })\n .map(([key, value]) => {\n return `${key}=${value}`;\n })\n .join(\"&\");\n const __path = `${__root}/${`users/find_by_email`}`;\n return __queries ? `${__path}?${__queries}` : __path;\n};\n/**\n * ユーザーの権限を更新する\n *\n */\nexport const updateAuthority = ({ id }: { id: string }) => {\n const __root = root();\n const __queries = Object.entries({})\n .filter(([_, value]) => {\n return value !== undefined;\n })\n .map(([key, value]) => {\n return `${key}=${value}`;\n })\n .join(\"&\");\n const __path = `${__root}/${`users/authority/${id}`}`;\n return __queries ? `${__path}?${__queries}` : __path;\n};\n/**\n * companyIdからユーザーを取得する\n * @param {string} statuses BeforeVerification,Active,Deactivated\n */\nexport const findUsersByCompanyId = ({ statuses }: { statuses?: string }) => {\n const __root = root();\n const __queries = Object.entries({ statuses })\n .filter(([_, value]) => {\n return value !== undefined;\n })\n .map(([key, value]) => {\n return `${key}=${value}`;\n })\n .join(\"&\");\n const __path = `${__root}/${`users/find_by_company_id`}`;\n return __queries ? `${__path}?${__queries}` : __path;\n};\n/**\n * ユーザー情報をAdminが変更する\n *\n */\nexport const updateUserByAdmin = ({ id }: { id: string }) => {\n const __root = root();\n const __queries = Object.entries({})\n .filter(([_, value]) => {\n return value !== undefined;\n })\n .map(([key, value]) => {\n return `${key}=${value}`;\n })\n .join(\"&\");\n const __path = `${__root}/${`users/${id}/admin_update`}`;\n return __queries ? `${__path}?${__queries}` : __path;\n};\n/**\n * ユーザーの会社を移動する\n *\n */\nexport const transferUserCompany = () => {\n const __root = root();\n const __queries = Object.entries({})\n .filter(([_, value]) => {\n return value !== undefined;\n })\n .map(([key, value]) => {\n return `${key}=${value}`;\n })\n .join(\"&\");\n const __path = `${__root}/${`users/transfer_company`}`;\n return __queries ? `${__path}?${__queries}` : __path;\n};\n/**\n * ログインする\n *\n */\nexport const login = () => {\n const __root = root();\n const __queries = Object.entries({})\n .filter(([_, value]) => {\n return value !== undefined;\n })\n .map(([key, value]) => {\n return `${key}=${value}`;\n })\n .join(\"&\");\n const __path = `${__root}/${`login`}`;\n return __queries ? `${__path}?${__queries}` : __path;\n};\n/**\n * ログインする\n *\n */\nexport const loginWithSlash = () => {\n const __root = root();\n const __queries = Object.entries({})\n .filter(([_, value]) => {\n return value !== undefined;\n })\n .map(([key, value]) => {\n return `${key}=${value}`;\n })\n .join(\"&\");\n const __path = `${__root}/${`login/`}`;\n return __queries ? `${__path}?${__queries}` : __path;\n};\n/**\n * JWKを取得する\n *\n */\nexport const getJwks = () => {\n const __root = root();\n const __queries = Object.entries({})\n .filter(([_, value]) => {\n return value !== undefined;\n })\n .map(([key, value]) => {\n return `${key}=${value}`;\n })\n .join(\"&\");\n const __path = `${__root}/${`login/jwks`}`;\n return __queries ? `${__path}?${__queries}` : __path;\n};\n/**\n * 公開鍵を取得する\n *\n */\nexport const getPublicKeys = () => {\n const __root = root();\n const __queries = Object.entries({})\n .filter(([_, value]) => {\n return value !== undefined;\n })\n .map(([key, value]) => {\n return `${key}=${value}`;\n })\n .join(\"&\");\n const __path = `${__root}/${`login/public_keys`}`;\n return __queries ? `${__path}?${__queries}` : __path;\n};\n/**\n * MFAのコードを発行する\n *\n */\nexport const publishMFACode = () => {\n const __root = root();\n const __queries = Object.entries({})\n .filter(([_, value]) => {\n return value !== undefined;\n })\n .map(([key, value]) => {\n return `${key}=${value}`;\n })\n .join(\"&\");\n const __path = `${__root}/${`login/publish_mfa_code`}`;\n return __queries ? `${__path}?${__queries}` : __path;\n};\n/**\n * MFAを使ってログインする\n *\n */\nexport const loginWithMFA = () => {\n const __root = root();\n const __queries = Object.entries({})\n .filter(([_, value]) => {\n return value !== undefined;\n })\n .map(([key, value]) => {\n return `${key}=${value}`;\n })\n .join(\"&\");\n const __path = `${__root}/${`login/mfa_login`}`;\n return __queries ? `${__path}?${__queries}` : __path;\n};\n/**\n * トークンを取得する\n *\n */\nexport const getToken = () => {\n const __root = root();\n const __queries = Object.entries({})\n .filter(([_, value]) => {\n return value !== undefined;\n })\n .map(([key, value]) => {\n return `${key}=${value}`;\n })\n .join(\"&\");\n const __path = `${__root}/${`login/token`}`;\n return __queries ? `${__path}?${__queries}` : __path;\n};\n/**\n * usersに存在しないアカウントのトークンを作成する(deprecated)\n *\n */\nexport const generateToken = () => {\n const __root = root();\n const __queries = Object.entries({})\n .filter(([_, value]) => {\n return value !== undefined;\n })\n .map(([key, value]) => {\n return `${key}=${value}`;\n })\n .join(\"&\");\n const __path = `${__root}/${`guest/token`}`;\n return __queries ? `${__path}?${__queries}` : __path;\n};\n/**\n * usersに存在しないアカウントのトークンを作成する\n *\n */\nexport const generateUserToken = () => {\n const __root = root();\n const __queries = Object.entries({})\n .filter(([_, value]) => {\n return value !== undefined;\n })\n .map(([key, value]) => {\n return `${key}=${value}`;\n })\n .join(\"&\");\n const __path = `${__root}/${`generate/token`}`;\n return __queries ? `${__path}?${__queries}` : __path;\n};\nexport const m2mUsers_v1 = {\n healthCheck,\n createCompany,\n getCompany,\n updateCompany,\n updateCompanyPatch,\n findCompaniesByIds,\n createUser,\n findUserById,\n updateUser,\n updateUserPatch,\n activateUserByAdmin,\n deactivateUser,\n sendResetPasswordEmail,\n resetPassword,\n sendActivationEmail,\n activateUser,\n setAuthorityScope,\n findUserByEmail,\n updateAuthority,\n findUsersByCompanyId,\n updateUserByAdmin,\n transferUserCompany,\n login,\n loginWithSlash,\n getJwks,\n getPublicKeys,\n publishMFACode,\n loginWithMFA,\n getToken,\n generateToken,\n generateUserToken,\n};\n","interface JwtPayload {\n aud: string;\n authority: string;\n companyId: string;\n exp: number;\n iss: string;\n loginType: string;\n scope: Record<string, string>;\n userId: string;\n}\n\nconst isObject = (value: unknown): value is Record<string, unknown> => {\n return typeof value === \"object\" && value !== null;\n};\n/**\n * 利用するパラメータが存在するかどうかを確認する\n */\nconst validateJwtPayload = (payload: unknown): JwtPayload => {\n if (isObject(payload) === false) {\n throw new Error(\"JWT payload is not an object\");\n }\n\n if (typeof payload?.exp !== \"number\" || typeof payload?.userId !== \"string\") {\n throw new Error(\"JWT payload is missing required fields\");\n }\n\n return payload as unknown as JwtPayload;\n};\n\nexport const parseJwtPayload = (jwt: string): JwtPayload | null => {\n try {\n const splitted = jwt.split(\".\");\n if (splitted.length !== 3) {\n throw new Error(\"Invalid JWT\");\n }\n const [, payload] = splitted;\n return validateJwtPayload(JSON.parse(atob(payload)));\n } catch (error: unknown) {\n console.error(error);\n return null;\n }\n};\n\nexport const checkJwtExpiration = (jwt: string): boolean => {\n const payload = parseJwtPayload(jwt);\n if (!payload) {\n return false;\n }\n return new Date() < new Date(payload.exp * 1000);\n};\n","import { StorageClient } from \"./lib/client\";\n\nclass M2mStorageClient extends StorageClient {}\n\nexport type { M2mStorageClient };\n\n/**\n * Get the connected storage client.\n * @param timeout\n * @default 5000\n */\nconst getStorage = async (timeout = 5000) => {\n const storage = await new Promise<M2mStorageClient>((resolve, reject) => {\n const rejectTimer = globalThis.setTimeout(function () {\n reject(\n new Error(\n \"Timeout: M2mStorageClient could not connect. Please call m2mStorageClient.init() before using m2mStorageClient.\",\n ),\n );\n }, timeout);\n\n const storage = globalThis.M2M_STORAGE;\n if (storage) {\n globalThis.clearTimeout(rejectTimer);\n resolve(storage);\n }\n\n const timer = globalThis.setInterval(() => {\n const storage = globalThis.M2M_STORAGE;\n if (storage) {\n globalThis.clearTimeout(rejectTimer);\n globalThis.clearInterval(timer);\n resolve(storage);\n }\n }, 200);\n });\n\n await storage.onConnect();\n\n return storage;\n};\n\nconst M2M_STORAGE_HUB_URL = \"https://hub.m2msystems.cloud/\";\n\nconst M2M_STORAGE_HUB_URL_DEV =\n \"https://m2m-components-storage-hub-dev.netlify.app/\";\n\nconst initStorageClient = (options?: {\n env?: \"development\" | \"production\";\n}) => {\n if (globalThis.M2M_STORAGE) {\n throw new Error(\n \"M2mStorageClient already initialized. Do not call m2mStorageClient.init multiple times.\",\n );\n }\n const storage = new M2mStorageClient(\n options?.env === \"production\"\n ? M2M_STORAGE_HUB_URL\n : M2M_STORAGE_HUB_URL_DEV,\n );\n globalThis.M2M_STORAGE = storage;\n};\n\nexport const m2mStorageClient = {\n init: initStorageClient,\n getStorage: getStorage,\n};\n\nexport const M2M_AUTH_TOKEN_KEY = \"M2M_APP_AUTH_TOKEN\";\n\nconst getAuthTokenCache = () => {\n return globalThis.localStorage.getItem(M2M_AUTH_TOKEN_KEY);\n};\n\nconst getAuthToken = async () => {\n try {\n const storage = await getStorage();\n const autuToken = (await storage.get(M2M_AUTH_TOKEN_KEY)) as string;\n return autuToken !== null && autuToken !== undefined && autuToken.length > 0\n ? autuToken\n : getAuthTokenCache();\n } catch (error) {\n console.warn(error);\n return getAuthTokenCache();\n }\n};\n\nconst setAuthToken = async (token: string) => {\n globalThis.localStorage.setItem(M2M_AUTH_TOKEN_KEY, token);\n try {\n const storage = await getStorage();\n await storage.set(M2M_AUTH_TOKEN_KEY, token);\n } catch (error) {\n console.warn(error);\n }\n};\n\nconst clearAuthToken = async () => {\n globalThis.localStorage.removeItem(M2M_AUTH_TOKEN_KEY);\n try {\n const storage = await getStorage();\n await storage.del(M2M_AUTH_TOKEN_KEY);\n } catch (error) {\n console.warn(error);\n }\n};\n\nexport const m2mAuthTokenApi = {\n get: getAuthToken,\n getCache: getAuthTokenCache,\n set: setAuthToken,\n clear: clearAuthToken,\n};\n","import { DBSchema, openDB } from \"idb\";\nimport { LoginResponse } from \"./api/login\";\n\ninterface PersistenceDatabase extends DBSchema {\n persistence: {\n value: LoginResponse;\n key: \"auth\";\n };\n}\n\nconst dbPromise = openDB<PersistenceDatabase>(\"persistence-store\", 1, {\n upgrade(db) {\n db.createObjectStore(\"persistence\");\n },\n});\n\nconst get = async (key: \"auth\") => {\n return (await dbPromise).get(\"persistence\", key);\n};\nconst set = async (key: \"auth\", val: LoginResponse) => {\n return (await dbPromise).put(\"persistence\", val, key);\n};\nconst clear = async (key: \"auth\") => {\n return (await dbPromise).delete(\"persistence\", key);\n};\n\nexport const persistenceDatabase = {\n get,\n set,\n clear,\n};\n","import { m2mAuthTokenApi } from \"./client\";\nimport { persistenceDatabase } from \"./persistenceDatabase\";\n\nexport const clearAuth = async () => {\n await persistenceDatabase.clear(\"auth\");\n await m2mAuthTokenApi.clear();\n};\n","import { fetcher } from \"matsuri-hooks\";\nimport { getToken as m2mUsers_v1_getToken } from \"../../endpoints/m2m-users.v1\";\nimport { LoginResponse } from \"./login\";\n\n// @see https://github.com/matsuri-tech/m2m-users/blob/master/web/request/login.go#L10-L13\ninterface GetTokenInput {\n userId: string;\n refreshToken: string;\n}\ntype GetTokenResponse = LoginResponse;\nexport const requestGetToken = async (input: GetTokenInput) => {\n return await fetcher<GetTokenResponse>(m2mUsers_v1_getToken(), {\n method: \"POST\",\n body: JSON.stringify(input),\n });\n};\n","import { m2mAuthTokenApi } from \"./client\";\nimport { parseJwtPayload } from \"./jwt\";\nimport { persistenceDatabase } from \"./persistenceDatabase\";\nimport { requestGetToken } from \"./api/getToken\";\n\nexport const refreshAuth = async () => {\n const auth = await persistenceDatabase.get(\"auth\");\n if (!auth) return null;\n\n const payload = parseJwtPayload(auth.accessToken);\n if (!payload) {\n return null;\n }\n\n const { data: newAuth } = await requestGetToken({\n refreshToken: auth.refreshToken.refreshToken,\n userId: payload.userId,\n });\n\n if (newAuth) {\n const authToken = newAuth.accessToken;\n await m2mAuthTokenApi.set(authToken);\n await persistenceDatabase.set(\"auth\", newAuth);\n return authToken;\n }\n return null;\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,mBAOO;;;ACPP,2BAAwB;;;ACIjB,IAAM,OAAO,MAAM;AACxB,MAAI,SAAS;AAEb,MAAI,WAAW,uBAAuB,SAAS;AAC7C,aAAS;AAAA,EACX;AAEA,MAAI,WAAW,uBAAuB,YAAY;AAChD,aAAS;AAAA,EACX;AAEA,MAAI,WAAW,uBAAuB,eAAe;AACnD,aAAS;AAAA,EACX;AAEA,MAAI,WAAW,uBAAuB,cAAc;AAClD,aAAS;AAAA,EACX;AAEA,SAAO;AACT;AA+XO,IAAM,QAAQ,MAAM;AACzB,QAAM,SAAS,KAAK;AACpB,QAAM,YAAY,OAAO,QAAQ,CAAC,CAAC,EAChC,OAAO,CAAC,CAAC,GAAG,KAAK,MAAM;AACtB,WAAO,UAAU;AAAA,EACnB,CAAC,EACA,IAAI,CAAC,CAAC,KAAK,KAAK,MAAM;AACrB,WAAO,GAAG,GAAG,IAAI,KAAK;AAAA,EACxB,CAAC,EACA,KAAK,GAAG;AACX,QAAM,SAAS,GAAG,MAAM,IAAI,OAAO;AACnC,SAAO,YAAY,GAAG,MAAM,IAAI,SAAS,KAAK;AAChD;AA0FO,IAAM,WAAW,MAAM;AAC5B,QAAM,SAAS,KAAK;AACpB,QAAM,YAAY,OAAO,QAAQ,CAAC,CAAC,EAChC,OAAO,CAAC,CAAC,GAAG,KAAK,MAAM;AACtB,WAAO,UAAU;AAAA,EACnB,CAAC,EACA,IAAI,CAAC,CAAC,KAAK,KAAK,MAAM;AACrB,WAAO,GAAG,GAAG,IAAI,KAAK;AAAA,EACxB,CAAC,EACA,KAAK,GAAG;AACX,QAAM,SAAS,GAAG,MAAM,IAAI,aAAa;AACzC,SAAO,YAAY,GAAG,MAAM,IAAI,SAAS,KAAK;AAChD;;;ADzfO,IAAM,eAAe,OAAO,UAAsB;AACvD,SAAO,UAAM,8BAAuB,MAAkB,GAAG;AAAA,IACvD,QAAQ;AAAA,IACR,MAAM,KAAK,UAAU,KAAK;AAAA,EAC5B,CAAC;AACH;;;AEVA,IAAM,WAAW,CAAC,UAAqD;AACrE,SAAO,OAAO,UAAU,YAAY,UAAU;AAChD;AAIA,IAAM,qBAAqB,CAAC,YAAiC;AAC3D,MAAI,SAAS,OAAO,MAAM,OAAO;AAC/B,UAAM,IAAI,MAAM,8BAA8B;AAAA,EAChD;AAEA,MAAI,QAAO,mCAAS,SAAQ,YAAY,QAAO,mCAAS,YAAW,UAAU;AAC3E,UAAM,IAAI,MAAM,wCAAwC;AAAA,EAC1D;AAEA,SAAO;AACT;AAEO,IAAM,kBAAkB,CAAC,QAAmC;AACjE,MAAI;AACF,UAAM,WAAW,IAAI,MAAM,GAAG;AAC9B,QAAI,SAAS,WAAW,GAAG;AACzB,YAAM,IAAI,MAAM,aAAa;AAAA,IAC/B;AACA,UAAM,CAAC,EAAE,OAAO,IAAI;AACpB,WAAO,mBAAmB,KAAK,MAAM,KAAK,OAAO,CAAC,CAAC;AAAA,EACrD,SAAS,OAAgB;AACvB,YAAQ,MAAM,KAAK;AACnB,WAAO;AAAA,EACT;AACF;AAEO,IAAM,qBAAqB,CAAC,QAAyB;AAC1D,QAAM,UAAU,gBAAgB,GAAG;AACnC,MAAI,CAAC,SAAS;AACZ,WAAO;AAAA,EACT;AACA,SAAO,oBAAI,KAAK,IAAI,IAAI,KAAK,QAAQ,MAAM,GAAI;AACjD;;;ACtCA,IAAM,aAAa,OAAO,UAAU,QAAS;AAC3C,QAAM,UAAU,MAAM,IAAI,QAA0B,CAAC,SAAS,WAAW;AACvE,UAAM,cAAc,WAAW,WAAW,WAAY;AACpD;AAAA,QACE,IAAI;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,IACF,GAAG,OAAO;AAEV,UAAMA,WAAU,WAAW;AAC3B,QAAIA,UAAS;AACX,iBAAW,aAAa,WAAW;AACnC,cAAQA,QAAO;AAAA,IACjB;AAEA,UAAM,QAAQ,WAAW,YAAY,MAAM;AACzC,YAAMA,WAAU,WAAW;AAC3B,UAAIA,UAAS;AACX,mBAAW,aAAa,WAAW;AACnC,mBAAW,cAAc,KAAK;AAC9B,gBAAQA,QAAO;AAAA,MACjB;AAAA,IACF,GAAG,GAAG;AAAA,EACR,CAAC;AAED,QAAM,QAAQ,UAAU;AAExB,SAAO;AACT;AA4BO,IAAM,qBAAqB;AAElC,IAAM,oBAAoB,MAAM;AAC9B,SAAO,WAAW,aAAa,QAAQ,kBAAkB;AAC3D;AAEA,IAAM,eAAe,YAAY;AAC/B,MAAI;AACF,UAAM,UAAU,MAAM,WAAW;AACjC,UAAM,YAAa,MAAM,QAAQ,IAAI,kBAAkB;AACvD,WAAO,cAAc,QAAQ,cAAc,UAAa,UAAU,SAAS,IACvE,YACA,kBAAkB;AAAA,EACxB,SAAS,OAAO;AACd,YAAQ,KAAK,KAAK;AAClB,WAAO,kBAAkB;AAAA,EAC3B;AACF;AAEA,IAAM,eAAe,OAAO,UAAkB;AAC5C,aAAW,aAAa,QAAQ,oBAAoB,KAAK;AACzD,MAAI;AACF,UAAM,UAAU,MAAM,WAAW;AACjC,UAAM,QAAQ,IAAI,oBAAoB,KAAK;AAAA,EAC7C,SAAS,OAAO;AACd,YAAQ,KAAK,KAAK;AAAA,EACpB;AACF;AAEA,IAAM,iBAAiB,YAAY;AACjC,aAAW,aAAa,WAAW,kBAAkB;AACrD,MAAI;AACF,UAAM,UAAU,MAAM,WAAW;AACjC,UAAM,QAAQ,IAAI,kBAAkB;AAAA,EACtC,SAAS,OAAO;AACd,YAAQ,KAAK,KAAK;AAAA,EACpB;AACF;AAEO,IAAM,kBAAkB;AAAA,EAC7B,KAAK;AAAA,EACL,UAAU;AAAA,EACV,KAAK;AAAA,EACL,OAAO;AACT;;;AChHA,iBAAiC;AAUjC,IAAM,gBAAY,mBAA4B,qBAAqB,GAAG;AAAA,EACpE,QAAQ,IAAI;AACV,OAAG,kBAAkB,aAAa;AAAA,EACpC;AACF,CAAC;AAED,IAAM,MAAM,OAAO,QAAgB;AACjC,UAAQ,MAAM,WAAW,IAAI,eAAe,GAAG;AACjD;AACA,IAAM,MAAM,OAAO,KAAa,QAAuB;AACrD,UAAQ,MAAM,WAAW,IAAI,eAAe,KAAK,GAAG;AACtD;AACA,IAAM,QAAQ,OAAO,QAAgB;AACnC,UAAQ,MAAM,WAAW,OAAO,eAAe,GAAG;AACpD;AAEO,IAAM,sBAAsB;AAAA,EACjC;AAAA,EACA;AAAA,EACA;AACF;;;AC3BO,IAAM,YAAY,YAAY;AACnC,QAAM,oBAAoB,MAAM,MAAM;AACtC,QAAM,gBAAgB,MAAM;AAC9B;;;ACNA,IAAAC,wBAAwB;AAUjB,IAAM,kBAAkB,OAAO,UAAyB;AAC7D,SAAO,UAAM,+BAA0B,SAAqB,GAAG;AAAA,IAC7D,QAAQ;AAAA,IACR,MAAM,KAAK,UAAU,KAAK;AAAA,EAC5B,CAAC;AACH;;;ACVO,IAAM,cAAc,YAAY;AACrC,QAAM,OAAO,MAAM,oBAAoB,IAAI,MAAM;AACjD,MAAI,CAAC,KAAM,QAAO;AAElB,QAAM,UAAU,gBAAgB,KAAK,WAAW;AAChD,MAAI,CAAC,SAAS;AACZ,WAAO;AAAA,EACT;AAEA,QAAM,EAAE,MAAM,QAAQ,IAAI,MAAM,gBAAgB;AAAA,IAC9C,cAAc,KAAK,aAAa;AAAA,IAChC,QAAQ,QAAQ;AAAA,EAClB,CAAC;AAED,MAAI,SAAS;AACX,UAAM,YAAY,QAAQ;AAC1B,UAAM,gBAAgB,IAAI,SAAS;AACnC,UAAM,oBAAoB,IAAI,QAAQ,OAAO;AAC7C,WAAO;AAAA,EACT;AACA,SAAO;AACT;;;AR0FI;AA3FJ,IAAM,4BAAwB;AAAA,EAC5B;AACF;AAEO,IAAM,4BAA4B,CAAC;AAAA,EACxC;AACF,MAEM;AAjCN;AAkCE,QAAM,CAAC,OAAO,QAAQ,QAAI,wBAAS,qBAAgB,SAAS,MAAzB,YAA8B,EAAE;AAEnE,QAAM,oBAAgB,sBAAQ,MAAM,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC;AAEpD,QAAM,mBAAe,0BAAY,YAAY;AAC3C,UAAM,YAAY,MAAM,gBAAgB,IAAI;AAC5C,QAAI,EAAE,cAAc,QAAQ,mBAAmB,SAAS,IAAI;AAC1D,WAAK,gBAAgB,MAAM;AAC3B,eAAS,EAAE;AAAA,IACb,OAAO;AACL,WAAK,gBAAgB,IAAI,SAAS;AAClC,eAAS,SAAS;AAAA,IACpB;AAAA,EACF,GAAG,CAAC,CAAC;AAEL,8BAAU,MAAM;AAKd,SAAK,aAAa;AAAA,EACpB,GAAG,CAAC,YAAY,CAAC;AAEjB,QAAMC,aAAQ,0BAAY,OAAO,UAAsB;AACrD,UAAM,EAAE,MAAM,MAAM,MAAM,IAAI,MAAM,aAAa,KAAK;AACtD,QAAI,MAAM;AACR,YAAM,YAAY,KAAK;AAEvB,eAAS,SAAS;AAClB,YAAM,gBAAgB,IAAI,SAAS;AACnC,YAAM,oBAAoB,IAAI,QAAQ,IAAI;AAAA,IAC5C;AACA,WAAO;AAAA,MACL;AAAA,MACA,OAAO,OAAO,KAAK,cAAc;AAAA,IACnC;AAAA,EACF,GAAG,CAAC,CAAC;AAEL,QAAM,CAAC,cAAc,eAAe,QAAI,uBAAS,IAAI;AAErD,8BAAU,MAAM;AACd,UAAM,WAAW,YAAY;AAC3B,YAAM,YAAY,MAAM,YAAY;AACpC,UAAI,cAAc,MAAM;AACtB,iBAAS,SAAS;AAAA,MACpB;AACA,sBAAgB,KAAK;AAAA,IACvB;AACA,SAAK,SAAS;AAEd,UAAM,QAAQ,YAAY,UAAU,IAAI,KAAK,KAAK,GAAI;AACtD,WAAO,MAAM,cAAc,KAAK;AAAA,EAClC,GAAG,CAAC,CAAC;AAEL,QAAM,aAAS,0BAAY,YAAY;AACrC,UAAM,UAAU;AAChB,WAAO,SAAS,OAAO;AAAA,EACzB,GAAG,CAAC,CAAC;AAEL,QAAM,kBAAc,0BAAY,OAAOC,WAAkB;AACvD,QAAI,mBAAmBA,MAAK,GAAG;AAC7B,aAAO;AAAA,QACL,OAAO,IAAI,MAAM,yBAAyB;AAAA,MAC5C;AAAA,IACF;AACA,UAAM,gBAAgB,IAAIA,MAAK;AAC/B,aAASA,MAAK;AACd,WAAO,EAAE,OAAO,OAAU;AAAA,EAC5B,GAAG,CAAC,CAAC;AAEL,QAAM,YAAQ,sBAAQ,MAAM;AAC1B,WAAO;AAAA,MACL,OAAAD;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,iBAAiB,kBAAkB,SAAS,iBAAiB;AAAA,IAC/D;AAAA,EACF,GAAG,CAAC,eAAeA,QAAO,QAAQ,cAAc,OAAO,WAAW,CAAC;AACnE,SACE,4CAAC,sBAAsB,UAAtB,EAA+B,OAAO,OACpC,UACH;AAEJ;AAEO,IAAM,UAAU,MAAM;AAC3B,QAAM,UAAM,yBAAW,qBAAqB;AAC5C,MAAI,CAAC,KAAK;AACR,UAAM,IAAI,MAAM,qCAAqC;AAAA,EACvD;AACA,SAAO;AACT;","names":["storage","import_matsuri_hooks","login","token"]}
1
+ {"version":3,"sources":["../../src/storage/useM2mAuth.tsx","../../src/storage/api/login.ts","../../src/endpoints/m2m-users.v1.ts","../../src/storage/jwt.tsx","../../src/storage/client.ts","../../src/storage/persistenceDatabase.ts","../../src/storage/clearAuth.tsx","../../src/storage/api/getToken.ts","../../src/storage/refreshAuth.tsx"],"sourcesContent":["import React, {\n createContext,\n useCallback,\n useContext,\n useEffect,\n useMemo,\n useState,\n} from \"react\";\nimport { LoginInput, requestLogin } from \"./api/login\";\nimport { checkJwtExpiration } from \"./jwt\";\nimport { clearAuth } from \"./clearAuth\";\nimport { m2mAuthTokenApi } from \"./client\";\nimport { persistenceDatabase } from \"./persistenceDatabase\";\nimport { refreshAuth } from \"./refreshAuth\";\n\ninterface AuthenticationState {\n token: string;\n authenticated: boolean;\n login: (input: LoginInput) => Promise<{ token?: string; error?: Error }>;\n logout: () => void;\n updateToken: (token: string) => Promise<{ error?: Error }>;\n revalidating: boolean;\n isLoginRequired: boolean;\n}\n\nconst AuthenticationContext = createContext<AuthenticationState | undefined>(\n undefined,\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 !== null && checkJwtExpiration(authToken))) {\n void m2mAuthTokenApi.clear();\n setToken(\"\");\n } else {\n void m2mAuthTokenApi.set(authToken);\n setToken(authToken);\n }\n }, []);\n\n useEffect(() => {\n // tryCheckAuthは依存配列が空のuseCallbackで定義されているため、\n // 常に同じ関数参照を返し、このuseEffectは初回レンダリング後のみ実行される。\n // レンダリング後に一度認証状態を確認する意図的な動作のため、このルールを無効化。\n // eslint-disable-next-line react-hooks/set-state-in-effect\n void tryCheckAuth();\n }, [tryCheckAuth]);\n\n const login = useCallback(async (input: LoginInput) => {\n const { data: auth, error } = await requestLogin(input);\n if (auth) {\n const authToken = auth.accessToken;\n\n setToken(authToken);\n await m2mAuthTokenApi.set(authToken);\n await persistenceDatabase.set(\"auth\", auth);\n }\n return {\n error,\n token: auth ? auth.accessToken : undefined,\n };\n }, []);\n\n const [revalidating, setRevalidating] = useState(true);\n\n useEffect(() => {\n const callback = async () => {\n const authToken = await refreshAuth();\n if (authToken !== null) {\n setToken(authToken);\n }\n setRevalidating(false);\n };\n void callback();\n // Update auth every 3 hours\n const timer = setInterval(callback, 3 * 60 * 60 * 1000);\n return () => clearInterval(timer);\n }, []);\n\n const logout = useCallback(async () => {\n await clearAuth();\n window.location.reload();\n }, []);\n\n const updateToken = useCallback(async (token: string) => {\n if (checkJwtExpiration(token)) {\n return {\n error: new Error(\"M2MAuthToken is expired\"),\n };\n }\n await m2mAuthTokenApi.set(token);\n setToken(token);\n return { error: undefined };\n }, []);\n\n const state = useMemo(() => {\n return {\n login,\n logout,\n token,\n authenticated,\n updateToken,\n revalidating,\n isLoginRequired: authenticated === false && revalidating === false,\n } satisfies AuthenticationState;\n }, [authenticated, login, logout, revalidating, token, updateToken]);\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","import { fetcher } from \"matsuri-hooks\";\nimport { login as m2mUsers_v1_login } from \"../../endpoints/m2m-users.v1\";\n\nexport interface LoginInput {\n email: string;\n password: string;\n}\n// @see https://github.com/matsuri-tech/m2m-users/blob/master/domain/model/common/accessToken.go#L7\nexport interface LoginResponse {\n accessToken: string;\n expiresAt: number;\n refreshToken: {\n refreshToken: string;\n refreshTokenExpiresAt: number;\n };\n}\nexport const requestLogin = async (input: LoginInput) => {\n return await fetcher<LoginResponse>(m2mUsers_v1_login(), {\n method: \"POST\",\n body: JSON.stringify(input),\n });\n};\n","/* eslint-disable */\n/**\n * A function that returns the URL part common to the endpoints.\n */\nexport const root = () => {\n let __root = \"\";\n\n if (globalThis.M2M_COMPONENTS_ENV === \"local\") {\n __root = \"http://localhost:8080\";\n }\n\n if (globalThis.M2M_COMPONENTS_ENV === \"localDev\") {\n __root = \"https://api-users.dev.m2msystems.cloud\";\n }\n\n if (globalThis.M2M_COMPONENTS_ENV === \"development\") {\n __root = \"https://api-users.dev.m2msystems.cloud\";\n }\n\n if (globalThis.M2M_COMPONENTS_ENV === \"production\") {\n __root = \"https://api.m2msystems.cloud\";\n }\n\n return __root;\n};\n/**\n * ヘルスチェック\n *\n */\nexport const healthCheck = () => {\n const __root = root();\n const __queries = Object.entries({})\n .filter(([_, value]) => {\n return value !== undefined;\n })\n .map(([key, value]) => {\n return `${key}=${value}`;\n })\n .join(\"&\");\n const __path = `${__root}/${`health_check`}`;\n return __queries ? `${__path}?${__queries}` : __path;\n};\n/**\n * 会社を作成する\n *\n */\nexport const createCompany = () => {\n const __root = root();\n const __queries = Object.entries({})\n .filter(([_, value]) => {\n return value !== undefined;\n })\n .map(([key, value]) => {\n return `${key}=${value}`;\n })\n .join(\"&\");\n const __path = `${__root}/${`companies/`}`;\n return __queries ? `${__path}?${__queries}` : __path;\n};\n/**\n * 会社情報を取得する\n *\n */\nexport const getCompany = ({ id }: { id: string }) => {\n const __root = root();\n const __queries = Object.entries({})\n .filter(([_, value]) => {\n return value !== undefined;\n })\n .map(([key, value]) => {\n return `${key}=${value}`;\n })\n .join(\"&\");\n const __path = `${__root}/${`companies/${id}`}`;\n return __queries ? `${__path}?${__queries}` : __path;\n};\n/**\n * 会社情報を更新する\n *\n */\nexport const updateCompany = () => {\n const __root = root();\n const __queries = Object.entries({})\n .filter(([_, value]) => {\n return value !== undefined;\n })\n .map(([key, value]) => {\n return `${key}=${value}`;\n })\n .join(\"&\");\n const __path = `${__root}/${`companies/`}`;\n return __queries ? `${__path}?${__queries}` : __path;\n};\n/**\n * 会社情報を更新する\n *\n */\nexport const updateCompanyPatch = () => {\n const __root = root();\n const __queries = Object.entries({})\n .filter(([_, value]) => {\n return value !== undefined;\n })\n .map(([key, value]) => {\n return `${key}=${value}`;\n })\n .join(\"&\");\n const __path = `${__root}/${`companies/`}`;\n return __queries ? `${__path}?${__queries}` : __path;\n};\n/**\n * idを指定して複数の会社情報を取得する\n * @param {string} company_ids a,b,c\n */\nexport const findCompaniesByIds = ({\n company_ids,\n}: {\n company_ids?: string;\n}) => {\n const __root = root();\n const __queries = Object.entries({ company_ids })\n .filter(([_, value]) => {\n return value !== undefined;\n })\n .map(([key, value]) => {\n return `${key}=${value}`;\n })\n .join(\"&\");\n const __path = `${__root}/${`companies/find_by_ids`}`;\n return __queries ? `${__path}?${__queries}` : __path;\n};\n/**\n * ユーザーを作成する\n *\n */\nexport const createUser = () => {\n const __root = root();\n const __queries = Object.entries({})\n .filter(([_, value]) => {\n return value !== undefined;\n })\n .map(([key, value]) => {\n return `${key}=${value}`;\n })\n .join(\"&\");\n const __path = `${__root}/${`users/`}`;\n return __queries ? `${__path}?${__queries}` : __path;\n};\n/**\n * ユーザーを取得する\n *\n */\nexport const findUserById = ({ id }: { id: string }) => {\n const __root = root();\n const __queries = Object.entries({})\n .filter(([_, value]) => {\n return value !== undefined;\n })\n .map(([key, value]) => {\n return `${key}=${value}`;\n })\n .join(\"&\");\n const __path = `${__root}/${`users/${id}`}`;\n return __queries ? `${__path}?${__queries}` : __path;\n};\n/**\n * ユーザーを更新する\n *\n */\nexport const updateUser = ({ id }: { id: string }) => {\n const __root = root();\n const __queries = Object.entries({})\n .filter(([_, value]) => {\n return value !== undefined;\n })\n .map(([key, value]) => {\n return `${key}=${value}`;\n })\n .join(\"&\");\n const __path = `${__root}/${`users/${id}`}`;\n return __queries ? `${__path}?${__queries}` : __path;\n};\n/**\n * ユーザーを更新する\n *\n */\nexport const updateUserPatch = ({ id }: { id: string }) => {\n const __root = root();\n const __queries = Object.entries({})\n .filter(([_, value]) => {\n return value !== undefined;\n })\n .map(([key, value]) => {\n return `${key}=${value}`;\n })\n .join(\"&\");\n const __path = `${__root}/${`users/${id}`}`;\n return __queries ? `${__path}?${__queries}` : __path;\n};\n/**\n * ユーザーを強制的に有効化する\n *\n */\nexport const activateUserByAdmin = ({ id }: { id: string }) => {\n const __root = root();\n const __queries = Object.entries({})\n .filter(([_, value]) => {\n return value !== undefined;\n })\n .map(([key, value]) => {\n return `${key}=${value}`;\n })\n .join(\"&\");\n const __path = `${__root}/${`users/${id}/admin_activate`}`;\n return __queries ? `${__path}?${__queries}` : __path;\n};\n/**\n * ユーザーを無効化する\n *\n */\nexport const deactivateUser = ({ id }: { id: string }) => {\n const __root = root();\n const __queries = Object.entries({})\n .filter(([_, value]) => {\n return value !== undefined;\n })\n .map(([key, value]) => {\n return `${key}=${value}`;\n })\n .join(\"&\");\n const __path = `${__root}/${`users/${id}/deactivate`}`;\n return __queries ? `${__path}?${__queries}` : __path;\n};\n/**\n * パスワードリセットのメールを送信する\n *\n */\nexport const sendResetPasswordEmail = () => {\n const __root = root();\n const __queries = Object.entries({})\n .filter(([_, value]) => {\n return value !== undefined;\n })\n .map(([key, value]) => {\n return `${key}=${value}`;\n })\n .join(\"&\");\n const __path = `${__root}/${`users/reset_password_email`}`;\n return __queries ? `${__path}?${__queries}` : __path;\n};\n/**\n * パスワードをリセットする\n *\n */\nexport const resetPassword = () => {\n const __root = root();\n const __queries = Object.entries({})\n .filter(([_, value]) => {\n return value !== undefined;\n })\n .map(([key, value]) => {\n return `${key}=${value}`;\n })\n .join(\"&\");\n const __path = `${__root}/${`users/reset_password`}`;\n return __queries ? `${__path}?${__queries}` : __path;\n};\n/**\n * アクティベーションメールを送信する\n *\n */\nexport const sendActivationEmail = () => {\n const __root = root();\n const __queries = Object.entries({})\n .filter(([_, value]) => {\n return value !== undefined;\n })\n .map(([key, value]) => {\n return `${key}=${value}`;\n })\n .join(\"&\");\n const __path = `${__root}/${`users/activation_email`}`;\n return __queries ? `${__path}?${__queries}` : __path;\n};\n/**\n * ユーザーを有効化する\n *\n */\nexport const activateUser = () => {\n const __root = root();\n const __queries = Object.entries({})\n .filter(([_, value]) => {\n return value !== undefined;\n })\n .map(([key, value]) => {\n return `${key}=${value}`;\n })\n .join(\"&\");\n const __path = `${__root}/${`users/activate`}`;\n return __queries ? `${__path}?${__queries}` : __path;\n};\n/**\n * 認可スコープを設定する\n *\n */\nexport const setAuthorityScope = () => {\n const __root = root();\n const __queries = Object.entries({})\n .filter(([_, value]) => {\n return value !== undefined;\n })\n .map(([key, value]) => {\n return `${key}=${value}`;\n })\n .join(\"&\");\n const __path = `${__root}/${`users/scope`}`;\n return __queries ? `${__path}?${__queries}` : __path;\n};\n/**\n * メールを指定してユーザーを取得する\n *\n */\nexport const findUserByEmail = () => {\n const __root = root();\n const __queries = Object.entries({})\n .filter(([_, value]) => {\n return value !== undefined;\n })\n .map(([key, value]) => {\n return `${key}=${value}`;\n })\n .join(\"&\");\n const __path = `${__root}/${`users/find_by_email`}`;\n return __queries ? `${__path}?${__queries}` : __path;\n};\n/**\n * ユーザーの権限を更新する\n *\n */\nexport const updateAuthority = ({ id }: { id: string }) => {\n const __root = root();\n const __queries = Object.entries({})\n .filter(([_, value]) => {\n return value !== undefined;\n })\n .map(([key, value]) => {\n return `${key}=${value}`;\n })\n .join(\"&\");\n const __path = `${__root}/${`users/authority/${id}`}`;\n return __queries ? `${__path}?${__queries}` : __path;\n};\n/**\n * companyIdからユーザーを取得する\n * @param {string} statuses BeforeVerification,Active,Deactivated\n */\nexport const findUsersByCompanyId = ({ statuses }: { statuses?: string }) => {\n const __root = root();\n const __queries = Object.entries({ statuses })\n .filter(([_, value]) => {\n return value !== undefined;\n })\n .map(([key, value]) => {\n return `${key}=${value}`;\n })\n .join(\"&\");\n const __path = `${__root}/${`users/find_by_company_id`}`;\n return __queries ? `${__path}?${__queries}` : __path;\n};\n/**\n * ユーザー情報をAdminが変更する\n *\n */\nexport const updateUserByAdmin = ({ id }: { id: string }) => {\n const __root = root();\n const __queries = Object.entries({})\n .filter(([_, value]) => {\n return value !== undefined;\n })\n .map(([key, value]) => {\n return `${key}=${value}`;\n })\n .join(\"&\");\n const __path = `${__root}/${`users/${id}/admin_update`}`;\n return __queries ? `${__path}?${__queries}` : __path;\n};\n/**\n * ユーザーの会社を移動する\n *\n */\nexport const transferUserCompany = () => {\n const __root = root();\n const __queries = Object.entries({})\n .filter(([_, value]) => {\n return value !== undefined;\n })\n .map(([key, value]) => {\n return `${key}=${value}`;\n })\n .join(\"&\");\n const __path = `${__root}/${`users/transfer_company`}`;\n return __queries ? `${__path}?${__queries}` : __path;\n};\n/**\n * ログインする\n *\n */\nexport const login = () => {\n const __root = root();\n const __queries = Object.entries({})\n .filter(([_, value]) => {\n return value !== undefined;\n })\n .map(([key, value]) => {\n return `${key}=${value}`;\n })\n .join(\"&\");\n const __path = `${__root}/${`login`}`;\n return __queries ? `${__path}?${__queries}` : __path;\n};\n/**\n * ログインする\n *\n */\nexport const loginWithSlash = () => {\n const __root = root();\n const __queries = Object.entries({})\n .filter(([_, value]) => {\n return value !== undefined;\n })\n .map(([key, value]) => {\n return `${key}=${value}`;\n })\n .join(\"&\");\n const __path = `${__root}/${`login/`}`;\n return __queries ? `${__path}?${__queries}` : __path;\n};\n/**\n * JWKを取得する\n *\n */\nexport const getJwks = () => {\n const __root = root();\n const __queries = Object.entries({})\n .filter(([_, value]) => {\n return value !== undefined;\n })\n .map(([key, value]) => {\n return `${key}=${value}`;\n })\n .join(\"&\");\n const __path = `${__root}/${`login/jwks`}`;\n return __queries ? `${__path}?${__queries}` : __path;\n};\n/**\n * 公開鍵を取得する\n *\n */\nexport const getPublicKeys = () => {\n const __root = root();\n const __queries = Object.entries({})\n .filter(([_, value]) => {\n return value !== undefined;\n })\n .map(([key, value]) => {\n return `${key}=${value}`;\n })\n .join(\"&\");\n const __path = `${__root}/${`login/public_keys`}`;\n return __queries ? `${__path}?${__queries}` : __path;\n};\n/**\n * MFAのコードを発行する\n *\n */\nexport const publishMFACode = () => {\n const __root = root();\n const __queries = Object.entries({})\n .filter(([_, value]) => {\n return value !== undefined;\n })\n .map(([key, value]) => {\n return `${key}=${value}`;\n })\n .join(\"&\");\n const __path = `${__root}/${`login/publish_mfa_code`}`;\n return __queries ? `${__path}?${__queries}` : __path;\n};\n/**\n * MFAを使ってログインする\n *\n */\nexport const loginWithMFA = () => {\n const __root = root();\n const __queries = Object.entries({})\n .filter(([_, value]) => {\n return value !== undefined;\n })\n .map(([key, value]) => {\n return `${key}=${value}`;\n })\n .join(\"&\");\n const __path = `${__root}/${`login/mfa_login`}`;\n return __queries ? `${__path}?${__queries}` : __path;\n};\n/**\n * トークンを取得する\n *\n */\nexport const getToken = () => {\n const __root = root();\n const __queries = Object.entries({})\n .filter(([_, value]) => {\n return value !== undefined;\n })\n .map(([key, value]) => {\n return `${key}=${value}`;\n })\n .join(\"&\");\n const __path = `${__root}/${`login/token`}`;\n return __queries ? `${__path}?${__queries}` : __path;\n};\n/**\n * usersに存在しないアカウントのトークンを作成する(deprecated)\n *\n */\nexport const generateToken = () => {\n const __root = root();\n const __queries = Object.entries({})\n .filter(([_, value]) => {\n return value !== undefined;\n })\n .map(([key, value]) => {\n return `${key}=${value}`;\n })\n .join(\"&\");\n const __path = `${__root}/${`guest/token`}`;\n return __queries ? `${__path}?${__queries}` : __path;\n};\n/**\n * usersに存在しないアカウントのトークンを作成する\n *\n */\nexport const generateUserToken = () => {\n const __root = root();\n const __queries = Object.entries({})\n .filter(([_, value]) => {\n return value !== undefined;\n })\n .map(([key, value]) => {\n return `${key}=${value}`;\n })\n .join(\"&\");\n const __path = `${__root}/${`generate/token`}`;\n return __queries ? `${__path}?${__queries}` : __path;\n};\nexport const m2mUsers_v1 = {\n healthCheck,\n createCompany,\n getCompany,\n updateCompany,\n updateCompanyPatch,\n findCompaniesByIds,\n createUser,\n findUserById,\n updateUser,\n updateUserPatch,\n activateUserByAdmin,\n deactivateUser,\n sendResetPasswordEmail,\n resetPassword,\n sendActivationEmail,\n activateUser,\n setAuthorityScope,\n findUserByEmail,\n updateAuthority,\n findUsersByCompanyId,\n updateUserByAdmin,\n transferUserCompany,\n login,\n loginWithSlash,\n getJwks,\n getPublicKeys,\n publishMFACode,\n loginWithMFA,\n getToken,\n generateToken,\n generateUserToken,\n};\n","interface JwtPayload {\n aud: string;\n authority: string;\n companyId: string;\n exp: number;\n iss: string;\n loginType: string;\n scope: Record<string, string>;\n userId: string;\n}\n\nconst isObject = (value: unknown): value is Record<string, unknown> => {\n return typeof value === \"object\" && value !== null;\n};\n/**\n * 利用するパラメータが存在するかどうかを確認する\n */\nconst validateJwtPayload = (payload: unknown): JwtPayload => {\n if (isObject(payload) === false) {\n throw new Error(\"JWT payload is not an object\");\n }\n\n if (typeof payload?.exp !== \"number\" || typeof payload?.userId !== \"string\") {\n throw new Error(\"JWT payload is missing required fields\");\n }\n\n return payload as unknown as JwtPayload;\n};\n\nexport const parseJwtPayload = (jwt: string): JwtPayload | null => {\n try {\n const splitted = jwt.split(\".\");\n if (splitted.length !== 3) {\n throw new Error(\"Invalid JWT\");\n }\n const [, payload] = splitted;\n return validateJwtPayload(JSON.parse(atob(payload)));\n } catch (error: unknown) {\n console.error(error);\n return null;\n }\n};\n\nexport const checkJwtExpiration = (jwt: string): boolean => {\n const payload = parseJwtPayload(jwt);\n if (!payload) {\n return false;\n }\n return new Date() < new Date(payload.exp * 1000);\n};\n","import { getM2MStorageHubDomain } from \"./getM2MStorageHubDomain\";\nimport { StorageClient } from \"./lib/client\";\n\nclass M2mStorageClient extends StorageClient {}\n\nexport type { M2mStorageClient };\n\n/**\n * Get the connected storage client.\n * @param timeout\n * @default 5000\n */\nconst getStorage = async (timeout = 5000) => {\n const storage = await new Promise<M2mStorageClient>((resolve, reject) => {\n const rejectTimer = globalThis.setTimeout(function () {\n reject(\n new Error(\n \"Timeout: M2mStorageClient could not connect. Please call m2mStorageClient.init() before using m2mStorageClient.\",\n ),\n );\n }, timeout);\n\n const storage = globalThis.M2M_STORAGE;\n if (storage) {\n globalThis.clearTimeout(rejectTimer);\n resolve(storage);\n }\n\n const timer = globalThis.setInterval(() => {\n const storage = globalThis.M2M_STORAGE;\n if (storage) {\n globalThis.clearTimeout(rejectTimer);\n globalThis.clearInterval(timer);\n resolve(storage);\n }\n }, 200);\n });\n\n await storage.onConnect();\n\n return storage;\n};\n\nconst initStorageClient = (options?: {\n env?: \"development\" | \"production\";\n}) => {\n if (globalThis.M2M_STORAGE) {\n throw new Error(\n \"M2mStorageClient already initialized. Do not call m2mStorageClient.init multiple times.\",\n );\n }\n const storage = new M2mStorageClient(getM2MStorageHubDomain(options?.env));\n globalThis.M2M_STORAGE = storage;\n};\n\nexport const m2mStorageClient = {\n init: initStorageClient,\n getStorage: getStorage,\n};\n\nexport const M2M_AUTH_TOKEN_KEY = \"M2M_APP_AUTH_TOKEN\";\n\nconst getAuthTokenCache = () => {\n return globalThis.localStorage.getItem(M2M_AUTH_TOKEN_KEY);\n};\n\nconst getAuthToken = async () => {\n try {\n const storage = await getStorage();\n const autuToken = (await storage.get(M2M_AUTH_TOKEN_KEY)) as string;\n return autuToken !== null && autuToken !== undefined && autuToken.length > 0\n ? autuToken\n : getAuthTokenCache();\n } catch (error) {\n console.warn(error);\n return getAuthTokenCache();\n }\n};\n\nconst setAuthToken = async (token: string) => {\n globalThis.localStorage.setItem(M2M_AUTH_TOKEN_KEY, token);\n try {\n const storage = await getStorage();\n await storage.set(M2M_AUTH_TOKEN_KEY, token);\n } catch (error) {\n console.warn(error);\n }\n};\n\nconst clearAuthToken = async () => {\n globalThis.localStorage.removeItem(M2M_AUTH_TOKEN_KEY);\n try {\n const storage = await getStorage();\n await storage.del(M2M_AUTH_TOKEN_KEY);\n } catch (error) {\n console.warn(error);\n }\n};\n\nexport const m2mAuthTokenApi = {\n get: getAuthToken,\n getCache: getAuthTokenCache,\n set: setAuthToken,\n clear: clearAuthToken,\n};\n","import { DBSchema, openDB } from \"idb\";\nimport { LoginResponse } from \"./api/login\";\n\ninterface PersistenceDatabase extends DBSchema {\n persistence: {\n value: LoginResponse;\n key: \"auth\";\n };\n}\n\n// Only create connectors on client-side or in test environments to avoid SSR issues\nconst dbPromise =\n typeof window !== \"undefined\" || process.env.VITEST === \"true\"\n ? openDB<PersistenceDatabase>(\"persistence-store\", 1, {\n upgrade(db) {\n db.createObjectStore(\"persistence\");\n },\n })\n : Promise.resolve(null);\n\nconst get = async (key: \"auth\") => {\n return (await dbPromise)?.get(\"persistence\", key);\n};\nconst set = async (key: \"auth\", val: LoginResponse) => {\n return (await dbPromise)?.put(\"persistence\", val, key);\n};\nconst clear = async (key: \"auth\") => {\n return (await dbPromise)?.delete(\"persistence\", key);\n};\n\nexport const persistenceDatabase = {\n get,\n set,\n clear,\n};\n","import { m2mAuthTokenApi } from \"./client\";\nimport { persistenceDatabase } from \"./persistenceDatabase\";\n\nexport const clearAuth = async () => {\n await persistenceDatabase.clear(\"auth\");\n await m2mAuthTokenApi.clear();\n};\n","import { fetcher } from \"matsuri-hooks\";\nimport { getToken as m2mUsers_v1_getToken } from \"../../endpoints/m2m-users.v1\";\nimport { LoginResponse } from \"./login\";\n\n// @see https://github.com/matsuri-tech/m2m-users/blob/master/web/request/login.go#L10-L13\ninterface GetTokenInput {\n userId: string;\n refreshToken: string;\n}\ntype GetTokenResponse = LoginResponse;\nexport const requestGetToken = async (input: GetTokenInput) => {\n return await fetcher<GetTokenResponse>(m2mUsers_v1_getToken(), {\n method: \"POST\",\n body: JSON.stringify(input),\n });\n};\n","import { m2mAuthTokenApi } from \"./client\";\nimport { parseJwtPayload } from \"./jwt\";\nimport { persistenceDatabase } from \"./persistenceDatabase\";\nimport { requestGetToken } from \"./api/getToken\";\n\nexport const refreshAuth = async () => {\n const auth = await persistenceDatabase.get(\"auth\");\n if (!auth) return null;\n\n const payload = parseJwtPayload(auth.accessToken);\n if (!payload) {\n return null;\n }\n\n const { data: newAuth } = await requestGetToken({\n refreshToken: auth.refreshToken.refreshToken,\n userId: payload.userId,\n });\n\n if (newAuth) {\n const authToken = newAuth.accessToken;\n await m2mAuthTokenApi.set(authToken);\n await persistenceDatabase.set(\"auth\", newAuth);\n return authToken;\n }\n return null;\n};\n"],"mappings":"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","names":["storage","import_matsuri_hooks","login","token"]}
@@ -1,24 +1,25 @@
1
- import {
2
- requestLogin
3
- } from "../chunk-77SFV5XL.mjs";
4
1
  import {
5
2
  refreshAuth
6
- } from "../chunk-EMMKRND5.mjs";
3
+ } from "../chunk-7AZEHVZT.mjs";
7
4
  import "../chunk-YK5WXFFQ.mjs";
5
+ import {
6
+ requestLogin
7
+ } from "../chunk-77SFV5XL.mjs";
8
8
  import {
9
9
  checkJwtExpiration
10
10
  } from "../chunk-JG5QN6O7.mjs";
11
11
  import "../chunk-E2ELQNMR.mjs";
12
12
  import {
13
13
  clearAuth
14
- } from "../chunk-DEAGPWGW.mjs";
14
+ } from "../chunk-BFCTE2XZ.mjs";
15
15
  import {
16
16
  persistenceDatabase
17
- } from "../chunk-E5KIJ5DQ.mjs";
17
+ } from "../chunk-IGOSAWM6.mjs";
18
18
  import {
19
19
  m2mAuthTokenApi
20
- } from "../chunk-T5BIUVZ3.mjs";
20
+ } from "../chunk-QWW2VCZM.mjs";
21
21
  import "../chunk-R73ITKF5.mjs";
22
+ import "../chunk-W5DAWJ2F.mjs";
22
23
  import "../chunk-ZOXT4E27.mjs";
23
24
 
24
25
  // src/storage/useM2mAuth.tsx
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/storage/useM2mAuth.tsx"],"sourcesContent":["import React, {\n createContext,\n useCallback,\n useContext,\n useEffect,\n useMemo,\n useState,\n} from \"react\";\nimport { LoginInput, requestLogin } from \"./api/login\";\nimport { checkJwtExpiration } from \"./jwt\";\nimport { clearAuth } from \"./clearAuth\";\nimport { m2mAuthTokenApi } from \"./client\";\nimport { persistenceDatabase } from \"./persistenceDatabase\";\nimport { refreshAuth } from \"./refreshAuth\";\n\ninterface AuthenticationState {\n token: string;\n authenticated: boolean;\n login: (input: LoginInput) => Promise<{ token?: string; error?: Error }>;\n logout: () => void;\n updateToken: (token: string) => Promise<{ error?: Error }>;\n revalidating: boolean;\n isLoginRequired: boolean;\n}\n\nconst AuthenticationContext = createContext<AuthenticationState | undefined>(\n undefined,\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 !== null && checkJwtExpiration(authToken))) {\n void m2mAuthTokenApi.clear();\n setToken(\"\");\n } else {\n void m2mAuthTokenApi.set(authToken);\n setToken(authToken);\n }\n }, []);\n\n useEffect(() => {\n // tryCheckAuthは依存配列が空のuseCallbackで定義されているため、\n // 常に同じ関数参照を返し、このuseEffectは初回レンダリング後のみ実行される。\n // レンダリング後に一度認証状態を確認する意図的な動作のため、このルールを無効化。\n // eslint-disable-next-line react-hooks/set-state-in-effect\n void tryCheckAuth();\n }, [tryCheckAuth]);\n\n const login = useCallback(async (input: LoginInput) => {\n const { data: auth, error } = await requestLogin(input);\n if (auth) {\n const authToken = auth.accessToken;\n\n setToken(authToken);\n await m2mAuthTokenApi.set(authToken);\n await persistenceDatabase.set(\"auth\", auth);\n }\n return {\n error,\n token: auth ? auth.accessToken : undefined,\n };\n }, []);\n\n const [revalidating, setRevalidating] = useState(true);\n\n useEffect(() => {\n const callback = async () => {\n const authToken = await refreshAuth();\n if (authToken !== null) {\n setToken(authToken);\n }\n setRevalidating(false);\n };\n void callback();\n // Update auth every 3 hours\n const timer = setInterval(callback, 3 * 60 * 60 * 1000);\n return () => clearInterval(timer);\n }, []);\n\n const logout = useCallback(async () => {\n await clearAuth();\n window.location.reload();\n }, []);\n\n const updateToken = useCallback(async (token: string) => {\n if (checkJwtExpiration(token)) {\n return {\n error: new Error(\"M2MAuthToken is expired\"),\n };\n }\n await m2mAuthTokenApi.set(token);\n setToken(token);\n return { error: undefined };\n }, []);\n\n const state = useMemo(() => {\n return {\n login,\n logout,\n token,\n authenticated,\n updateToken,\n revalidating,\n isLoginRequired: authenticated === false && revalidating === false,\n } satisfies AuthenticationState;\n }, [authenticated, login, logout, revalidating, token, updateToken]);\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"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AA6GH;AA3FJ,IAAM,wBAAwB;AAAA,EAC5B;AACF;AAEO,IAAM,4BAA4B,CAAC;AAAA,EACxC;AACF,MAEM;AAjCN;AAkCE,QAAM,CAAC,OAAO,QAAQ,IAAI,UAAS,qBAAgB,SAAS,MAAzB,YAA8B,EAAE;AAEnE,QAAM,gBAAgB,QAAQ,MAAM,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC;AAEpD,QAAM,eAAe,YAAY,YAAY;AAC3C,UAAM,YAAY,MAAM,gBAAgB,IAAI;AAC5C,QAAI,EAAE,cAAc,QAAQ,mBAAmB,SAAS,IAAI;AAC1D,WAAK,gBAAgB,MAAM;AAC3B,eAAS,EAAE;AAAA,IACb,OAAO;AACL,WAAK,gBAAgB,IAAI,SAAS;AAClC,eAAS,SAAS;AAAA,IACpB;AAAA,EACF,GAAG,CAAC,CAAC;AAEL,YAAU,MAAM;AAKd,SAAK,aAAa;AAAA,EACpB,GAAG,CAAC,YAAY,CAAC;AAEjB,QAAM,QAAQ,YAAY,OAAO,UAAsB;AACrD,UAAM,EAAE,MAAM,MAAM,MAAM,IAAI,MAAM,aAAa,KAAK;AACtD,QAAI,MAAM;AACR,YAAM,YAAY,KAAK;AAEvB,eAAS,SAAS;AAClB,YAAM,gBAAgB,IAAI,SAAS;AACnC,YAAM,oBAAoB,IAAI,QAAQ,IAAI;AAAA,IAC5C;AACA,WAAO;AAAA,MACL;AAAA,MACA,OAAO,OAAO,KAAK,cAAc;AAAA,IACnC;AAAA,EACF,GAAG,CAAC,CAAC;AAEL,QAAM,CAAC,cAAc,eAAe,IAAI,SAAS,IAAI;AAErD,YAAU,MAAM;AACd,UAAM,WAAW,YAAY;AAC3B,YAAM,YAAY,MAAM,YAAY;AACpC,UAAI,cAAc,MAAM;AACtB,iBAAS,SAAS;AAAA,MACpB;AACA,sBAAgB,KAAK;AAAA,IACvB;AACA,SAAK,SAAS;AAEd,UAAM,QAAQ,YAAY,UAAU,IAAI,KAAK,KAAK,GAAI;AACtD,WAAO,MAAM,cAAc,KAAK;AAAA,EAClC,GAAG,CAAC,CAAC;AAEL,QAAM,SAAS,YAAY,YAAY;AACrC,UAAM,UAAU;AAChB,WAAO,SAAS,OAAO;AAAA,EACzB,GAAG,CAAC,CAAC;AAEL,QAAM,cAAc,YAAY,OAAOA,WAAkB;AACvD,QAAI,mBAAmBA,MAAK,GAAG;AAC7B,aAAO;AAAA,QACL,OAAO,IAAI,MAAM,yBAAyB;AAAA,MAC5C;AAAA,IACF;AACA,UAAM,gBAAgB,IAAIA,MAAK;AAC/B,aAASA,MAAK;AACd,WAAO,EAAE,OAAO,OAAU;AAAA,EAC5B,GAAG,CAAC,CAAC;AAEL,QAAM,QAAQ,QAAQ,MAAM;AAC1B,WAAO;AAAA,MACL;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,iBAAiB,kBAAkB,SAAS,iBAAiB;AAAA,IAC/D;AAAA,EACF,GAAG,CAAC,eAAe,OAAO,QAAQ,cAAc,OAAO,WAAW,CAAC;AACnE,SACE,oBAAC,sBAAsB,UAAtB,EAA+B,OAAO,OACpC,UACH;AAEJ;AAEO,IAAM,UAAU,MAAM;AAC3B,QAAM,MAAM,WAAW,qBAAqB;AAC5C,MAAI,CAAC,KAAK;AACR,UAAM,IAAI,MAAM,qCAAqC;AAAA,EACvD;AACA,SAAO;AACT;","names":["token"]}
1
+ {"version":3,"sources":["../../src/storage/useM2mAuth.tsx"],"sourcesContent":["import React, {\n createContext,\n useCallback,\n useContext,\n useEffect,\n useMemo,\n useState,\n} from \"react\";\nimport { LoginInput, requestLogin } from \"./api/login\";\nimport { checkJwtExpiration } from \"./jwt\";\nimport { clearAuth } from \"./clearAuth\";\nimport { m2mAuthTokenApi } from \"./client\";\nimport { persistenceDatabase } from \"./persistenceDatabase\";\nimport { refreshAuth } from \"./refreshAuth\";\n\ninterface AuthenticationState {\n token: string;\n authenticated: boolean;\n login: (input: LoginInput) => Promise<{ token?: string; error?: Error }>;\n logout: () => void;\n updateToken: (token: string) => Promise<{ error?: Error }>;\n revalidating: boolean;\n isLoginRequired: boolean;\n}\n\nconst AuthenticationContext = createContext<AuthenticationState | undefined>(\n undefined,\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 !== null && checkJwtExpiration(authToken))) {\n void m2mAuthTokenApi.clear();\n setToken(\"\");\n } else {\n void m2mAuthTokenApi.set(authToken);\n setToken(authToken);\n }\n }, []);\n\n useEffect(() => {\n // tryCheckAuthは依存配列が空のuseCallbackで定義されているため、\n // 常に同じ関数参照を返し、このuseEffectは初回レンダリング後のみ実行される。\n // レンダリング後に一度認証状態を確認する意図的な動作のため、このルールを無効化。\n // eslint-disable-next-line react-hooks/set-state-in-effect\n void tryCheckAuth();\n }, [tryCheckAuth]);\n\n const login = useCallback(async (input: LoginInput) => {\n const { data: auth, error } = await requestLogin(input);\n if (auth) {\n const authToken = auth.accessToken;\n\n setToken(authToken);\n await m2mAuthTokenApi.set(authToken);\n await persistenceDatabase.set(\"auth\", auth);\n }\n return {\n error,\n token: auth ? auth.accessToken : undefined,\n };\n }, []);\n\n const [revalidating, setRevalidating] = useState(true);\n\n useEffect(() => {\n const callback = async () => {\n const authToken = await refreshAuth();\n if (authToken !== null) {\n setToken(authToken);\n }\n setRevalidating(false);\n };\n void callback();\n // Update auth every 3 hours\n const timer = setInterval(callback, 3 * 60 * 60 * 1000);\n return () => clearInterval(timer);\n }, []);\n\n const logout = useCallback(async () => {\n await clearAuth();\n window.location.reload();\n }, []);\n\n const updateToken = useCallback(async (token: string) => {\n if (checkJwtExpiration(token)) {\n return {\n error: new Error(\"M2MAuthToken is expired\"),\n };\n }\n await m2mAuthTokenApi.set(token);\n setToken(token);\n return { error: undefined };\n }, []);\n\n const state = useMemo(() => {\n return {\n login,\n logout,\n token,\n authenticated,\n updateToken,\n revalidating,\n isLoginRequired: authenticated === false && revalidating === false,\n } satisfies AuthenticationState;\n }, [authenticated, login, logout, revalidating, token, updateToken]);\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"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AA6GH;AA3FJ,IAAM,wBAAwB;AAAA,EAC5B;AACF;AAEO,IAAM,4BAA4B,CAAC;AAAA,EACxC;AACF,MAEM;AAjCN;AAkCE,QAAM,CAAC,OAAO,QAAQ,IAAI,UAAS,qBAAgB,SAAS,MAAzB,YAA8B,EAAE;AAEnE,QAAM,gBAAgB,QAAQ,MAAM,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC;AAEpD,QAAM,eAAe,YAAY,YAAY;AAC3C,UAAM,YAAY,MAAM,gBAAgB,IAAI;AAC5C,QAAI,EAAE,cAAc,QAAQ,mBAAmB,SAAS,IAAI;AAC1D,WAAK,gBAAgB,MAAM;AAC3B,eAAS,EAAE;AAAA,IACb,OAAO;AACL,WAAK,gBAAgB,IAAI,SAAS;AAClC,eAAS,SAAS;AAAA,IACpB;AAAA,EACF,GAAG,CAAC,CAAC;AAEL,YAAU,MAAM;AAKd,SAAK,aAAa;AAAA,EACpB,GAAG,CAAC,YAAY,CAAC;AAEjB,QAAM,QAAQ,YAAY,OAAO,UAAsB;AACrD,UAAM,EAAE,MAAM,MAAM,MAAM,IAAI,MAAM,aAAa,KAAK;AACtD,QAAI,MAAM;AACR,YAAM,YAAY,KAAK;AAEvB,eAAS,SAAS;AAClB,YAAM,gBAAgB,IAAI,SAAS;AACnC,YAAM,oBAAoB,IAAI,QAAQ,IAAI;AAAA,IAC5C;AACA,WAAO;AAAA,MACL;AAAA,MACA,OAAO,OAAO,KAAK,cAAc;AAAA,IACnC;AAAA,EACF,GAAG,CAAC,CAAC;AAEL,QAAM,CAAC,cAAc,eAAe,IAAI,SAAS,IAAI;AAErD,YAAU,MAAM;AACd,UAAM,WAAW,YAAY;AAC3B,YAAM,YAAY,MAAM,YAAY;AACpC,UAAI,cAAc,MAAM;AACtB,iBAAS,SAAS;AAAA,MACpB;AACA,sBAAgB,KAAK;AAAA,IACvB;AACA,SAAK,SAAS;AAEd,UAAM,QAAQ,YAAY,UAAU,IAAI,KAAK,KAAK,GAAI;AACtD,WAAO,MAAM,cAAc,KAAK;AAAA,EAClC,GAAG,CAAC,CAAC;AAEL,QAAM,SAAS,YAAY,YAAY;AACrC,UAAM,UAAU;AAChB,WAAO,SAAS,OAAO;AAAA,EACzB,GAAG,CAAC,CAAC;AAEL,QAAM,cAAc,YAAY,OAAOA,WAAkB;AACvD,QAAI,mBAAmBA,MAAK,GAAG;AAC7B,aAAO;AAAA,QACL,OAAO,IAAI,MAAM,yBAAyB;AAAA,MAC5C;AAAA,IACF;AACA,UAAM,gBAAgB,IAAIA,MAAK;AAC/B,aAASA,MAAK;AACd,WAAO,EAAE,OAAO,OAAU;AAAA,EAC5B,GAAG,CAAC,CAAC;AAEL,QAAM,QAAQ,QAAQ,MAAM;AAC1B,WAAO;AAAA,MACL;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,iBAAiB,kBAAkB,SAAS,iBAAiB;AAAA,IAC/D;AAAA,EACF,GAAG,CAAC,eAAe,OAAO,QAAQ,cAAc,OAAO,WAAW,CAAC;AACnE,SACE,oBAAC,sBAAsB,UAAtB,EAA+B,OAAO,OACpC,UACH;AAEJ;AAEO,IAAM,UAAU,MAAM;AAC3B,QAAM,MAAM,WAAW,qBAAqB;AAC5C,MAAI,CAAC,KAAK;AACR,UAAM,IAAI,MAAM,qCAAqC;AAAA,EACvD;AACA,SAAO;AACT;","names":["token"]}
@@ -1,23 +0,0 @@
1
- // src/domains.ts
2
- var useDomains = () => {
3
- return globalThis.M2M_COMPONENTS_ENV === "production" ? {
4
- core: "https://core.m2msystems.cloud",
5
- sumyca: "https://manage.sumyca.com",
6
- cleaning: "https://manager-cleaning.m2msystems.cloud",
7
- users: "https://manage-users.m2msystems.cloud",
8
- checkin: "https://manage.checkin.m2msystems.cloud",
9
- systems: "https://m2msystems.cloud/"
10
- } : {
11
- core: "https://matsuri-tech-m2m-core-manager-front-dev.vercel.app",
12
- sumyca: "https://matsuri-tech-sumyca-manager-front-dev.vercel.app",
13
- cleaning: "https://matsuri-tech-m2m-cleaning-manager-front-dev.vercel.app",
14
- users: "https://matsuri-tech-m2m-users-manager-front-dev.vercel.app",
15
- checkin: "https://manage.dev.checkin.m2msystems.cloud",
16
- systems: "https://dev.m2msystems.cloud"
17
- };
18
- };
19
-
20
- export {
21
- useDomains
22
- };
23
- //# sourceMappingURL=chunk-BRSUJNLC.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/domains.ts"],"sourcesContent":["export const useDomains = () => {\n return globalThis.M2M_COMPONENTS_ENV === \"production\"\n ? {\n core: \"https://core.m2msystems.cloud\",\n sumyca: \"https://manage.sumyca.com\",\n cleaning: \"https://manager-cleaning.m2msystems.cloud\",\n users: \"https://manage-users.m2msystems.cloud\",\n checkin: \"https://manage.checkin.m2msystems.cloud\",\n systems: \"https://m2msystems.cloud/\",\n }\n : {\n core: \"https://matsuri-tech-m2m-core-manager-front-dev.vercel.app\",\n sumyca: \"https://matsuri-tech-sumyca-manager-front-dev.vercel.app\",\n cleaning:\n \"https://matsuri-tech-m2m-cleaning-manager-front-dev.vercel.app\",\n users: \"https://matsuri-tech-m2m-users-manager-front-dev.vercel.app\",\n checkin: \"https://manage.dev.checkin.m2msystems.cloud\",\n systems: \"https://dev.m2msystems.cloud\",\n };\n};\n"],"mappings":";AAAO,IAAM,aAAa,MAAM;AAC9B,SAAO,WAAW,uBAAuB,eACrC;AAAA,IACE,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,UAAU;AAAA,IACV,OAAO;AAAA,IACP,SAAS;AAAA,IACT,SAAS;AAAA,EACX,IACA;AAAA,IACE,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,UACE;AAAA,IACF,OAAO;AAAA,IACP,SAAS;AAAA,IACT,SAAS;AAAA,EACX;AACN;","names":[]}