@owlmeans/server-auth 0.1.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 (182) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +490 -0
  3. package/build/.gitkeep +0 -0
  4. package/build/actions/index.d.ts +2 -0
  5. package/build/actions/index.d.ts.map +1 -0
  6. package/build/actions/index.js +2 -0
  7. package/build/actions/index.js.map +1 -0
  8. package/build/actions/service.d.ts +4 -0
  9. package/build/actions/service.d.ts.map +1 -0
  10. package/build/actions/service.js +7 -0
  11. package/build/actions/service.js.map +1 -0
  12. package/build/consts.d.ts +5 -0
  13. package/build/consts.d.ts.map +1 -0
  14. package/build/consts.js +5 -0
  15. package/build/consts.js.map +1 -0
  16. package/build/index.d.ts +6 -0
  17. package/build/index.d.ts.map +1 -0
  18. package/build/index.js +5 -0
  19. package/build/index.js.map +1 -0
  20. package/build/manager/actions/index.d.ts +2 -0
  21. package/build/manager/actions/index.d.ts.map +1 -0
  22. package/build/manager/actions/index.js +2 -0
  23. package/build/manager/actions/index.js.map +1 -0
  24. package/build/manager/actions/manager.d.ts +6 -0
  25. package/build/manager/actions/manager.d.ts.map +1 -0
  26. package/build/manager/actions/manager.js +10 -0
  27. package/build/manager/actions/manager.js.map +1 -0
  28. package/build/manager/consts.d.ts +3 -0
  29. package/build/manager/consts.d.ts.map +1 -0
  30. package/build/manager/consts.js +3 -0
  31. package/build/manager/consts.js.map +1 -0
  32. package/build/manager/context.d.ts +3 -0
  33. package/build/manager/context.d.ts.map +1 -0
  34. package/build/manager/context.js +26 -0
  35. package/build/manager/context.js.map +1 -0
  36. package/build/manager/exports.d.ts +16 -0
  37. package/build/manager/exports.d.ts.map +1 -0
  38. package/build/manager/exports.js +13 -0
  39. package/build/manager/exports.js.map +1 -0
  40. package/build/manager/index.d.ts +11 -0
  41. package/build/manager/index.d.ts.map +1 -0
  42. package/build/manager/index.js +10 -0
  43. package/build/manager/index.js.map +1 -0
  44. package/build/manager/main.d.ts +3 -0
  45. package/build/manager/main.d.ts.map +1 -0
  46. package/build/manager/main.js +7 -0
  47. package/build/manager/main.js.map +1 -0
  48. package/build/manager/model.d.ts +3 -0
  49. package/build/manager/model.d.ts.map +1 -0
  50. package/build/manager/model.js +68 -0
  51. package/build/manager/model.js.map +1 -0
  52. package/build/manager/modules.d.ts +2 -0
  53. package/build/manager/modules.d.ts.map +1 -0
  54. package/build/manager/modules.js +21 -0
  55. package/build/manager/modules.js.map +1 -0
  56. package/build/manager/plugins/basic-ed25519.d.ts +4 -0
  57. package/build/manager/plugins/basic-ed25519.d.ts.map +1 -0
  58. package/build/manager/plugins/basic-ed25519.js +42 -0
  59. package/build/manager/plugins/basic-ed25519.js.map +1 -0
  60. package/build/manager/plugins/basic-rely.d.ts +4 -0
  61. package/build/manager/plugins/basic-rely.d.ts.map +1 -0
  62. package/build/manager/plugins/basic-rely.js +152 -0
  63. package/build/manager/plugins/basic-rely.js.map +1 -0
  64. package/build/manager/plugins/export.d.ts +6 -0
  65. package/build/manager/plugins/export.d.ts.map +1 -0
  66. package/build/manager/plugins/export.js +5 -0
  67. package/build/manager/plugins/export.js.map +1 -0
  68. package/build/manager/plugins/index.d.ts +4 -0
  69. package/build/manager/plugins/index.d.ts.map +1 -0
  70. package/build/manager/plugins/index.js +9 -0
  71. package/build/manager/plugins/index.js.map +1 -0
  72. package/build/manager/plugins/re-captcha.d.ts +4 -0
  73. package/build/manager/plugins/re-captcha.d.ts.map +1 -0
  74. package/build/manager/plugins/re-captcha.js +49 -0
  75. package/build/manager/plugins/re-captcha.js.map +1 -0
  76. package/build/manager/plugins/types.d.ts +25 -0
  77. package/build/manager/plugins/types.d.ts.map +1 -0
  78. package/build/manager/plugins/types.js +2 -0
  79. package/build/manager/plugins/types.js.map +1 -0
  80. package/build/manager/plugins/utils.d.ts +8 -0
  81. package/build/manager/plugins/utils.d.ts.map +1 -0
  82. package/build/manager/plugins/utils.js +18 -0
  83. package/build/manager/plugins/utils.js.map +1 -0
  84. package/build/manager/rely/flow.d.ts +5 -0
  85. package/build/manager/rely/flow.d.ts.map +1 -0
  86. package/build/manager/rely/flow.js +127 -0
  87. package/build/manager/rely/flow.js.map +1 -0
  88. package/build/manager/rely/index.d.ts +2 -0
  89. package/build/manager/rely/index.d.ts.map +1 -0
  90. package/build/manager/rely/index.js +2 -0
  91. package/build/manager/rely/index.js.map +1 -0
  92. package/build/manager/rely.d.ts +3 -0
  93. package/build/manager/rely.d.ts.map +1 -0
  94. package/build/manager/rely.js +63 -0
  95. package/build/manager/rely.js.map +1 -0
  96. package/build/manager/types.d.ts +33 -0
  97. package/build/manager/types.d.ts.map +1 -0
  98. package/build/manager/types.js +2 -0
  99. package/build/manager/types.js.map +1 -0
  100. package/build/manager/utils/index.d.ts +2 -0
  101. package/build/manager/utils/index.d.ts.map +1 -0
  102. package/build/manager/utils/index.js +2 -0
  103. package/build/manager/utils/index.js.map +1 -0
  104. package/build/manager/utils/trusted.d.ts +5 -0
  105. package/build/manager/utils/trusted.d.ts.map +1 -0
  106. package/build/manager/utils/trusted.js +11 -0
  107. package/build/manager/utils/trusted.js.map +1 -0
  108. package/build/model/index.d.ts +2 -0
  109. package/build/model/index.d.ts.map +1 -0
  110. package/build/model/index.js +2 -0
  111. package/build/model/index.js.map +1 -0
  112. package/build/model/rely/consumer.d.ts +3 -0
  113. package/build/model/rely/consumer.d.ts.map +1 -0
  114. package/build/model/rely/consumer.js +9 -0
  115. package/build/model/rely/consumer.js.map +1 -0
  116. package/build/model/rely/index.d.ts +5 -0
  117. package/build/model/rely/index.d.ts.map +1 -0
  118. package/build/model/rely/index.js +4 -0
  119. package/build/model/rely/index.js.map +1 -0
  120. package/build/model/rely/peer.d.ts +5 -0
  121. package/build/model/rely/peer.d.ts.map +1 -0
  122. package/build/model/rely/peer.js +36 -0
  123. package/build/model/rely/peer.js.map +1 -0
  124. package/build/model/rely/provider.d.ts +3 -0
  125. package/build/model/rely/provider.d.ts.map +1 -0
  126. package/build/model/rely/provider.js +6 -0
  127. package/build/model/rely/provider.js.map +1 -0
  128. package/build/model/rely/types.d.ts +8 -0
  129. package/build/model/rely/types.d.ts.map +1 -0
  130. package/build/model/rely/types.js +2 -0
  131. package/build/model/rely/types.js.map +1 -0
  132. package/build/modules.d.ts +3 -0
  133. package/build/modules.d.ts.map +1 -0
  134. package/build/modules.js +11 -0
  135. package/build/modules.js.map +1 -0
  136. package/build/service.d.ts +7 -0
  137. package/build/service.d.ts.map +1 -0
  138. package/build/service.js +90 -0
  139. package/build/service.js.map +1 -0
  140. package/build/types.d.ts +13 -0
  141. package/build/types.d.ts.map +1 -0
  142. package/build/types.js +2 -0
  143. package/build/types.js.map +1 -0
  144. package/package.json +76 -0
  145. package/src/actions/index.ts +2 -0
  146. package/src/actions/service.ts +16 -0
  147. package/src/consts.ts +8 -0
  148. package/src/index.ts +6 -0
  149. package/src/manager/README.md +507 -0
  150. package/src/manager/actions/index.ts +2 -0
  151. package/src/manager/actions/manager.ts +23 -0
  152. package/src/manager/consts.ts +4 -0
  153. package/src/manager/context.ts +33 -0
  154. package/src/manager/exports.ts +17 -0
  155. package/src/manager/index.ts +11 -0
  156. package/src/manager/main.ts +9 -0
  157. package/src/manager/model.ts +93 -0
  158. package/src/manager/modules.ts +29 -0
  159. package/src/manager/plugins/basic-ed25519.ts +56 -0
  160. package/src/manager/plugins/basic-rely.ts +167 -0
  161. package/src/manager/plugins/export.ts +6 -0
  162. package/src/manager/plugins/index.ts +13 -0
  163. package/src/manager/plugins/re-captcha.ts +62 -0
  164. package/src/manager/plugins/types.ts +27 -0
  165. package/src/manager/plugins/utils.ts +21 -0
  166. package/src/manager/rely/flow.ts +135 -0
  167. package/src/manager/rely/index.ts +2 -0
  168. package/src/manager/rely.ts +90 -0
  169. package/src/manager/types.ts +42 -0
  170. package/src/manager/utils/index.ts +2 -0
  171. package/src/manager/utils/trusted.ts +16 -0
  172. package/src/model/index.ts +2 -0
  173. package/src/model/rely/consumer.ts +11 -0
  174. package/src/model/rely/index.ts +5 -0
  175. package/src/model/rely/peer.ts +43 -0
  176. package/src/model/rely/provider.ts +9 -0
  177. package/src/model/rely/types.ts +8 -0
  178. package/src/modules.ts +17 -0
  179. package/src/service.ts +126 -0
  180. package/src/types.ts +15 -0
  181. package/tsconfig.json +15 -0
  182. package/tsconfig.tsbuildinfo +1 -0
