@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,25 @@
1
+ import type { AllowanceResponse } from '@owlmeans/auth';
2
+ import type { AuthModel } from '../types.js';
3
+ import type { AbstractRequest } from '@owlmeans/module';
4
+ import type { RedisResource } from '@owlmeans/redis-resource';
5
+ import type { ResourceRecord } from '@owlmeans/resource';
6
+ export interface AuthPlugin extends Omit<AuthModel, "rely"> {
7
+ type: string;
8
+ }
9
+ export interface RecpatchaResponse {
10
+ success: boolean;
11
+ challenge_ts: number;
12
+ hostname: string;
13
+ 'error-codes'?: string[];
14
+ }
15
+ export interface RecaptchaRequest extends AbstractRequest<{
16
+ secret: string;
17
+ response: string;
18
+ remoteip?: string;
19
+ }> {
20
+ }
21
+ export interface RelyRecord extends ResourceRecord, AllowanceResponse {
22
+ }
23
+ export interface AuthRedisResource extends RedisResource<RelyRecord> {
24
+ }
25
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/manager/plugins/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAA;AACvD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AAC5C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAA;AACvD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAA;AAC7D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAA;AAExD,MAAM,WAAW,UAAW,SAAQ,IAAI,CAAC,SAAS,EAAE,MAAM,CAAC;IACzD,IAAI,EAAE,MAAM,CAAA;CACb;AAED,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,OAAO,CAAA;IAChB,YAAY,EAAE,MAAM,CAAA;IACpB,QAAQ,EAAE,MAAM,CAAA;IAChB,aAAa,CAAC,EAAE,MAAM,EAAE,CAAA;CACzB;AAED,MAAM,WAAW,gBAAiB,SAAQ,eAAe,CAAC;IACxD,MAAM,EAAE,MAAM,CAAA;IACd,QAAQ,EAAE,MAAM,CAAA;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAA;CAClB,CAAC;CAAI;AAEN,MAAM,WAAW,UAAW,SAAQ,cAAc,EAAE,iBAAiB;CACpE;AAED,MAAM,WAAW,iBAAkB,SAAQ,aAAa,CAAC,UAAU,CAAC;CAAG"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/manager/plugins/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,8 @@
1
+ import type { AuthPlugin } from './types.js';
2
+ import type { AppContext, AppConfig } from '../types.js';
3
+ export declare const assertType: (type: string, plugin: AuthPlugin) => void;
4
+ /**
5
+ * @throws {AuthUnknown}
6
+ */
7
+ export declare const getPlugin: (type: string, context: AppContext<AppConfig>) => AuthPlugin;
8
+ //# sourceMappingURL=utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/manager/plugins/utils.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;AAE5C,OAAO,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AAExD,eAAO,MAAM,UAAU,SAAU,MAAM,UAAU,UAAU,SAI1D,CAAA;AAED;;GAEG;AACH,eAAO,MAAM,SAAS,SAAU,MAAM,WAAW,UAAU,CAAC,SAAS,CAAC,KAAG,UAMxE,CAAA"}
@@ -0,0 +1,18 @@
1
+ import { AuthUnknown, TypeMissmatchError } from '@owlmeans/auth';
2
+ import { plugins } from './index.js';
3
+ export const assertType = (type, plugin) => {
4
+ if (type !== plugin.type) {
5
+ throw new TypeMissmatchError(plugin.type);
6
+ }
7
+ };
8
+ /**
9
+ * @throws {AuthUnknown}
10
+ */
11
+ export const getPlugin = (type, context) => {
12
+ const plugin = plugins[type];
13
+ if (plugin == null) {
14
+ throw new AuthUnknown(type);
15
+ }
16
+ return plugins[type](context);
17
+ };
18
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../src/manager/plugins/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAA;AAEhE,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAA;AAGpC,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,IAAY,EAAE,MAAkB,EAAE,EAAE;IAC7D,IAAI,IAAI,KAAK,MAAM,CAAC,IAAI,EAAE,CAAC;QACzB,MAAM,IAAI,kBAAkB,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;IAC3C,CAAC;AACH,CAAC,CAAA;AAED;;GAEG;AACH,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,IAAY,EAAE,OAA8B,EAAc,EAAE;IACpF,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IAC5B,IAAI,MAAM,IAAI,IAAI,EAAE,CAAC;QACnB,MAAM,IAAI,WAAW,CAAC,IAAI,CAAC,CAAA;IAC7B,CAAC;IACD,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,CAAA;AAC/B,CAAC,CAAA"}
@@ -0,0 +1,5 @@
1
+ import type { Auth } from '@owlmeans/auth';
2
+ import type { AuthenticateMethod, Connection } from '@owlmeans/socket';
3
+ import type { AppContext } from '../types.js';
4
+ export declare const createRelyFlow: (context: AppContext, conn: Connection, auth?: Auth | null) => AuthenticateMethod;
5
+ //# sourceMappingURL=flow.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"flow.d.ts","sourceRoot":"","sources":["../../../src/manager/rely/flow.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAoB,IAAI,EAA8B,MAAM,gBAAgB,CAAA;AAExF,OAAO,KAAK,EAAE,kBAAkB,EAAE,UAAU,EAAyB,MAAM,kBAAkB,CAAA;AAE7F,OAAO,KAAK,EAAE,UAAU,EAAiD,MAAM,aAAa,CAAA;AAkB5F,eAAO,MAAM,cAAc,YAAa,UAAU,QAAQ,UAAU,SAAS,IAAI,GAAG,IAAI,KAAG,kBAgH1F,CAAA"}
@@ -0,0 +1,127 @@
1
+ import { AUTH_SCOPE, AuthenticationStage, AuthenticationType, AuthPluginError, AuthRole, RELY_3RD } from '@owlmeans/auth';
2
+ import { isEventMessage, isMessage } from '@owlmeans/socket';
3
+ import { makeAuthModel } from '../model.js';
4
+ import { EnvelopeKind, makeEnvelopeModel } from '@owlmeans/basic-envelope';
5
+ import { trusted } from '../utils/trusted.js';
6
+ import { RELY_TUNNEL } from '../consts.js';
7
+ import { RELY_ACTION_TIMEOUT } from '@owlmeans/auth-common';
8
+ // 1. There is a difference between privileged (provider)
9
+ // and non-privileged (consumer) request
10
+ // 2. Source allows to distinguish between provider and consumer
11
+ // but probably it needs to be universalized some way
12
+ // cause potentially wallet can also be consumer
13
+ // (right now consumer will request authentication type)
14
+ // 3. General idea is that: when you are connected, the auth
15
+ // process can be started from scratch following same stages
16
+ // and using the same plugins but via socket
17
+ export const createRelyFlow = (context, conn, auth) => {
18
+ const auhtenticate = conn.authenticate;
19
+ const model = makeAuthModel(context);
20
+ let internalAuth = auth ?? null;
21
+ const linker = async (rely, source, notify) => {
22
+ const tunnel = context.resource(RELY_TUNNEL);
23
+ const closeReceiver = await tunnel.subscribe(async (message) => {
24
+ if (isMessage(message, true)) {
25
+ await conn.send(message);
26
+ }
27
+ else if (isEventMessage(message, true)) {
28
+ if (message.event === 'close') {
29
+ await conn.close();
30
+ closeSender();
31
+ await closeReceiver();
32
+ }
33
+ }
34
+ }, source.nonce);
35
+ // We allow to just forward call messages back and forth
36
+ conn._receiveCall = async (msg) => { console.info(source.nonce, 'Forward call', msg.method, msg.id); };
37
+ conn._receiveResult = async (msg) => { console.info(source.nonce, 'Forward result', msg.id); };
38
+ conn._receiveError = async (msg) => { console.info(source.nonce, 'Forward error', msg.id); };
39
+ conn.defaultCallTimeout = RELY_ACTION_TIMEOUT * 1000;
40
+ const closeSender = conn.listen(async (message) => {
41
+ if (isMessage(message, true)) {
42
+ const forward = { ...message };
43
+ if (forward.rawData != null) {
44
+ delete forward.rawData;
45
+ }
46
+ await tunnel.publish(forward, rely.nonce);
47
+ }
48
+ else if (isEventMessage(message, true)) {
49
+ if (message.event === 'close') {
50
+ const forward = { ...message };
51
+ if (forward.rawData != null) {
52
+ delete forward.rawData;
53
+ }
54
+ await tunnel.publish(forward, rely.nonce);
55
+ closeSender();
56
+ await closeReceiver();
57
+ }
58
+ }
59
+ });
60
+ if (notify === true) {
61
+ internalAuth = {
62
+ token: makeEnvelopeModel(RELY_3RD).send(rely).tokenize(),
63
+ isUser: true,
64
+ createdAt: new Date(),
65
+ type: AuthenticationType.RelyHandshake,
66
+ role: AuthRole.User,
67
+ userId: source.nonce,
68
+ scopes: [AUTH_SCOPE]
69
+ };
70
+ await conn.auth(AuthenticationStage.Authenticated, internalAuth);
71
+ }
72
+ };
73
+ conn.authenticate = async (stage, payload) => {
74
+ const [, keyPair] = await trusted(context);
75
+ switch (stage) {
76
+ // This part of flow is entered by both consumer and provider (wallet)
77
+ case AuthenticationStage.Init:
78
+ const _payload = payload;
79
+ if (auth != null) {
80
+ _payload.auth = auth;
81
+ }
82
+ else if (_payload.auth != null) {
83
+ delete _payload.auth;
84
+ }
85
+ _payload.provideRely = linker;
86
+ _payload.conn = conn;
87
+ try {
88
+ return [stage, await model.init(_payload)];
89
+ }
90
+ catch (e) {
91
+ console.error(e);
92
+ await conn.close();
93
+ }
94
+ break;
95
+ // This part of flow is entered by that actor who enters peer's key (token or pin)
96
+ case AuthenticationStage.Authenticate:
97
+ try {
98
+ const cred = payload;
99
+ const authenticated = await model.authenticate(cred);
100
+ const envelope = makeEnvelopeModel(authenticated.token, EnvelopeKind.Token);
101
+ if (!await envelope.verify(keyPair)) {
102
+ throw new AuthPluginError('internal-rely');
103
+ }
104
+ if (envelope.type() !== AuthenticationType.RelyHandshake) {
105
+ throw new AuthPluginError('internal-rely');
106
+ }
107
+ internalAuth = envelope.message();
108
+ const token = makeEnvelopeModel(internalAuth.token, EnvelopeKind.Token).message();
109
+ await linker(token.rely, token.source);
110
+ return [AuthenticationStage.Authenticated, internalAuth];
111
+ }
112
+ catch (e) {
113
+ console.error(e);
114
+ await conn.close();
115
+ }
116
+ break;
117
+ // Support intermediate stage for visual confirmation
118
+ case AuthenticationStage.Authenticated:
119
+ return [stage, internalAuth];
120
+ default:
121
+ return auhtenticate(stage, payload);
122
+ }
123
+ return [stage, null];
124
+ };
125
+ return conn.authenticate;
126
+ };
127
+ //# sourceMappingURL=flow.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"flow.js","sourceRoot":"","sources":["../../../src/manager/rely/flow.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export * from './flow.js';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/manager/rely/index.ts"],"names":[],"mappings":"AACA,cAAc,WAAW,CAAA"}
@@ -0,0 +1,2 @@
1
+ export * from './flow.js';
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/manager/rely/index.ts"],"names":[],"mappings":"AACA,cAAc,WAAW,CAAA"}
@@ -0,0 +1,3 @@
1
+ import type { RelyService } from './types.js';
2
+ export declare const createRelyService: (alias?: string) => RelyService;
3
+ //# sourceMappingURL=rely.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rely.d.ts","sourceRoot":"","sources":["../../src/manager/rely.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAc,WAAW,EAAE,MAAM,YAAY,CAAA;AAczD,eAAO,MAAM,iBAAiB,WAAW,MAAM,KAAkB,WAyEhE,CAAA"}
@@ -0,0 +1,63 @@
1
+ import { assertContext, createService } from '@owlmeans/context';
2
+ import { DEFAULT_RELY } from './consts.js';
3
+ import { AUTH_QUERY, AuthenFailed, AuthenticationType } from '@owlmeans/auth';
4
+ import { EnvelopeKind, makeEnvelopeModel } from '@owlmeans/basic-envelope';
5
+ import { AUTH_CACHE, AUTHEN_TIMEFRAME } from '../consts.js';
6
+ import { trusted } from './utils/trusted.js';
7
+ export const createRelyService = (alias = DEFAULT_RELY) => {
8
+ const _keyPair = async (context) => {
9
+ const [, keyPair] = await trusted(context);
10
+ return keyPair;
11
+ };
12
+ const service = createService(alias, {
13
+ match: async (req) => {
14
+ const authorization = req.query[AUTH_QUERY] != null
15
+ ? `${req.query[AUTH_QUERY]}` : null;
16
+ if (authorization == null) {
17
+ // This is optional Guard. So it can not match only on provided authorization
18
+ // that is not valid. In other cases it's passed and need to be handled
19
+ // to provide or null authentication object.
20
+ return true;
21
+ }
22
+ const token = makeEnvelopeModel(authorization, EnvelopeKind.Token);
23
+ const auth = token.message();
24
+ return auth.type === AuthenticationType.OneTimeToken;
25
+ },
26
+ handle: async (req, res) => {
27
+ const context = assertContext(service.ctx);
28
+ const authorization = req.query[AUTH_QUERY];
29
+ // We authorize in cases when there is no authorization or it's valid one
30
+ if (authorization == null) {
31
+ return true;
32
+ }
33
+ // @TODO it's likely something is wrong with AbstractRequest types - so it should be fixed there
34
+ if (typeof authorization !== 'string') {
35
+ return false;
36
+ }
37
+ const envelope = makeEnvelopeModel(authorization, EnvelopeKind.Token);
38
+ if (!await envelope.verify(await _keyPair(context))) {
39
+ return false;
40
+ }
41
+ const msg = envelope.message();
42
+ if (msg.source !== AuthenticationType.WalletDid) {
43
+ return false;
44
+ }
45
+ try {
46
+ const cache = (context) => context.resource(AUTH_CACHE);
47
+ await cache(context).create({ id: msg.challenge }, { ttl: (envelope.envelope.ttl ?? AUTHEN_TIMEFRAME) / 1000 });
48
+ }
49
+ catch (e) {
50
+ const error = new AuthenFailed('challenge');
51
+ if (e instanceof Error) {
52
+ error.oiriginalStack = `${e} : ${e.stack}`;
53
+ }
54
+ throw error;
55
+ }
56
+ // @TODO Actually there is some mess. We know that it aint Auth but AuthCredentials
57
+ res.resolve(msg);
58
+ return true;
59
+ }
60
+ }, service => async () => { service.initialized = true; });
61
+ return service;
62
+ };
63
+ //# sourceMappingURL=rely.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rely.js","sourceRoot":"","sources":["../../src/manager/rely.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,33 @@
1
+ import type { AllowanceRequest, AllowanceResponse, Auth, AuthCredentials, AuthToken, RelyToken } from '@owlmeans/auth';
2
+ import type { KlusterConfig } from '@owlmeans/kluster';
3
+ import type { GuardService } from '@owlmeans/module';
4
+ import type { ApiServerAppend } from '@owlmeans/server-api';
5
+ import type { ServerContext, ServerConfig } from '@owlmeans/server-context';
6
+ import type { ServiceRoute } from '@owlmeans/server-route';
7
+ import type { Connection } from '@owlmeans/socket';
8
+ import type { StaticResourceAppend } from '@owlmeans/static-resource';
9
+ export interface AppConfig extends ServerConfig, KlusterConfig {
10
+ services: Record<string, ServiceRoute>;
11
+ }
12
+ export interface AuthModel {
13
+ init: (request: AllowanceRequest) => Promise<AllowanceResponse>;
14
+ authenticate: (credential: AuthCredentials) => Promise<AuthToken>;
15
+ rely: (conn: Connection, source?: Auth | null) => Promise<void>;
16
+ }
17
+ export interface AppContext<C extends AppConfig = AppConfig> extends ServerContext<C>, ApiServerAppend, StaticResourceAppend {
18
+ }
19
+ export interface RelyService extends GuardService {
20
+ }
21
+ export interface RelyAllowanceRequest extends AllowanceRequest {
22
+ auth?: Auth;
23
+ provideRely?: RelyLinker;
24
+ conn?: Connection;
25
+ }
26
+ export interface RelyLinker {
27
+ (rely: RelyToken, source: RelyToken, notify?: boolean): Promise<void>;
28
+ }
29
+ export interface RelyCarrier {
30
+ source: RelyToken;
31
+ rely: RelyToken;
32
+ }
33
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/manager/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,IAAI,EAAE,eAAe,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AACtH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AACtD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAA;AACpD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAA;AAC3D,OAAO,KAAK,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAA;AAC3E,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAA;AAC1D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAClD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAA;AAErE,MAAM,WAAW,SAAU,SAAQ,YAAY,EAAE,aAAa;IAC5D,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CAAA;CACvC;AAED,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,CAAC,OAAO,EAAE,gBAAgB,KAAK,OAAO,CAAC,iBAAiB,CAAC,CAAA;IAE/D,YAAY,EAAE,CAAC,UAAU,EAAE,eAAe,KAAK,OAAO,CAAC,SAAS,CAAC,CAAA;IAEjE,IAAI,EAAE,CAAC,IAAI,EAAE,UAAU,EAAE,MAAM,CAAC,EAAE,IAAI,GAAG,IAAI,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;CAChE;AAED,MAAM,WAAW,UAAU,CAAC,CAAC,SAAS,SAAS,GAAG,SAAS,CAAE,SAAQ,aAAa,CAAC,CAAC,CAAC,EACjF,eAAe,EACf,oBAAoB;CAAI;AAE5B,MAAM,WAAW,WAAY,SAAQ,YAAY;CAChD;AAED,MAAM,WAAW,oBAAqB,SAAQ,gBAAgB;IAC5D,IAAI,CAAC,EAAE,IAAI,CAAA;IACX,WAAW,CAAC,EAAE,UAAU,CAAA;IACxB,IAAI,CAAC,EAAE,UAAU,CAAA;CAClB;AAED,MAAM,WAAW,UAAU;IACzB,CAAC,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;CACtE;AAED,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,SAAS,CAAC;IAClB,IAAI,EAAE,SAAS,CAAA;CAChB"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/manager/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,2 @@
1
+ export * from './trusted.js';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/manager/utils/index.ts"],"names":[],"mappings":"AACA,cAAc,cAAc,CAAA"}
@@ -0,0 +1,2 @@
1
+ export * from './trusted.js';
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/manager/utils/index.ts"],"names":[],"mappings":"AACA,cAAc,cAAc,CAAA"}
@@ -0,0 +1,5 @@
1
+ import type { KeyPairModel } from '@owlmeans/basic-keys';
2
+ import type { AppContext } from '../types.js';
3
+ import type { TrustedRecord } from '@owlmeans/auth-common';
4
+ export declare const trusted: (context: AppContext, userName?: string) => Promise<[TrustedRecord, KeyPairModel]>;
5
+ //# sourceMappingURL=trusted.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"trusted.d.ts","sourceRoot":"","sources":["../../../src/manager/utils/trusted.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAA;AACxD,OAAO,KAAK,EAAE,UAAU,EAAa,MAAM,aAAa,CAAA;AAGxD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAA;AAG1D,eAAO,MAAM,OAAO,YAAmB,UAAU,aAAY,MAAM,KAAkB,OAAO,CAAC,CAAC,aAAa,EAAE,YAAY,CAAC,CAQzH,CAAA"}
@@ -0,0 +1,11 @@
1
+ import { TRUSTED } from '@owlmeans/config';
2
+ import { AUTH_SRV_KEY } from '../../consts.js';
3
+ import { trust } from '@owlmeans/auth-common/utils';
4
+ export const trusted = async (context, userName = AUTH_SRV_KEY) => {
5
+ const trusted = await trust(context, TRUSTED, userName);
6
+ if (trusted.user.secret == null) {
7
+ throw new SyntaxError(`Auth srvice trusted users should have secret keys to be used ${userName}`);
8
+ }
9
+ return [trusted.user, trusted.key];
10
+ };
11
+ //# sourceMappingURL=trusted.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"trusted.js","sourceRoot":"","sources":["../../../src/manager/utils/trusted.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAA;AAC1C,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAA;AAE9C,OAAO,EAAE,KAAK,EAAE,MAAM,6BAA6B,CAAA;AAEnD,MAAM,CAAC,MAAM,OAAO,GAAG,KAAK,EAAE,OAAmB,EAAE,WAAmB,YAAY,EAA0C,EAAE;IAC5H,MAAM,OAAO,GAAG,MAAM,KAAK,CAAwB,OAAO,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAA;IAE9E,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,IAAI,IAAI,EAAE,CAAC;QAChC,MAAM,IAAI,WAAW,CAAC,gEAAgE,QAAQ,EAAE,CAAC,CAAA;IACnG,CAAC;IAED,OAAO,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,CAAA;AACpC,CAAC,CAAA"}
@@ -0,0 +1,2 @@
1
+ export * from './rely/index.js';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/model/index.ts"],"names":[],"mappings":"AACA,cAAc,iBAAiB,CAAA"}
@@ -0,0 +1,2 @@
1
+ export * from './rely/index.js';
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/model/index.ts"],"names":[],"mappings":"AACA,cAAc,iBAAiB,CAAA"}
@@ -0,0 +1,3 @@
1
+ import type { RelyOptions } from './types.js';
2
+ export declare const makeConsumerRely: (opts?: RelyOptions) => import("@owlmeans/basic-envelope").EnvelopeModel<import("@owlmeans/auth").RelyToken>;
3
+ //# sourceMappingURL=consumer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"consumer.d.ts","sourceRoot":"","sources":["../../../src/model/rely/consumer.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA;AAE7C,eAAO,MAAM,gBAAgB,UAAW,WAAW,yFAOlD,CAAA"}
@@ -0,0 +1,9 @@
1
+ import { makeRelyModel } from './peer.js';
2
+ export const makeConsumerRely = (opts) => {
3
+ const model = makeRelyModel(opts);
4
+ const msg = model.message();
5
+ delete msg.pin;
6
+ model.send(msg);
7
+ return model;
8
+ };
9
+ //# sourceMappingURL=consumer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"consumer.js","sourceRoot":"","sources":["../../../src/model/rely/consumer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAA;AAGzC,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,IAAkB,EAAE,EAAE;IACrD,MAAM,KAAK,GAAG,aAAa,CAAC,IAAI,CAAC,CAAA;IACjC,MAAM,GAAG,GAAG,KAAK,CAAC,OAAO,EAAE,CAAA;IAC3B,OAAO,GAAG,CAAC,GAAG,CAAA;IACd,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;IAEf,OAAO,KAAK,CAAA;AACd,CAAC,CAAA"}
@@ -0,0 +1,5 @@
1
+ export type * from './types.js';
2
+ export * from './peer.js';
3
+ export * from './provider.js';
4
+ export * from './consumer.js';
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/model/rely/index.ts"],"names":[],"mappings":"AACA,mBAAmB,YAAY,CAAA;AAC/B,cAAc,WAAW,CAAA;AACzB,cAAc,eAAe,CAAA;AAC7B,cAAc,eAAe,CAAA"}
@@ -0,0 +1,4 @@
1
+ export * from './peer.js';
2
+ export * from './provider.js';
3
+ export * from './consumer.js';
4
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/model/rely/index.ts"],"names":[],"mappings":"AAEA,cAAc,WAAW,CAAA;AACzB,cAAc,eAAe,CAAA;AAC7B,cAAc,eAAe,CAAA"}
@@ -0,0 +1,5 @@
1
+ import type { RelyToken } from '@owlmeans/auth';
2
+ import type { EnvelopeModel } from '@owlmeans/basic-envelope';
3
+ import type { RelyOptions } from './types.js';
4
+ export declare const makeRelyModel: (opts?: RelyOptions) => EnvelopeModel<RelyToken>;
5
+ //# sourceMappingURL=peer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"peer.d.ts","sourceRoot":"","sources":["../../../src/model/rely/peer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAE/C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAA;AAI7D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA;AAG7C,eAAO,MAAM,aAAa,UAAW,WAAW,KAAG,aAAa,CAAC,SAAS,CAyBzE,CAAA"}
@@ -0,0 +1,36 @@
1
+ import { RELY_3RD } from '@owlmeans/auth';
2
+ import { makeEnvelopeModel } from '@owlmeans/basic-envelope';
3
+ import { createRandomPrefix, createIdOfLength, IdStyle } from '@owlmeans/basic-ids';
4
+ import { base58 } from '@scure/base';
5
+ import { RELY_CALL_TIMEOUT } from '@owlmeans/auth-common';
6
+ export const makeRelyModel = (opts) => {
7
+ const envelope = makeEnvelopeModel(RELY_3RD);
8
+ const pinLength = opts?.pinLength ?? 6;
9
+ const checkLength = opts?.checkLenght ?? 2;
10
+ const tokenLength = opts?.tokenLength ?? 16;
11
+ const nonceLength = opts?.nonceLength ?? 24;
12
+ const pinQty = Math.ceil(pinLength / 2);
13
+ const checkQty = Math.ceil(checkLength / 2);
14
+ const tokenQty = tokenLength;
15
+ const source = createRandomPrefix(pinQty + checkQty + tokenQty);
16
+ const bytes = base58.decode(source);
17
+ const pinBytes = bytes.slice(0, pinQty);
18
+ const checkBytes = bytes.slice(pinQty, pinQty + checkQty);
19
+ const tokenBytes = bytes.slice(pinQty + checkQty);
20
+ const pin = toNumber(pinBytes).substring(0, pinLength);
21
+ envelope.send({
22
+ pin,
23
+ check: toNumber(checkBytes).substring(0, checkLength),
24
+ token: base58.encode(tokenBytes).substring(0, tokenLength),
25
+ nonce: createIdOfLength(nonceLength, IdStyle.Base64)
26
+ }, opts?.liveTime ?? RELY_CALL_TIMEOUT * 1000);
27
+ return envelope;
28
+ };
29
+ const toNumber = (bytes) => {
30
+ let pinInt = 0n;
31
+ for (let i = bytes.length - 1; i >= 0; i--) {
32
+ pinInt = (pinInt << 8n) | BigInt(bytes[i]);
33
+ }
34
+ return pinInt.toString();
35
+ };
36
+ //# sourceMappingURL=peer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"peer.js","sourceRoot":"","sources":["../../../src/model/rely/peer.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AAEzC,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAA;AAC5D,OAAO,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AACnF,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AAEpC,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAA;AAEzD,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,IAAkB,EAA4B,EAAE;IAC5E,MAAM,QAAQ,GAAG,iBAAiB,CAAY,QAAQ,CAAC,CAAA;IAEvD,MAAM,SAAS,GAAG,IAAI,EAAE,SAAS,IAAI,CAAC,CAAA;IACtC,MAAM,WAAW,GAAG,IAAI,EAAE,WAAW,IAAI,CAAC,CAAA;IAC1C,MAAM,WAAW,GAAG,IAAI,EAAE,WAAW,IAAI,EAAE,CAAA;IAC3C,MAAM,WAAW,GAAG,IAAI,EAAE,WAAW,IAAI,EAAE,CAAA;IAC3C,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC,CAAA;IACvC,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC,CAAA;IAC3C,MAAM,QAAQ,GAAG,WAAW,CAAA;IAC5B,MAAM,MAAM,GAAG,kBAAkB,CAAC,MAAM,GAAG,QAAQ,GAAG,QAAQ,CAAC,CAAA;IAC/D,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;IACnC,MAAM,QAAQ,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC,CAAA;IACvC,MAAM,UAAU,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,GAAG,QAAQ,CAAC,CAAA;IACzD,MAAM,UAAU,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,QAAQ,CAAC,CAAA;IAEjD,MAAM,GAAG,GAAG,QAAQ,CAAC,QAAQ,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,SAAS,CAAC,CAAA;IACtD,QAAQ,CAAC,IAAI,CAAC;QACZ,GAAG;QACH,KAAK,EAAE,QAAQ,CAAC,UAAU,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,WAAW,CAAC;QACrD,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,WAAW,CAAC;QAC1D,KAAK,EAAE,gBAAgB,CAAC,WAAW,EAAE,OAAO,CAAC,MAAM,CAAC;KACrD,EAAE,IAAI,EAAE,QAAQ,IAAI,iBAAiB,GAAG,IAAI,CAAC,CAAA;IAE9C,OAAO,QAAQ,CAAA;AACjB,CAAC,CAAA;AAED,MAAM,QAAQ,GAAG,CAAC,KAAiB,EAAU,EAAE;IAC7C,IAAI,MAAM,GAAG,EAAE,CAAA;IACf,KAAK,IAAI,CAAC,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAC3C,MAAM,GAAG,CAAC,MAAM,IAAI,EAAE,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAC7C,CAAC;IACD,OAAO,MAAM,CAAC,QAAQ,EAAE,CAAA;AAC1B,CAAC,CAAA"}
@@ -0,0 +1,3 @@
1
+ import type { RelyOptions } from './types.js';
2
+ export declare const makeProviderRely: (opts?: RelyOptions) => import("@owlmeans/basic-envelope").EnvelopeModel<import("@owlmeans/auth").RelyToken>;
3
+ //# sourceMappingURL=provider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"provider.d.ts","sourceRoot":"","sources":["../../../src/model/rely/provider.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA;AAE7C,eAAO,MAAM,gBAAgB,UAAW,WAAW,yFAIlD,CAAA"}
@@ -0,0 +1,6 @@
1
+ import { makeRelyModel } from './peer.js';
2
+ export const makeProviderRely = (opts) => {
3
+ const model = makeRelyModel(opts);
4
+ return model;
5
+ };
6
+ //# sourceMappingURL=provider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"provider.js","sourceRoot":"","sources":["../../../src/model/rely/provider.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAA;AAGzC,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,IAAkB,EAAE,EAAE;IACrD,MAAM,KAAK,GAAG,aAAa,CAAC,IAAI,CAAC,CAAA;IAEjC,OAAO,KAAK,CAAA;AACd,CAAC,CAAA"}
@@ -0,0 +1,8 @@
1
+ export interface RelyOptions {
2
+ pinLength?: number;
3
+ checkLenght?: number;
4
+ tokenLength?: number;
5
+ nonceLength?: number;
6
+ liveTime?: number;
7
+ }
8
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/model/rely/types.ts"],"names":[],"mappings":"AACA,MAAM,WAAW,WAAW;IAC1B,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAA;CAClB"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/model/rely/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,3 @@
1
+ import type { ServerModule } from '@owlmeans/server-module';
2
+ export declare const modules: ServerModule<unknown>[];
3
+ //# sourceMappingURL=modules.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"modules.d.ts","sourceRoot":"","sources":["../src/modules.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAA;AAO3D,eAAO,MAAM,OAAO,EAAE,YAAY,CAAC,OAAO,CAAC,EAK1C,CAAA"}
@@ -0,0 +1,11 @@
1
+ import { elevate } from '@owlmeans/server-module';
2
+ import { modules as list } from '@owlmeans/auth-common';
3
+ import { DISPATCHER, DISPATCHER_AUTHEN } from '@owlmeans/auth';
4
+ import { authenticate } from './actions/service.js';
5
+ import { stab, elevate as celevate } from '@owlmeans/client-module';
6
+ elevate(list, DISPATCHER_AUTHEN, authenticate);
7
+ celevate(list, DISPATCHER, stab);
8
+ export const modules = [
9
+ ...list.filter((module) => [DISPATCHER, DISPATCHER_AUTHEN].includes(module.getAlias()))
10
+ ];
11
+ //# sourceMappingURL=modules.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"modules.js","sourceRoot":"","sources":["../src/modules.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAA;AACjD,OAAO,EAAE,OAAO,IAAI,IAAI,EAAE,MAAM,uBAAuB,CAAA;AACvD,OAAO,EAAE,UAAU,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAA;AAE9D,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAA;AACnD,OAAO,EAAE,IAAI,EAAE,OAAO,IAAI,QAAQ,EAAE,MAAM,yBAAyB,CAAA;AAEnE,OAAO,CAAC,IAAI,EAAE,iBAAiB,EAAE,YAAY,CAAC,CAAA;AAC9C,QAAQ,CAAC,IAAI,EAAE,UAAU,EAAE,IAAI,CAAC,CAAA;AAEhC,MAAM,CAAC,MAAM,OAAO,GAA4B;IAC9C,GAAG,IAAI,CAAC,MAAM,CACZ,CAAC,MAAM,EAAmC,EAAE,CAC1C,CAAC,UAAU,EAAE,iBAAiB,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,CAC9D;CACF,CAAA"}
@@ -0,0 +1,7 @@
1
+ import type { ServerContext, ServerConfig } from '@owlmeans/server-context';
2
+ import type { AuthServiceAppend, AuthService } from './types.js';
3
+ type Config = ServerConfig;
4
+ export declare const makeAuthService: (alias?: string) => AuthService;
5
+ export declare const appendAuthService: <C extends Config, T extends ServerContext<C>>(ctx: T, alias?: string) => T & AuthServiceAppend;
6
+ export {};
7
+ //# sourceMappingURL=service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../src/service.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAA;AAG3E,OAAO,KAAK,EAAE,iBAAiB,EAAE,WAAW,EAAa,MAAM,YAAY,CAAA;AAU3E,KAAK,MAAM,GAAG,YAAY,CAAA;AAG1B,eAAO,MAAM,eAAe,WAAW,MAAM,KAAmB,WA4F/D,CAAA;AAED,eAAO,MAAM,iBAAiB,GAAI,CAAC,SAAS,MAAM,EAAE,CAAC,SAAS,aAAa,CAAC,CAAC,CAAC,OACvE,CAAC,UAAS,MAAM,KACpB,CAAC,GAAG,iBAaN,CAAA"}