@@ -0,0 +1,26 @@
1
+ import { makeServerContext } from '@owlmeans/server-context';
2
+ import { appendApiServer } from '@owlmeans/server-api';
3
+ import { appendApiClient } from '@owlmeans/api';
4
+ import { appendSocketService, createSocketMiddleware } from '@owlmeans/server-socket';
5
+ import { DEFAULT_RELY } from './consts.js';
6
+ import { createRelyService } from './rely.js';
7
+ import { AUTH_CACHE } from '../consts.js';
8
+ import { appendStaticResource } from '@owlmeans/static-resource';
9
+ export const makeContext = (cfg, customize = false) => {
10
+ const context = makeServerContext(cfg);
11
+ appendApiServer(context);
12
+ appendApiClient(context);
13
+ appendSocketService(context);
14
+ context.registerMiddleware(createSocketMiddleware());
15
+ // @TODO figure out rely service via config?
16
+ if (!customize && !context.hasService(DEFAULT_RELY)) {
17
+ context.registerService(createRelyService(DEFAULT_RELY));
18
+ }
19
+ appendStaticResource(context);
20
+ if (!customize && !context.hasResource(AUTH_CACHE)) {
21
+ appendStaticResource(context, AUTH_CACHE);
22
+ }
23
+ context.makeContext = (cfg => makeContext(cfg, customize));
24
+ return context;
25
+ };
26
+ //# sourceMappingURL=context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context.js","sourceRoot":"","sources":["../../src/manager/context.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAA;AAE5D,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAA;AACtD,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAA;AAC/C,OAAO,EAAE,mBAAmB,EAAE,sBAAsB,EAAE,MAAM,yBAAyB,CAAA;AACrF,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAC1C,OAAO,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAA;AAC7C,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AACzC,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAA;AAEhE,MAAM,CAAC,MAAM,WAAW,GAAG,CAA+C,GAAM,EAAE,YAAqB,KAAK,EAAK,EAAE;IACjH,MAAM,OAAO,GAAG,iBAAiB,CAAC,GAAG,CAAM,CAAA;IAE3C,eAAe,CAAO,OAAO,CAAC,CAAA;IAC9B,eAAe,CAAO,OAAO,CAAC,CAAA;IAC9B,mBAAmB,CAAO,OAAO,CAAC,CAAA;IAElC,OAAO,CAAC,kBAAkB,CAAC,sBAAsB,EAAE,CAAC,CAAA;IAEpD,4CAA4C;IAC5C,IAAI,CAAC,SAAS,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;QACpD,OAAO,CAAC,eAAe,CAAC,iBAAiB,CAAC,YAAY,CAAC,CAAC,CAAA;IAC1D,CAAC;IAED,oBAAoB,CAAO,OAAO,CAAC,CAAA;IACnC,IAAI,CAAC,SAAS,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,UAAU,CAAC,EAAE,CAAC;QACnD,oBAAoB,CAAO,OAAO,EAAE,UAAU,CAAC,CAAA;IACjD,CAAC;IAED,OAAO,CAAC,WAAW,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,WAAW,CAAC,GAAG,EAAE,SAAS,CAAC,CAA+B,CAAA;IAExF,OAAO,OAAY,CAAA;AACrB,CAAC,CAAA"}
@@ -0,0 +1,16 @@
1
+ export { config } from '@owlmeans/server-context';
2
+ export type { TrustedRecord } from '@owlmeans/auth-common';
3
+ export { addWebService } from '@owlmeans/client-config';
4
+ export { service, TRUSTED } from '@owlmeans/config';
5
+ export { AppType, assertContext } from '@owlmeans/context';
6
+ export { klusterize } from '@owlmeans/kluster';
7
+ export { elevate } from '@owlmeans/server-module';
8
+ export { elevate as celevate, stab } from '@owlmeans/client-module';
9
+ export type { RefedModuleHandler } from '@owlmeans/server-module';
10
+ export { handleIntermediate, handleBody, handleRequest, handleParams } from '@owlmeans/server-api';
11
+ export type { AbstractRequest, AbstractResponse } from '@owlmeans/module';
12
+ export { backend } from '@owlmeans/route';
13
+ export { AUTHEN, AUTHEN_AUTHEN, AUTHEN_INIT } from '@owlmeans/auth';
14
+ export { GUARD_ED25519, BED255_CASHE_RESOURCE } from '@owlmeans/auth-common';
15
+ export { filterObject } from '@owlmeans/resource';
16
+ //# sourceMappingURL=exports.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"exports.d.ts","sourceRoot":"","sources":["../../src/manager/exports.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,0BAA0B,CAAA;AACjD,YAAY,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAA;AAC1D,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAA;AACvD,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAA;AACnD,OAAO,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AAC1D,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAA;AAC9C,OAAO,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAA;AACjD,OAAO,EAAE,OAAO,IAAI,QAAQ,EAAE,IAAI,EAAE,MAAM,yBAAyB,CAAA;AACnE,YAAY,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAA;AACjE,OAAO,EAAE,kBAAkB,EAAE,UAAU,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAA;AAClG,YAAY,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAA;AACzE,OAAO,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAA;AAEzC,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAA;AACnE,OAAO,EAAE,aAAa,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAA;AAC5E,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA"}
@@ -0,0 +1,13 @@
1
+ export { config } from '@owlmeans/server-context';
2
+ export { addWebService } from '@owlmeans/client-config';
3
+ export { service, TRUSTED } from '@owlmeans/config';
4
+ export { AppType, assertContext } from '@owlmeans/context';
5
+ export { klusterize } from '@owlmeans/kluster';
6
+ export { elevate } from '@owlmeans/server-module';
7
+ export { elevate as celevate, stab } from '@owlmeans/client-module';
8
+ export { handleIntermediate, handleBody, handleRequest, handleParams } from '@owlmeans/server-api';
9
+ export { backend } from '@owlmeans/route';
10
+ export { AUTHEN, AUTHEN_AUTHEN, AUTHEN_INIT } from '@owlmeans/auth';
11
+ export { GUARD_ED25519, BED255_CASHE_RESOURCE } from '@owlmeans/auth-common';
12
+ export { filterObject } from '@owlmeans/resource';
13
+ //# sourceMappingURL=exports.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"exports.js","sourceRoot":"","sources":["../../src/manager/exports.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,0BAA0B,CAAA;AAEjD,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAA;AACvD,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAA;AACnD,OAAO,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AAC1D,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAA;AAC9C,OAAO,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAA;AACjD,OAAO,EAAE,OAAO,IAAI,QAAQ,EAAE,IAAI,EAAE,MAAM,yBAAyB,CAAA;AAEnE,OAAO,EAAE,kBAAkB,EAAE,UAAU,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAA;AAElG,OAAO,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAA;AAEzC,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAA;AACnE,OAAO,EAAE,aAAa,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAA;AAC5E,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA"}
@@ -0,0 +1,11 @@
1
+ export type * from './types.js';
2
+ export * from './modules.js';
3
+ export * from './exports.js';
4
+ export * from './context.js';
5
+ export * from './main.js';
6
+ export * from './rely.js';
7
+ export * from './consts.js';
8
+ export * from './rely/index.js';
9
+ export * from './actions/index.js';
10
+ export * from './plugins/index.js';
11
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/manager/index.ts"],"names":[],"mappings":"AAAA,mBAAmB,YAAY,CAAA;AAE/B,cAAc,cAAc,CAAA;AAC5B,cAAc,cAAc,CAAA;AAC5B,cAAc,cAAc,CAAA;AAC5B,cAAc,WAAW,CAAA;AACzB,cAAc,WAAW,CAAA;AACzB,cAAc,aAAa,CAAA;AAC3B,cAAc,iBAAiB,CAAA;AAC/B,cAAc,oBAAoB,CAAA;AAClC,cAAc,oBAAoB,CAAA"}
@@ -0,0 +1,10 @@
1
+ export * from './modules.js';
2
+ export * from './exports.js';
3
+ export * from './context.js';
4
+ export * from './main.js';
5
+ export * from './rely.js';
6
+ export * from './consts.js';
7
+ export * from './rely/index.js';
8
+ export * from './actions/index.js';
9
+ export * from './plugins/index.js';
10
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/manager/index.ts"],"names":[],"mappings":"AAEA,cAAc,cAAc,CAAA;AAC5B,cAAc,cAAc,CAAA;AAC5B,cAAc,cAAc,CAAA;AAC5B,cAAc,WAAW,CAAA;AACzB,cAAc,WAAW,CAAA;AACzB,cAAc,aAAa,CAAA;AAC3B,cAAc,iBAAiB,CAAA;AAC/B,cAAc,oBAAoB,CAAA;AAClC,cAAc,oBAAoB,CAAA"}
@@ -0,0 +1,3 @@
1
+ import type { AppContext, AppConfig } from './types.js';
2
+ export declare const main: <C extends AppConfig, T extends AppContext<C>>(ctx: T) => Promise<void>;
3
+ //# sourceMappingURL=main.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"main.d.ts","sourceRoot":"","sources":["../../src/manager/main.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,YAAY,CAAA;AAEvD,eAAO,MAAM,IAAI,GAAU,CAAC,SAAS,SAAS,EAAE,CAAC,SAAS,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,kBAI9E,CAAA"}
@@ -0,0 +1,7 @@
1
+ import { modules } from './modules.js';
2
+ export const main = async (ctx) => {
3
+ ctx.registerModules(modules);
4
+ await ctx.configure().init();
5
+ await ctx.getApiServer().listen();
6
+ };
7
+ //# sourceMappingURL=main.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"main.js","sourceRoot":"","sources":["../../src/manager/main.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AAGtC,MAAM,CAAC,MAAM,IAAI,GAAG,KAAK,EAAgD,GAAM,EAAE,EAAE;IACjF,GAAG,CAAC,eAAe,CAAC,OAAO,CAAC,CAAA;IAC5B,MAAM,GAAG,CAAC,SAAS,EAAE,CAAC,IAAI,EAAE,CAAA;IAC5B,MAAM,GAAG,CAAC,YAAY,EAAE,CAAC,MAAM,EAAE,CAAA;AACnC,CAAC,CAAA"}
@@ -0,0 +1,3 @@
1
+ import type { AuthModel, AppConfig, AppContext } from './types.js';
2
+ export declare const makeAuthModel: (context: AppContext<AppConfig>) => AuthModel;
3
+ //# sourceMappingURL=model.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"model.d.ts","sourceRoot":"","sources":["../../src/manager/model.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;AAgBlE,eAAO,MAAM,aAAa,YAAa,UAAU,CAAC,SAAS,CAAC,KAAG,SA4E9D,CAAA"}
@@ -0,0 +1,68 @@
1
+ import { AuthenFailed, AuthenPayloadError } from '@owlmeans/auth';
2
+ import { getPlugin } from './plugins/utils.js';
3
+ import { AUTH_CACHE, AUTHEN_TIMEFRAME } from '../consts.js';
4
+ import { EnvelopeKind, makeEnvelopeModel } from '@owlmeans/basic-envelope';
5
+ import { createRelyFlow } from './rely/flow.js';
6
+ import { trusted } from './utils/trusted.js';
7
+ export const makeAuthModel = (context) => {
8
+ const cache = (context) => context.resource(AUTH_CACHE);
9
+ const model = {
10
+ init: async (request) => {
11
+ const plugin = getPlugin(request.type, context);
12
+ const response = await plugin.init(request);
13
+ const envelope = makeEnvelopeModel(plugin.type);
14
+ /**
15
+ * @TODO It looks like we don't validate sourced challenge by any means
16
+ * So we need to:
17
+ * 1. Remove it cause we process it as a separate property anyway
18
+ * 2. Fix it because it looks like this separate property isn't validated
19
+ */
20
+ const challengeToken = request.source != null
21
+ ? `${request.source}:${response.challenge}` : response.challenge;
22
+ const [, keyPair] = await trusted(context);
23
+ const challenge = await envelope.send(challengeToken, AUTHEN_TIMEFRAME).sign(keyPair, EnvelopeKind.Wrap);
24
+ return { challenge };
25
+ },
26
+ authenticate: async (credential) => {
27
+ const [trustedUser, keyPair] = await trusted(context);
28
+ const envelope = makeEnvelopeModel(credential.challenge, EnvelopeKind.Wrap);
29
+ if (!await envelope.verify(keyPair)) {
30
+ throw new AuthenFailed('challenge');
31
+ }
32
+ const msg = envelope.message(true);
33
+ try {
34
+ await cache(context).create({ id: msg }, { ttl: (envelope.envelope.ttl ?? AUTHEN_TIMEFRAME) / 1000 });
35
+ }
36
+ catch (e) {
37
+ const error = new AuthenFailed('challenge');
38
+ if (e instanceof Error) {
39
+ error.oiriginalStack = `${e} : ${e.stack}`;
40
+ }
41
+ throw error;
42
+ }
43
+ if (credential.userId == null) {
44
+ throw new AuthenPayloadError('userId');
45
+ }
46
+ const plugin = getPlugin(envelope.type(), context);
47
+ // @TODO this token PROBABLY needs to be registered somewhere and rechecked
48
+ // from time to time to make sure that the session is not deleted
49
+ // or permission hasn't changed.
50
+ // Alternative solution is to have permissions cached and cleaned
51
+ // when some broadcast message is sent from authentication system.
52
+ const challenge = credential.challenge;
53
+ const { token } = await plugin.authenticate(Object.assign(credential, { challenge: msg }));
54
+ credential.challenge = token === '' ? challenge : token;
55
+ credential.credential = trustedUser.id;
56
+ return {
57
+ token: await makeEnvelopeModel(credential.type)
58
+ .send(credential, AUTHEN_TIMEFRAME)
59
+ .sign(keyPair, EnvelopeKind.Token)
60
+ };
61
+ },
62
+ rely: async (conn, auth) => {
63
+ conn.authenticate = createRelyFlow(context, conn, auth);
64
+ }
65
+ };
66
+ return model;
67
+ };
68
+ //# sourceMappingURL=model.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"model.js","sourceRoot":"","sources":["../../src/manager/model.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare const modules: import("@owlmeans/module").CommonModule[];
2
+ //# sourceMappingURL=modules.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"modules.d.ts","sourceRoot":"","sources":["../../src/manager/modules.ts"],"names":[],"mappings":"AAkBA,eAAO,MAAM,OAAO,2CAAO,CAAA"}
@@ -0,0 +1,21 @@
1
+ import { AUTHEN, AUTHEN_AUTHEN, AUTHEN_INIT, AUTHEN_RELY, MOD_RECAPTCHA } from '@owlmeans/auth';
2
+ import { modules as list } from '@owlmeans/auth-common';
3
+ import { modules as apiConfig } from '@owlmeans/api-config-server';
4
+ import { elevate, guard } from '@owlmeans/server-module';
5
+ import * as actions from './actions/index.js';
6
+ import { module } from '@owlmeans/client-module';
7
+ import { backend, route, RouteMethod } from '@owlmeans/route';
8
+ import { handleIntermediate } from '@owlmeans/server-api';
9
+ import { DEFAULT_RELY } from './consts.js';
10
+ elevate(list, AUTHEN, handleIntermediate(async (_, context) => await context.updateContext()), { intermediate: true });
11
+ elevate(list, AUTHEN_INIT, actions.authenticationInit);
12
+ elevate(list, AUTHEN_AUTHEN, actions.authenticate);
13
+ elevate(list, AUTHEN_RELY, actions.rely, guard(DEFAULT_RELY));
14
+ export const modules = list;
15
+ list.push(...apiConfig);
16
+ list.push(module(route(MOD_RECAPTCHA, '/api/siteverify', backend({
17
+ host: 'https://www.google.com',
18
+ base: 'recaptcha',
19
+ secure: true,
20
+ }, RouteMethod.POST))));
21
+ //# sourceMappingURL=modules.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"modules.js","sourceRoot":"","sources":["../../src/manager/modules.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,WAAW,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAA;AAC/F,OAAO,EAAE,OAAO,IAAI,IAAI,EAAE,MAAM,uBAAuB,CAAA;AACvD,OAAO,EAAE,OAAO,IAAI,SAAS,EAAE,MAAM,6BAA6B,CAAA;AAClE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,yBAAyB,CAAA;AACxD,OAAO,KAAK,OAAO,MAAM,oBAAoB,CAAA;AAC7C,OAAO,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAA;AAChD,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAA;AAC7D,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAA;AACzD,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAE1C,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,kBAAkB,CACtC,KAAK,EAAE,CAAC,EAAE,OAAO,EAAE,EAAE,CAAC,MAAM,OAAO,CAAC,aAAa,EAAoB,CACtE,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC,CAAA;AAC1B,OAAO,CAAC,IAAI,EAAE,WAAW,EAAE,OAAO,CAAC,kBAAkB,CAAC,CAAA;AACtD,OAAO,CAAC,IAAI,EAAE,aAAa,EAAE,OAAO,CAAC,YAAY,CAAC,CAAA;AAClD,OAAO,CAAC,IAAI,EAAE,WAAW,EAAE,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,YAAY,CAAC,CAAC,CAAA;AAE7D,MAAM,CAAC,MAAM,OAAO,GAAG,IAAI,CAAA;AAC3B,IAAI,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC,CAAA;AACvB,IAAI,CAAC,IAAI,CACP,MAAM,CACJ,KAAK,CAAC,aAAa,EAAE,iBAAiB,EAAE,OAAO,CAAC;IAC9C,IAAI,EAAE,wBAAwB;IAC9B,IAAI,EAAE,WAAW;IACjB,MAAM,EAAE,IAAI;CACb,EAAE,WAAW,CAAC,IAAI,CAAC,CAAC,CACtB,CACF,CAAA"}
@@ -0,0 +1,4 @@
1
+ import type { AuthPlugin } from './types.js';
2
+ import type { AppConfig, AppContext } from '../types.js';
3
+ export declare const basicEd25519: <C extends AppConfig, T extends AppContext<C>>(context: T) => AuthPlugin;
4
+ //# sourceMappingURL=basic-ed25519.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"basic-ed25519.d.ts","sourceRoot":"","sources":["../../../src/manager/plugins/basic-ed25519.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;AAK5C,OAAO,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AAIxD,eAAO,MAAM,YAAY,GAAI,CAAC,SAAS,SAAS,EAAE,CAAC,SAAS,UAAU,CAAC,CAAC,CAAC,WAAW,CAAC,KAAG,UA6CvF,CAAA"}
@@ -0,0 +1,42 @@
1
+ import { AuthenticationType, AuthenFailed, ALL_SCOPES, AuthRole } from '@owlmeans/auth';
2
+ import { assertType } from './utils.js';
3
+ import { randomBytes } from '@noble/hashes/utils';
4
+ import { base64 } from '@scure/base';
5
+ import { fromPubKey } from '@owlmeans/basic-keys';
6
+ import { TRUSTED } from '@owlmeans/config';
7
+ export const basicEd25519 = (context) => {
8
+ const plugin = {
9
+ type: AuthenticationType.BasicEd25519,
10
+ init: async (request) => {
11
+ assertType(request.type, plugin);
12
+ const challenge = base64.encode(randomBytes(32));
13
+ return { challenge };
14
+ },
15
+ authenticate: async (credential) => {
16
+ /**
17
+ * @TODO We need to find users in some db not just in static
18
+ */
19
+ const systemUser = await context.getConfigResource(TRUSTED)
20
+ .load(credential.userId);
21
+ if (systemUser == null) {
22
+ throw new AuthenFailed();
23
+ }
24
+ if (systemUser.credential == null) {
25
+ throw new SyntaxError('System user missconfigured');
26
+ }
27
+ const key = fromPubKey(systemUser.credential);
28
+ if (!await key.verify(credential.challenge, credential.credential)) {
29
+ throw new AuthenFailed(`challenge:${plugin.type}`);
30
+ }
31
+ const token = base64.encode(randomBytes(32));
32
+ // @TODO we need to do something with scopes - it's not secure
33
+ credential.scopes = [ALL_SCOPES];
34
+ credential.role = AuthRole.Superuser;
35
+ credential.challenge = token;
36
+ credential.type = AuthenticationType.OneTimeToken;
37
+ return { token };
38
+ }
39
+ };
40
+ return plugin;
41
+ };
42
+ //# sourceMappingURL=basic-ed25519.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"basic-ed25519.js","sourceRoot":"","sources":["../../../src/manager/plugins/basic-ed25519.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,YAAY,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AAEvF,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;AACvC,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAA;AACjD,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AACpC,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAA;AAEjD,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAA;AAG1C,MAAM,CAAC,MAAM,YAAY,GAAG,CAA+C,OAAU,EAAc,EAAE;IACnG,MAAM,MAAM,GAAe;QACzB,IAAI,EAAE,kBAAkB,CAAC,YAAY;QACrC,IAAI,EAAE,KAAK,EAAC,OAAO,EAAC,EAAE;YACpB,UAAU,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,CAAA;YAEhC,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,CAAA;YAEhD,OAAO,EAAE,SAAS,EAAE,CAAA;QACtB,CAAC;QAED,YAAY,EAAE,KAAK,EAAC,UAAU,EAAC,EAAE;YAC/B;;eAEG;YACH,MAAM,UAAU,GAAG,MAAM,OAAO,CAAC,iBAAiB,CAAC,OAAO,CAAC;iBACxD,IAAI,CAAgB,UAAU,CAAC,MAAM,CAAC,CAAA;YAEzC,IAAI,UAAU,IAAI,IAAI,EAAE,CAAC;gBACvB,MAAM,IAAI,YAAY,EAAE,CAAA;YAC1B,CAAC;YAED,IAAI,UAAU,CAAC,UAAU,IAAI,IAAI,EAAE,CAAC;gBAClC,MAAM,IAAI,WAAW,CAAC,4BAA4B,CAAC,CAAA;YACrD,CAAC;YAED,MAAM,GAAG,GAAG,UAAU,CAAC,UAAU,CAAC,UAAU,CAAC,CAAA;YAE7C,IAAI,CAAC,MAAM,GAAG,CAAC,MAAM,CAAC,UAAU,CAAC,SAAS,EAAE,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;gBACnE,MAAM,IAAI,YAAY,CAAC,aAAa,MAAM,CAAC,IAAI,EAAE,CAAC,CAAA;YACpD,CAAC;YAED,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,CAAA;YAE5C,8DAA8D;YAC9D,UAAU,CAAC,MAAM,GAAG,CAAC,UAAU,CAAC,CAAA;YAChC,UAAU,CAAC,IAAI,GAAG,QAAQ,CAAC,SAAS,CAAA;YACpC,UAAU,CAAC,SAAS,GAAG,KAAK,CAAA;YAC5B,UAAU,CAAC,IAAI,GAAG,kBAAkB,CAAC,YAAY,CAAA;YAEjD,OAAO,EAAE,KAAK,EAAE,CAAA;QAClB,CAAC;KACF,CAAA;IAED,OAAO,MAAM,CAAA;AACf,CAAC,CAAA"}
@@ -0,0 +1,4 @@
1
+ import type { AppContext } from '../types.js';
2
+ import type { AuthPlugin } from './types.js';
3
+ export declare const basicRely: (context: AppContext, type?: string) => AuthPlugin;
4
+ //# sourceMappingURL=basic-rely.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"basic-rely.d.ts","sourceRoot":"","sources":["../../../src/manager/plugins/basic-rely.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAqC,MAAM,aAAa,CAAA;AAChF,OAAO,KAAK,EAAE,UAAU,EAAiC,MAAM,YAAY,CAAA;AAS3E,eAAO,MAAM,SAAS,YAAa,UAAU,SAAS,MAAM,KAAG,UA0J9D,CAAA"}
@@ -0,0 +1,152 @@
1
+ import { AuthenFailed, AuthenPayloadError, AuthenticationType, AuthManagerError, AuthorizationError } from '@owlmeans/auth';
2
+ import { makeConsumerRely, makeProviderRely } from '../../model/index.js';
3
+ import { trusted } from '../utils/trusted.js';
4
+ import { EnvelopeKind, makeEnvelopeModel } from '@owlmeans/basic-envelope';
5
+ import { AUTH_CACHE } from '../../consts.js';
6
+ import { ResourceError } from '@owlmeans/resource';
7
+ import { RELY_CALL_TIMEOUT, RELY_PIN_PERFIX, RELY_TOKEN_PREFIX } from '@owlmeans/auth-common';
8
+ const _subscriptions = {};
9
+ export const basicRely = (context, type) => {
10
+ const plugin = {
11
+ type: type ?? AuthenticationType.RelyHandshake,
12
+ // This method is used by consumer and by provider (wallet)
13
+ // to initialize shared authentication process.
14
+ // The idea is that both subscribe to wait for a handshake value
15
+ // from the peer, that in fact is a subscription to a redis message tunnel.
16
+ init: async (request) => {
17
+ const [, keyPair] = await trusted(context);
18
+ const tunnel = context.resource(AUTH_CACHE);
19
+ let relyMsg;
20
+ do {
21
+ try {
22
+ const rely = request.auth == null ? makeConsumerRely() : makeProviderRely();
23
+ relyMsg = rely.message();
24
+ const pin = relyMsg.pin != null ? `${RELY_PIN_PERFIX}${relyMsg.pin}` : null;
25
+ const token = relyMsg.token != null ? `${RELY_TOKEN_PREFIX}${relyMsg.token}` : null;
26
+ const response = { challenge: await rely.sign(keyPair, EnvelopeKind.Wrap) };
27
+ if (pin != null) {
28
+ await tunnel.create({ ...response, id: pin }, { ttl: RELY_CALL_TIMEOUT });
29
+ }
30
+ if (token != null) {
31
+ await tunnel.create({ ...response, id: token }, { ttl: RELY_CALL_TIMEOUT });
32
+ }
33
+ if (request.provideRely != null) {
34
+ await Promise.all([pin, token].filter(key => key != null).map(async (key) => {
35
+ _subscriptions[key] = await tunnel.subscribe(async (value) => {
36
+ if (value.challenge != null) {
37
+ const rely = makeEnvelopeModel(value.challenge, EnvelopeKind.Wrap);
38
+ if (await rely.verify(keyPair)) {
39
+ [pin, token].filter(key => key != null).forEach(key => {
40
+ _subscriptions[key]?.();
41
+ if (_subscriptions[key] != null) {
42
+ delete _subscriptions[key];
43
+ }
44
+ });
45
+ await request.provideRely?.(rely.message(), relyMsg, true);
46
+ }
47
+ }
48
+ }, { /*ttl: RELY_CALL_TIMEOUT,*/ key, once: true });
49
+ // @TODO they need to be killed on close - but actually live a little bit longer
50
+ // then timeout for them is ok
51
+ setTimeout(() => {
52
+ if (_subscriptions[key] != null) {
53
+ try {
54
+ void _subscriptions[key]();
55
+ delete _subscriptions[key];
56
+ }
57
+ finally {
58
+ void request.conn?.close();
59
+ }
60
+ }
61
+ }, RELY_CALL_TIMEOUT * 1000);
62
+ }));
63
+ }
64
+ return response;
65
+ }
66
+ catch (e) {
67
+ if (e instanceof ResourceError) {
68
+ console.error('COLISION ON TRY TO CREATE RELY PIN\TOKEN...', e);
69
+ }
70
+ else {
71
+ throw e;
72
+ }
73
+ }
74
+ await new Promise(resolve => setTimeout(resolve, 500));
75
+ } while (true);
76
+ },
77
+ // This part of flow is entered by the party that is active (provides peer's code - token or pin)
78
+ authenticate: async (credential) => {
79
+ const [, keyPair] = await trusted(context);
80
+ const tunnel = context.resource(AUTH_CACHE);
81
+ // 1. Just get a peer connection based on provided credential
82
+ // 2. Provision it with provided own data
83
+ // 3. Delete own rely connection seeds
84
+ let rely;
85
+ try {
86
+ let peer;
87
+ if (credential.credential.startsWith(RELY_PIN_PERFIX)) {
88
+ const key = credential.credential.substring(RELY_PIN_PERFIX.length);
89
+ if (key.length > 12) {
90
+ throw new AuthenPayloadError('pin');
91
+ }
92
+ peer = await tunnel.get(credential.credential);
93
+ }
94
+ else if (credential.credential.startsWith(RELY_TOKEN_PREFIX)) {
95
+ const key = credential.credential.substring(RELY_TOKEN_PREFIX.length);
96
+ if (key.length > 16) {
97
+ throw new AuthenPayloadError('token');
98
+ }
99
+ peer = await tunnel.get(credential.credential);
100
+ }
101
+ else {
102
+ throw new AuthenPayloadError('credential');
103
+ }
104
+ const envelop = makeEnvelopeModel(peer.challenge, EnvelopeKind.Wrap);
105
+ if (!envelop.verify(keyPair)) {
106
+ throw new AuthManagerError();
107
+ }
108
+ rely = envelop.message();
109
+ }
110
+ catch (e) {
111
+ if (e instanceof ResourceError) {
112
+ console.error(e);
113
+ throw new AuthorizationError('rely');
114
+ }
115
+ else {
116
+ throw e;
117
+ }
118
+ }
119
+ const myChallenge = makeEnvelopeModel(credential.challenge, EnvelopeKind.Wrap);
120
+ if (!myChallenge.verify(keyPair)) {
121
+ throw new AuthenFailed();
122
+ }
123
+ await tunnel.update({ id: credential.credential, challenge: myChallenge.wrap() });
124
+ const myRely = myChallenge.message();
125
+ [
126
+ myRely.pin != null ? `${RELY_PIN_PERFIX}${myRely.pin}` : null,
127
+ myRely.token != null ? `${RELY_TOKEN_PREFIX}${myRely.token}` : null
128
+ ].filter(key => key != null).forEach(key => {
129
+ if (_subscriptions[key] != null) {
130
+ void _subscriptions[key]();
131
+ delete _subscriptions[key];
132
+ }
133
+ });
134
+ const token = makeEnvelopeModel(AuthenticationType.RelyHandshake);
135
+ token.send({ source: myRely, rely });
136
+ credential.type = AuthenticationType.RelyHandshake;
137
+ // @TODO think about it: we create a mixed object here that is credentials and authentication
138
+ // in the same time. Actually it's a bit dirty. And it means that auth service at the end of the
139
+ // day can produce both (authentication token and authentication token "ticket").
140
+ // Why we do it this way here: cause the consumer of authentication is the auth service itself
141
+ // and there is no need to "exchange" the token (what we do when we come via url redirect to another service
142
+ // with the one-time auth token potentially exposed as a result).
143
+ const _auth = credential;
144
+ _auth.createdAt = new Date();
145
+ _auth.token = token.tokenize();
146
+ _auth.isUser = true;
147
+ return { token: _auth.token };
148
+ }
149
+ };
150
+ return plugin;
151
+ };
152
+ //# sourceMappingURL=basic-rely.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"basic-rely.js","sourceRoot":"","sources":["../../../src/manager/plugins/basic-rely.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAA;AAI3H,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAA;AACzE,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAC7C,OAAO,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAA;AAC1E,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;AAClD,OAAO,EAAE,iBAAiB,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAA;AAE7F,MAAM,cAAc,GAAqC,EAAE,CAAA;AAC3D,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,OAAmB,EAAE,IAAa,EAAc,EAAE;IAC1E,MAAM,MAAM,GAAe;QACzB,IAAI,EAAE,IAAI,IAAI,kBAAkB,CAAC,aAAa;QAE9C,2DAA2D;QAC3D,+CAA+C;QAC/C,gEAAgE;QAChE,6EAA6E;QAC7E,IAAI,EAAE,KAAK,EAAE,OAA6B,EAA8B,EAAE;YACxE,MAAM,CAAC,EAAE,OAAO,CAAC,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,CAAA;YAC1C,MAAM,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAoB,UAAU,CAAC,CAAA;YAC9D,IAAI,OAAkB,CAAA;YACtB,GAAG,CAAC;gBACF,IAAI,CAAC;oBACH,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,IAAI,IAAI,CAAC,CAAC,CAAC,gBAAgB,EAAE,CAAC,CAAC,CAAC,gBAAgB,EAAE,CAAA;oBAE3E,OAAO,GAAG,IAAI,CAAC,OAAO,EAAE,CAAA;oBACxB,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC,GAAG,eAAe,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,IAAI,CAAA;oBAC3E,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,IAAI,IAAI,CAAC,CAAC,CAAC,GAAG,iBAAiB,GAAG,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,CAAA;oBAEnF,MAAM,QAAQ,GAAG,EAAE,SAAS,EAAE,MAAM,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,YAAY,CAAC,IAAI,CAAC,EAAE,CAAA;oBAE3E,IAAI,GAAG,IAAI,IAAI,EAAE,CAAC;wBAChB,MAAM,MAAM,CAAC,MAAM,CAAC,EAAE,GAAG,QAAQ,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,iBAAiB,EAAE,CAAC,CAAA;oBAC3E,CAAC;oBACD,IAAI,KAAK,IAAI,IAAI,EAAE,CAAC;wBAClB,MAAM,MAAM,CAAC,MAAM,CAAC,EAAE,GAAG,QAAQ,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,GAAG,EAAE,iBAAiB,EAAE,CAAC,CAAA;oBAC7E,CAAC;oBAED,IAAI,OAAO,CAAC,WAAW,IAAI,IAAI,EAAE,CAAC;wBAChC,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC,KAAK,EAAC,GAAG,EAAC,EAAE;4BACxE,cAAc,CAAC,GAAG,CAAC,GAAG,MAAM,MAAM,CAAC,SAAS,CAAC,KAAK,EAAC,KAAK,EAAC,EAAE;gCACzD,IAAI,KAAK,CAAC,SAAS,IAAI,IAAI,EAAE,CAAC;oCAC5B,MAAM,IAAI,GAAG,iBAAiB,CAAY,KAAK,CAAC,SAAS,EAAE,YAAY,CAAC,IAAI,CAAC,CAAA;oCAC7E,IAAI,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC;wCAC/B,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,IAAI,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;4CACpD,cAAc,CAAC,GAAG,CAAC,EAAE,EAAE,CAAA;4CACvB,IAAI,cAAc,CAAC,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC;gDAChC,OAAO,cAAc,CAAC,GAAG,CAAC,CAAA;4CAC5B,CAAC;wCACH,CAAC,CAAC,CAAA;wCACF,MAAM,OAAO,CAAC,WAAW,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC,CAAA;oCAC5D,CAAC;gCACH,CAAC;4BACH,CAAC,EAAE,EAAE,2BAA2B,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAA;4BAEnD,iFAAiF;4BACjF,8BAA8B;4BAC9B,UAAU,CAAC,GAAG,EAAE;gCACd,IAAI,cAAc,CAAC,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC;oCAChC,IAAI,CAAC;wCACH,KAAK,cAAc,CAAC,GAAG,CAAC,EAAE,CAAA;wCAC1B,OAAO,cAAc,CAAC,GAAG,CAAC,CAAA;oCAC5B,CAAC;4CAAS,CAAC;wCACT,KAAK,OAAO,CAAC,IAAI,EAAE,KAAK,EAAE,CAAA;oCAC5B,CAAC;gCACH,CAAC;4BACH,CAAC,EAAE,iBAAiB,GAAG,IAAI,CAAC,CAAA;wBAC9B,CAAC,CAAC,CAAC,CAAA;oBACL,CAAC;oBAED,OAAO,QAAQ,CAAA;gBACjB,CAAC;gBAAC,OAAO,CAAC,EAAE,CAAC;oBACX,IAAI,CAAC,YAAY,aAAa,EAAE,CAAC;wBAC/B,OAAO,CAAC,KAAK,CAAC,6CAA6C,EAAE,CAAC,CAAC,CAAA;oBACjE,CAAC;yBAAM,CAAC;wBACN,MAAM,CAAC,CAAA;oBACT,CAAC;gBACH,CAAC;gBACD,MAAM,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,CAAA;YACxD,CAAC,QAAQ,IAAI,EAAC;QAChB,CAAC;QAED,iGAAiG;QACjG,YAAY,EAAE,KAAK,EAAC,UAAU,EAAC,EAAE;YAC/B,MAAM,CAAC,EAAE,OAAO,CAAC,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,CAAA;YAC1C,MAAM,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAoB,UAAU,CAAC,CAAA;YAE9D,6DAA6D;YAC7D,yCAAyC;YACzC,sCAAsC;YAEtC,IAAI,IAAe,CAAA;YACnB,IAAI,CAAC;gBACH,IAAI,IAAgB,CAAA;gBACpB,IAAI,UAAU,CAAC,UAAU,CAAC,UAAU,CAAC,eAAe,CAAC,EAAE,CAAC;oBACtD,MAAM,GAAG,GAAG,UAAU,CAAC,UAAU,CAAC,SAAS,CAAC,eAAe,CAAC,MAAM,CAAC,CAAA;oBACnE,IAAI,GAAG,CAAC,MAAM,GAAG,EAAE,EAAE,CAAC;wBACpB,MAAM,IAAI,kBAAkB,CAAC,KAAK,CAAC,CAAA;oBACrC,CAAC;oBACD,IAAI,GAAG,MAAM,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC,UAAU,CAAC,CAAA;gBAChD,CAAC;qBAAM,IAAI,UAAU,CAAC,UAAU,CAAC,UAAU,CAAC,iBAAiB,CAAC,EAAE,CAAC;oBAC/D,MAAM,GAAG,GAAG,UAAU,CAAC,UAAU,CAAC,SAAS,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAA;oBACrE,IAAI,GAAG,CAAC,MAAM,GAAG,EAAE,EAAE,CAAC;wBACpB,MAAM,IAAI,kBAAkB,CAAC,OAAO,CAAC,CAAA;oBACvC,CAAC;oBACD,IAAI,GAAG,MAAM,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC,UAAU,CAAC,CAAA;gBAChD,CAAC;qBAAM,CAAC;oBACN,MAAM,IAAI,kBAAkB,CAAC,YAAY,CAAC,CAAA;gBAC5C,CAAC;gBACD,MAAM,OAAO,GAAG,iBAAiB,CAAY,IAAI,CAAC,SAAS,EAAE,YAAY,CAAC,IAAI,CAAC,CAAA;gBAC/E,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC;oBAC7B,MAAM,IAAI,gBAAgB,EAAE,CAAA;gBAC9B,CAAC;gBACD,IAAI,GAAG,OAAO,CAAC,OAAO,EAAE,CAAA;YAC1B,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACX,IAAI,CAAC,YAAY,aAAa,EAAE,CAAC;oBAC/B,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;oBAChB,MAAM,IAAI,kBAAkB,CAAC,MAAM,CAAC,CAAA;gBACtC,CAAC;qBAAM,CAAC;oBACN,MAAM,CAAC,CAAA;gBACT,CAAC;YACH,CAAC;YAED,MAAM,WAAW,GAAG,iBAAiB,CAAY,UAAU,CAAC,SAAS,EAAE,YAAY,CAAC,IAAI,CAAC,CAAA;YACzF,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC;gBACjC,MAAM,IAAI,YAAY,EAAE,CAAA;YAC1B,CAAC;YAED,MAAM,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,UAAU,CAAC,UAAU,EAAE,SAAS,EAAE,WAAW,CAAC,IAAI,EAAE,EAAE,CAAC,CAAA;YAEjF,MAAM,MAAM,GAAG,WAAW,CAAC,OAAO,EAAE,CAAC;YAErC;gBACE,MAAM,CAAC,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC,GAAG,eAAe,GAAG,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,IAAI;gBAC7D,MAAM,CAAC,KAAK,IAAI,IAAI,CAAC,CAAC,CAAC,GAAG,iBAAiB,GAAG,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI;aACpE,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,IAAI,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;gBACzC,IAAI,cAAc,CAAC,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC;oBAChC,KAAK,cAAc,CAAC,GAAG,CAAC,EAAE,CAAA;oBAC1B,OAAO,cAAc,CAAC,GAAG,CAAC,CAAA;gBAC5B,CAAC;YACH,CAAC,CAAC,CAAA;YAEF,MAAM,KAAK,GAAG,iBAAiB,CAAc,kBAAkB,CAAC,aAAa,CAAC,CAAA;YAC9E,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAA;YAEpC,UAAU,CAAC,IAAI,GAAG,kBAAkB,CAAC,aAAa,CAAA;YAElD,6FAA6F;YAC7F,gGAAgG;YAChG,iFAAiF;YACjF,8FAA8F;YAC9F,4GAA4G;YAC5G,iEAAiE;YACjE,MAAM,KAAK,GAAS,UAA6B,CAAA;YACjD,KAAK,CAAC,SAAS,GAAG,IAAI,IAAI,EAAE,CAAA;YAC5B,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,QAAQ,EAAE,CAAA;YAC9B,KAAK,CAAC,MAAM,GAAG,IAAI,CAAA;YAEnB,OAAO,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,CAAA;QAC/B,CAAC;KACF,CAAA;IAED,OAAO,MAAM,CAAA;AACf,CAAC,CAAA"}
@@ -0,0 +1,6 @@
1
+ export type * from './types.js';
2
+ export * from './basic-ed25519.js';
3
+ export * from './re-captcha.js';
4
+ export * from './basic-rely.js';
5
+ export * from './utils.js';
6
+ //# sourceMappingURL=export.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"export.d.ts","sourceRoot":"","sources":["../../../src/manager/plugins/export.ts"],"names":[],"mappings":"AACA,mBAAmB,YAAY,CAAA;AAC/B,cAAc,oBAAoB,CAAA;AAClC,cAAc,iBAAiB,CAAA;AAC/B,cAAc,iBAAiB,CAAA;AAC/B,cAAc,YAAY,CAAA"}
@@ -0,0 +1,5 @@
1
+ export * from './basic-ed25519.js';
2
+ export * from './re-captcha.js';
3
+ export * from './basic-rely.js';
4
+ export * from './utils.js';
5
+ //# sourceMappingURL=export.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"export.js","sourceRoot":"","sources":["../../../src/manager/plugins/export.ts"],"names":[],"mappings":"AAEA,cAAc,oBAAoB,CAAA;AAClC,cAAc,iBAAiB,CAAA;AAC/B,cAAc,iBAAiB,CAAA;AAC/B,cAAc,YAAY,CAAA"}
@@ -0,0 +1,4 @@
1
+ import type { AuthPlugin } from './types.js';
2
+ import type { AppContext, AppConfig } from '../types.js';
3
+ export declare const plugins: Record<string, <C extends AppConfig, T extends AppContext<C>>(context: T) => AuthPlugin>;
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/manager/plugins/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;AAE5C,OAAO,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AAIxD,eAAO,MAAM,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,SAAS,SAAS,EAAE,CAAC,SAAS,UAAU,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,KAAK,UAAU,CAAM,CAAA"}
@@ -0,0 +1,9 @@
1
+ import { AuthenticationType } from '@owlmeans/auth';
2
+ import { basicEd25519 } from './basic-ed25519.js';
3
+ import { reCaptcha } from './re-captcha.js';
4
+ import { basicRely } from './basic-rely.js';
5
+ export const plugins = {};
6
+ plugins[AuthenticationType.BasicEd25519] = basicEd25519;
7
+ plugins[AuthenticationType.ReCaptcha] = reCaptcha;
8
+ plugins[AuthenticationType.RelyHandshake] = basicRely;
9
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/manager/plugins/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAA;AAEnD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AAEjD,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAC3C,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAE3C,MAAM,CAAC,MAAM,OAAO,GAA6F,EAAE,CAAA;AAEnH,OAAO,CAAC,kBAAkB,CAAC,YAAY,CAAC,GAAG,YAAoD,CAAA;AAC/F,OAAO,CAAC,kBAAkB,CAAC,SAAS,CAAC,GAAG,SAAiD,CAAA;AACzF,OAAO,CAAC,kBAAkB,CAAC,aAAa,CAAC,GAAG,SAAiD,CAAA"}
@@ -0,0 +1,4 @@
1
+ import type { AppContext, AppConfig } from '../types.js';
2
+ import type { AuthPlugin } from './types.js';
3
+ export declare const reCaptcha: <C extends AppConfig, T extends AppContext<C>>(context: T) => AuthPlugin;
4
+ //# sourceMappingURL=re-captcha.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"re-captcha.d.ts","sourceRoot":"","sources":["../../../src/manager/plugins/re-captcha.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AACxD,OAAO,KAAK,EAAE,UAAU,EAAuC,MAAM,YAAY,CAAA;AAUjF,eAAO,MAAM,SAAS,GAAI,CAAC,SAAS,SAAS,EAAE,CAAC,SAAS,UAAU,CAAC,CAAC,CAAC,WAAW,CAAC,KAAG,UAiDpF,CAAA"}
@@ -0,0 +1,49 @@
1
+ import { AuthenFailed, AuthenticationType, AuthPluginError, MOD_RECAPTCHA, AUTH_SCOPE, AuthRole } from '@owlmeans/auth';
2
+ import { PLUGINS } from '@owlmeans/config';
3
+ import { PluginMissconfigured } from '@owlmeans/config';
4
+ import { ModuleOutcome } from '@owlmeans/module';
5
+ import { base64 } from '@scure/base';
6
+ import { randomBytes } from '@noble/hashes/utils';
7
+ import { assertType } from './utils.js';
8
+ export const reCaptcha = (context) => {
9
+ const plugin = {
10
+ type: AuthenticationType.ReCaptcha,
11
+ init: async (request) => {
12
+ assertType(request.type, plugin);
13
+ const challenge = base64.encode(randomBytes(32));
14
+ return { challenge };
15
+ },
16
+ authenticate: async (credential) => {
17
+ const cfg = context.getConfigResource(PLUGINS);
18
+ const config = await cfg.get(MOD_RECAPTCHA);
19
+ if (config.value == null) {
20
+ throw new PluginMissconfigured('value');
21
+ }
22
+ const validateRecaptcha = context.module(MOD_RECAPTCHA);
23
+ const [result, status] = await validateRecaptcha.call({
24
+ body: {
25
+ secret: config.value,
26
+ response: credential.credential
27
+ },
28
+ headers: { 'content-type': 'application/x-www-form-urlencoded' }
29
+ });
30
+ if (status !== ModuleOutcome.Ok) {
31
+ throw new AuthPluginError('recaptcha:api');
32
+ }
33
+ if (!result.success) {
34
+ throw new AuthenFailed('recaptcha:' + (result['error-codes']?.join(',') ?? 'unknown'));
35
+ }
36
+ credential.scopes = [AUTH_SCOPE];
37
+ credential.role = AuthRole.Guest;
38
+ credential.type = AuthenticationType.ReCaptcha;
39
+ const [previous, challenge] = credential.challenge.split(':');
40
+ if (challenge != null) {
41
+ credential.challenge = previous;
42
+ return { token: previous };
43
+ }
44
+ return { token: '' };
45
+ }
46
+ };
47
+ return plugin;
48
+ };
49
+ //# sourceMappingURL=re-captcha.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"re-captcha.js","sourceRoot":"","sources":["../../../src/manager/plugins/re-captcha.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,kBAAkB,EAAE,eAAe,EAAE,aAAa,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AAGvH,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAA;AAE1C,OAAO,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAA;AAEvD,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAA;AAChD,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AACpC,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAA;AACjD,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;AAEvC,MAAM,CAAC,MAAM,SAAS,GAAG,CAA+C,OAAU,EAAc,EAAE;IAChG,MAAM,MAAM,GAAe;QACzB,IAAI,EAAE,kBAAkB,CAAC,SAAS;QAElC,IAAI,EAAE,KAAK,EAAC,OAAO,EAAC,EAAE;YACpB,UAAU,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,CAAA;YAEhC,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,CAAA;YAEhD,OAAO,EAAE,SAAS,EAAE,CAAA;QACtB,CAAC;QAED,YAAY,EAAE,KAAK,EAAC,UAAU,EAAC,EAAE;YAC/B,MAAM,GAAG,GAAG,OAAO,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAA;YAC9C,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,GAAG,CAAe,aAAa,CAAC,CAAA;YACzD,IAAI,MAAM,CAAC,KAAK,IAAI,IAAI,EAAE,CAAC;gBACzB,MAAM,IAAI,oBAAoB,CAAC,OAAO,CAAC,CAAA;YACzC,CAAC;YACD,MAAM,iBAAiB,GAAG,OAAO,CAAC,MAAM,CAAkC,aAAa,CAAC,CAAA;YACxF,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,MAAM,iBAAiB,CAAC,IAAI,CAAsC;gBACzF,IAAI,EAAE;oBACJ,MAAM,EAAE,MAAM,CAAC,KAAK;oBACpB,QAAQ,EAAE,UAAU,CAAC,UAAU;iBAChC;gBACD,OAAO,EAAE,EAAE,cAAc,EAAE,mCAAmC,EAAE;aACjE,CAAC,CAAA;YACF,IAAI,MAAM,KAAK,aAAa,CAAC,EAAE,EAAE,CAAC;gBAChC,MAAM,IAAI,eAAe,CAAC,eAAe,CAAC,CAAA;YAC5C,CAAC;YACD,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;gBACpB,MAAM,IAAI,YAAY,CAAC,YAAY,GAAG,CAAC,MAAM,CAAC,aAAa,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,SAAS,CAAC,CAAC,CAAA;YACxF,CAAC;YAED,UAAU,CAAC,MAAM,GAAG,CAAC,UAAU,CAAC,CAAA;YAChC,UAAU,CAAC,IAAI,GAAG,QAAQ,CAAC,KAAK,CAAA;YAChC,UAAU,CAAC,IAAI,GAAG,kBAAkB,CAAC,SAAS,CAAA;YAE9C,MAAM,CAAC,QAAQ,EAAE,SAAS,CAAC,GAAG,UAAU,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,CAAiC,CAAA;YAC7F,IAAI,SAAS,IAAI,IAAI,EAAE,CAAC;gBACtB,UAAU,CAAC,SAAS,GAAG,QAAQ,CAAA;gBAE/B,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAA;YAC5B,CAAC;YAED,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,CAAA;QACtB,CAAC;KACF,CAAA;IAED,OAAO,MAAM,CAAA;AACf,CAAC,CAAA"}