@novasamatech/host-papp 0.5.0-17 → 0.5.0-19

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 (144) hide show
  1. package/.papi/descriptors/generated.json +1 -0
  2. package/dist/crypto.d.ts +2 -2
  3. package/dist/crypto.js +8 -7
  4. package/dist/helpers/abortError.d.ts +0 -1
  5. package/dist/helpers/abortError.js +0 -3
  6. package/dist/index.d.ts +1 -1
  7. package/dist/papp.js +2 -2
  8. package/dist/sso/auth/attestationService.js +1 -1
  9. package/dist/sso/auth/impl.d.ts +29 -3
  10. package/dist/sso/auth/impl.js +60 -35
  11. package/dist/sso/auth/types.d.ts +13 -2
  12. package/dist/sso/userSecretRepository.d.ts +1 -1
  13. package/dist/sso/userSecretRepository.js +2 -2
  14. package/package.json +5 -5
  15. package/dist/adapters/identity/rpc.d.ts +0 -6
  16. package/dist/adapters/identity/rpc.js +0 -101
  17. package/dist/adapters/identity/types.d.ts +0 -10
  18. package/dist/adapters/identity/types.js +0 -1
  19. package/dist/adapters/lazyClient/papi.d.ts +0 -3
  20. package/dist/adapters/lazyClient/papi.js +0 -17
  21. package/dist/adapters/lazyClient/types.d.ts +0 -5
  22. package/dist/adapters/lazyClient/types.js +0 -1
  23. package/dist/adapters/statement/rpc.d.ts +0 -3
  24. package/dist/adapters/statement/rpc.js +0 -93
  25. package/dist/adapters/statement/types.d.ts +0 -9
  26. package/dist/adapters/statement/types.js +0 -1
  27. package/dist/adapters/storage/localStorage.d.ts +0 -2
  28. package/dist/adapters/storage/localStorage.js +0 -34
  29. package/dist/adapters/storage/memory.d.ts +0 -2
  30. package/dist/adapters/storage/memory.js +0 -22
  31. package/dist/adapters/storage/types.d.ts +0 -7
  32. package/dist/adapters/storage/types.js +0 -1
  33. package/dist/adapters/transport/rpc.d.ts +0 -3
  34. package/dist/adapters/transport/rpc.js +0 -51
  35. package/dist/adapters/transport/types.d.ts +0 -6
  36. package/dist/adapters/transport/types.js +0 -1
  37. package/dist/components/auth/codec.d.ts +0 -9
  38. package/dist/components/auth/codec.js +0 -10
  39. package/dist/components/auth/codecs.d.ts +0 -9
  40. package/dist/components/auth/codecs.js +0 -10
  41. package/dist/components/auth/index.d.ts +0 -36
  42. package/dist/components/auth/index.js +0 -150
  43. package/dist/components/auth/types.d.ts +0 -15
  44. package/dist/components/auth/types.js +0 -1
  45. package/dist/components/session.d.ts +0 -34
  46. package/dist/components/session.js +0 -54
  47. package/dist/components/sso/index.d.ts +0 -36
  48. package/dist/components/sso/index.js +0 -150
  49. package/dist/components/sso/scale/handshake.d.ts +0 -9
  50. package/dist/components/sso/scale/handshake.js +0 -10
  51. package/dist/components/sso/types.d.ts +0 -15
  52. package/dist/components/sso/types.js +0 -1
  53. package/dist/components/transport.d.ts +0 -27
  54. package/dist/components/transport.js +0 -57
  55. package/dist/components/user/codec.d.ts +0 -16
  56. package/dist/components/user/codec.js +0 -13
  57. package/dist/components/user/index.d.ts +0 -22
  58. package/dist/components/user/index.js +0 -58
  59. package/dist/components/user/ssoMessageStream.d.ts +0 -10
  60. package/dist/components/user/ssoMessageStream.js +0 -8
  61. package/dist/components/user/ssoSession.d.ts +0 -5
  62. package/dist/components/user/ssoSession.js +0 -5
  63. package/dist/components/user/storage.d.ts +0 -27
  64. package/dist/components/user/storage.js +0 -143
  65. package/dist/components/user/types.d.ts +0 -6
  66. package/dist/components/user/types.js +0 -1
  67. package/dist/components/user/userSessionStorage.d.ts +0 -20
  68. package/dist/components/user/userSessionStorage.js +0 -24
  69. package/dist/components/user.d.ts +0 -74
  70. package/dist/components/user.js +0 -188
  71. package/dist/helpers/result.d.ts +0 -12
  72. package/dist/helpers/result.js +0 -15
  73. package/dist/helpers/result.spec.d.ts +0 -1
  74. package/dist/helpers/result.spec.js +0 -23
  75. package/dist/helpers.d.ts +0 -1
  76. package/dist/helpers.js +0 -3
  77. package/dist/modules/accounts.d.ts +0 -1
  78. package/dist/modules/accounts.js +0 -2
  79. package/dist/modules/crypto.d.ts +0 -23
  80. package/dist/modules/crypto.js +0 -51
  81. package/dist/modules/secretStorage.d.ts +0 -15
  82. package/dist/modules/secretStorage.js +0 -44
  83. package/dist/modules/session/helpers.d.ts +0 -5
  84. package/dist/modules/session/helpers.js +0 -29
  85. package/dist/modules/session/session.d.ts +0 -12
  86. package/dist/modules/session/session.js +0 -50
  87. package/dist/modules/session/types.d.ts +0 -12
  88. package/dist/modules/session/types.js +0 -1
  89. package/dist/modules/signIn.d.ts +0 -67
  90. package/dist/modules/signIn.js +0 -188
  91. package/dist/modules/state.d.ts +0 -16
  92. package/dist/modules/state.js +0 -50
  93. package/dist/modules/statementStore.d.ts +0 -12
  94. package/dist/modules/statementStore.js +0 -22
  95. package/dist/modules/statementTopic.d.ts +0 -34
  96. package/dist/modules/statementTopic.js +0 -46
  97. package/dist/modules/storageView.d.ts +0 -25
  98. package/dist/modules/storageView.js +0 -51
  99. package/dist/modules/syncStorage.d.ts +0 -25
  100. package/dist/modules/syncStorage.js +0 -76
  101. package/dist/modules/transport/codec.d.ts +0 -24
  102. package/dist/modules/transport/codec.js +0 -36
  103. package/dist/modules/transport/crypto.d.ts +0 -2
  104. package/dist/modules/transport/crypto.js +0 -20
  105. package/dist/modules/transport/transport.d.ts +0 -42
  106. package/dist/modules/transport/transport.js +0 -66
  107. package/dist/modules/user.d.ts +0 -67
  108. package/dist/modules/user.js +0 -188
  109. package/dist/modules/userManager.d.ts +0 -15
  110. package/dist/modules/userManager.js +0 -105
  111. package/dist/modules/userStorage.d.ts +0 -19
  112. package/dist/modules/userStorage.js +0 -108
  113. package/dist/modules/userStore.d.ts +0 -15
  114. package/dist/modules/userStore.js +0 -105
  115. package/dist/sso/session/impl.d.ts +0 -23
  116. package/dist/sso/session/impl.js +0 -57
  117. package/dist/sso/session/scale/remoteMessage.d.ts +0 -10
  118. package/dist/sso/session/scale/remoteMessage.js +0 -13
  119. package/dist/sso/session/sessionManager.d.ts +0 -23
  120. package/dist/sso/session/sessionManager.js +0 -58
  121. package/dist/sso/session/ssoSession.d.ts +0 -8
  122. package/dist/sso/session/ssoSession.js +0 -5
  123. package/dist/sso/session/ssoSessionStorage.d.ts +0 -21
  124. package/dist/sso/session/ssoSessionStorage.js +0 -20
  125. package/dist/sso/session/types.d.ts +0 -6
  126. package/dist/sso/session/types.js +0 -1
  127. package/dist/sso/session/userSessionStorage.d.ts +0 -21
  128. package/dist/sso/session/userSessionStorage.js +0 -20
  129. package/dist/sso/sessionManager/attestationService.d.ts +0 -5
  130. package/dist/sso/sessionManager/attestationService.js +0 -15
  131. package/dist/sso/sessionManager/repository/ssoSessionRepository.d.ts +0 -22
  132. package/dist/sso/sessionManager/repository/ssoSessionRepository.js +0 -27
  133. package/dist/sso/sessionManager/scale/signRequest.d.ts +0 -19
  134. package/dist/sso/sessionManager/scale/signRequest.js +0 -19
  135. package/dist/sso/sessionManager/scale/signResponse.d.ts +0 -6
  136. package/dist/sso/sessionManager/scale/signResponse.js +0 -5
  137. package/dist/sso/sessionManager/ssoSession.d.ts +0 -23
  138. package/dist/sso/sessionManager/ssoSession.js +0 -69
  139. package/dist/sso/sessionManager/ssoSessionProver.d.ts +0 -4
  140. package/dist/sso/sessionManager/ssoSessionProver.js +0 -35
  141. package/dist/sso/ssoSessionRepository.d.ts +0 -18
  142. package/dist/sso/ssoSessionRepository.js +0 -27
  143. package/dist/structs.d.ts +0 -24
  144. package/dist/structs.js +0 -36
@@ -1,105 +0,0 @@
1
- import { err, ok, seq } from '../helpers/result.js';
2
- import { createSecretStorage } from './secretStorage.js';
3
- export const createUserStore = (appId, storage) => {
4
- const secretStorage = createSecretStorage(appId, storage);
5
- const usersStorage = createUserStorage(storage);
6
- const selectedUserStorage = createSelectedUserStorage(storage);
7
- const manager = {
8
- async readSelectedUserSession() {
9
- const selectedUser = await selectedUserStorage.read();
10
- return selectedUser.andThenPromise(async (selectedUser) => {
11
- if (selectedUser === null) {
12
- return ok(null);
13
- }
14
- const user = await manager.readUserSession(selectedUser);
15
- return user.andThenPromise(async (user) => {
16
- if (user === null) {
17
- await selectedUserStorage.clear();
18
- }
19
- return ok(user);
20
- });
21
- });
22
- },
23
- async readUserSession(accountId) {
24
- const user = await secretStorage.readSessionTopic(accountId).then(existingSessionTopic => existingSessionTopic.map(sessionTopic => {
25
- return sessionTopic ? { sessionTopic, accountId } : null;
26
- }));
27
- await user
28
- .andThen(v => (v ? ok(undefined) : err('User not found')))
29
- .orElsePromise(() => manager.removeUserSession(accountId));
30
- return user;
31
- },
32
- async createUserSession(user) {
33
- return (await usersStorage.add(user.accountId)).andThenPromise(async () => seq(await selectedUserStorage.write(user.accountId), await secretStorage.writeSessionTopic(user.accountId, user.sessionTopic)).map(() => user));
34
- },
35
- async removeUserSession(accountId) {
36
- const op = seq(await selectedUserStorage.read(), await usersStorage.remove(accountId));
37
- return op.andThenPromise(async ([selectedUser, users]) => {
38
- if (selectedUser === accountId) {
39
- const nextSelectedUser = users.at(0);
40
- if (nextSelectedUser) {
41
- await selectedUserStorage.write(nextSelectedUser);
42
- }
43
- else {
44
- await selectedUserStorage.clear();
45
- }
46
- }
47
- return secretStorage.clearSessionTopic(accountId);
48
- });
49
- },
50
- async readAccounts() {
51
- return usersStorage.read();
52
- },
53
- async selectAccount(accountId) {
54
- return selectedUserStorage.write(accountId);
55
- },
56
- };
57
- return manager;
58
- };
59
- const createUserStorage = (storage) => {
60
- const KEY = 'Users';
61
- return {
62
- async read() {
63
- const users = await storage.read(KEY);
64
- return users.map(users => {
65
- return users === null ? [] : JSON.parse(users);
66
- });
67
- },
68
- async add(user) {
69
- const usersRaw = await storage.read(KEY);
70
- const users = usersRaw.map(x => (x ? JSON.parse(x) : []));
71
- return users.andThenPromise(async (users) => {
72
- if (users.some(x => x === user)) {
73
- throw new Error(`User ${user} already exists.`);
74
- }
75
- const newUsers = users.concat(user);
76
- return storage.write(KEY, JSON.stringify(newUsers)).then(x => x.map(() => newUsers));
77
- });
78
- },
79
- async remove(user) {
80
- const usersRaw = await storage.read(KEY);
81
- const users = usersRaw.map(x => (x ? JSON.parse(x) : []));
82
- return users.andThenPromise(async (users) => {
83
- const newUsers = users.filter(x => x !== user);
84
- if (newUsers.length !== users.length) {
85
- return storage.write(KEY, JSON.stringify(newUsers)).then(x => x.map(() => newUsers));
86
- }
87
- return ok([]);
88
- });
89
- },
90
- };
91
- };
92
- const createSelectedUserStorage = (storage) => {
93
- const KEY = 'SelectedUser';
94
- return {
95
- read() {
96
- return storage.read(KEY);
97
- },
98
- write(accountId) {
99
- return storage.write(KEY, accountId);
100
- },
101
- clear() {
102
- return storage.clear(KEY);
103
- },
104
- };
105
- };
@@ -1,23 +0,0 @@
1
- import type { Transport } from '@novasamatech/statement-store';
2
- import type { StorageAdapter } from '@novasamatech/storage-adapter';
3
- import type { UserSession, ssoSessionStorage } from './ssoSessionStorage.js';
4
- export type SsoSessionManager = ReturnType<typeof createSsoSessionManager>;
5
- type Params = {
6
- transport: Transport;
7
- storage: StorageAdapter;
8
- ssoSessionStorage: ssoSessionStorage;
9
- };
10
- export declare function createSsoSessionManager({ ssoSessionStorage, transport }: Params): {
11
- sessions: {
12
- add(value: UserSession): import("neverthrow").ResultAsync<UserSession, Error>;
13
- filter(fn: (value: UserSession) => boolean): import("neverthrow").ResultAsync<UserSession[], Error>;
14
- mutate(fn: (value: UserSession[]) => UserSession[]): import("neverthrow").ResultAsync<UserSession[], Error>;
15
- read(): import("neverthrow").ResultAsync<UserSession[], Error>;
16
- write(value: UserSession[]): import("neverthrow").ResultAsync<UserSession[], Error> | import("neverthrow").ResultAsync<null, Error>;
17
- clear(): import("neverthrow").ResultAsync<void, Error>;
18
- subscribe(fn: (value: UserSession[]) => void): VoidFunction;
19
- };
20
- disconnect: (session: UserSession) => import("neverthrow").ResultAsync<undefined, Error>;
21
- destroy(): void;
22
- };
23
- export {};
@@ -1,57 +0,0 @@
1
- import { okAsync } from 'neverthrow';
2
- import { createSSOSession } from './ssoSession.js';
3
- export function createSsoSessionManager({ ssoSessionStorage, transport }) {
4
- let unsubStatements = null;
5
- const disconnect = (session) => {
6
- return ssoSessionStorage.mutate(sessions => sessions.filter(s => s.id !== session.id)).map(() => undefined);
7
- };
8
- const unsubSessions = ssoSessionStorage.subscribe(userSessions => {
9
- if (unsubStatements) {
10
- unsubStatements();
11
- unsubStatements = null;
12
- }
13
- const ssoSessions = [];
14
- for (const userSession of userSessions) {
15
- const session = createSSOSession({
16
- localAccount: userSession.local,
17
- remoteAccount: userSession.remote,
18
- transport,
19
- });
20
- session.subscribe(message => {
21
- switch (message.data.tag) {
22
- case 'v1': {
23
- switch (message.data.value.tag) {
24
- case 'Disconnected':
25
- return disconnect(userSession).map(() => true);
26
- }
27
- }
28
- }
29
- return okAsync(false);
30
- });
31
- ssoSessions.push(session);
32
- }
33
- unsubStatements = () => {
34
- for (const session of ssoSessions) {
35
- session.dispose();
36
- }
37
- };
38
- });
39
- return {
40
- sessions: ssoSessionStorage,
41
- disconnect,
42
- destroy() {
43
- unsubSessions();
44
- },
45
- };
46
- }
47
- // function createDisconnectMessage(ssSecret: SsSecret, topic: Uint8Array) {
48
- // const statement = createStatement(ssSecret, {
49
- // priority: 0,
50
- // channel: createRequestChannel(topic),
51
- // topics: [topic],
52
- // data: SSOMessage.enc({
53
- // tag: 'Disconnected',
54
- // value: undefined,
55
- // }),
56
- // });
57
- // }
@@ -1,10 +0,0 @@
1
- export declare const HostRemoteMessageCodec: import("scale-ts").Codec<{
2
- messageId: string;
3
- data: {
4
- tag: "v1";
5
- value: {
6
- tag: "Disconnected";
7
- value: undefined;
8
- };
9
- };
10
- }>;
@@ -1,13 +0,0 @@
1
- import { Enum, Struct, _void, str } from 'scale-ts';
2
- export const HostRemoteMessageCodec = Struct({
3
- messageId: str,
4
- data: Enum({
5
- v1: Enum({
6
- Disconnected: _void,
7
- // TODO implement
8
- // SigningRequest: Bytes(),
9
- // TODO implement
10
- // SigningResponse: Bytes(),
11
- }),
12
- }),
13
- });
@@ -1,23 +0,0 @@
1
- import type { StorageAdapter } from '../../adapters/storage/types.js';
2
- import type { Transport } from '../../modules/transport/transport.js';
3
- import type { UserSession, UserSessionStorage } from './userSessionStorage.js';
4
- export type SessionManager = ReturnType<typeof createSessionManager>;
5
- type Params = {
6
- transport: Transport;
7
- storage: StorageAdapter;
8
- userSessionStorage: UserSessionStorage;
9
- };
10
- export declare function createSessionManager({ userSessionStorage, storage, transport }: Params): {
11
- sessions: {
12
- add(value: UserSession): import("neverthrow").ResultAsync<UserSession, Error>;
13
- filter(fn: (value: UserSession) => boolean): import("neverthrow").ResultAsync<UserSession[], Error>;
14
- mutate(fn: (value: UserSession[]) => UserSession[]): import("neverthrow").ResultAsync<UserSession[], Error>;
15
- read(): import("neverthrow").ResultAsync<UserSession[], Error>;
16
- write(value: UserSession[]): import("neverthrow").ResultAsync<UserSession[], Error> | import("neverthrow").ResultAsync<null, Error>;
17
- clear(): import("neverthrow").ResultAsync<void, Error>;
18
- subscribe(fn: (value: UserSession[]) => void): VoidFunction;
19
- };
20
- disconnect: (session: UserSession) => import("neverthrow").ResultAsync<undefined, Error>;
21
- destroy(): void;
22
- };
23
- export {};
@@ -1,58 +0,0 @@
1
- import { okAsync } from 'neverthrow';
2
- import { createSSOSession } from './ssoSession.js';
3
- export function createSessionManager({ userSessionStorage, storage, transport }) {
4
- let unsubStatements = null;
5
- const disconnect = (session) => {
6
- return userSessionStorage.mutate(sessions => sessions.filter(s => s.id !== session.id)).map(() => undefined);
7
- };
8
- const unsubSessions = userSessionStorage.subscribe(userSessions => {
9
- if (unsubStatements) {
10
- unsubStatements();
11
- unsubStatements = null;
12
- }
13
- const ssoSessions = [];
14
- for (const userSession of userSessions) {
15
- const session = createSSOSession({
16
- ownAccount: userSession.host,
17
- peerAccount: userSession.peer,
18
- storage,
19
- transport,
20
- });
21
- session.subscribe(message => {
22
- switch (message.data.tag) {
23
- case 'v1': {
24
- switch (message.data.value.tag) {
25
- case 'Disconnected':
26
- return disconnect(userSession).map(() => true);
27
- }
28
- }
29
- }
30
- return okAsync(false);
31
- });
32
- ssoSessions.push(session);
33
- }
34
- unsubStatements = () => {
35
- for (const session of ssoSessions) {
36
- session.dispose();
37
- }
38
- };
39
- });
40
- return {
41
- sessions: userSessionStorage,
42
- disconnect,
43
- destroy() {
44
- unsubSessions();
45
- },
46
- };
47
- }
48
- // function createDisconnectMessage(ssSecret: SsSecret, topic: Uint8Array) {
49
- // const statement = createStatement(ssSecret, {
50
- // priority: 0,
51
- // channel: createRequestChannel(topic),
52
- // topics: [topic],
53
- // data: SSOMessage.enc({
54
- // tag: 'Disconnected',
55
- // value: undefined,
56
- // }),
57
- // });
58
- // }
@@ -1,8 +0,0 @@
1
- import type { LocalSessionAccount, RemoteSessionAccount, Session, Transport } from '@novasamatech/statement-store';
2
- import { HostRemoteMessageCodec } from './scale/remoteMessage.js';
3
- export type SsoSession = Session<typeof HostRemoteMessageCodec>;
4
- export declare function createSSOSession({ localAccount, remoteAccount, transport, }: {
5
- localAccount: LocalSessionAccount;
6
- remoteAccount: RemoteSessionAccount;
7
- transport: Transport;
8
- }): SsoSession;
@@ -1,5 +0,0 @@
1
- import { createSession } from '@novasamatech/statement-store';
2
- import { HostRemoteMessageCodec } from './scale/remoteMessage.js';
3
- export function createSSOSession({ localAccount, remoteAccount, transport, }) {
4
- return createSession({ localAccount, remoteAccount, transport, codec: HostRemoteMessageCodec });
5
- }
@@ -1,21 +0,0 @@
1
- import type { LocalSessionAccount, RemoteSessionAccount } from '@novasamatech/statement-store';
2
- import type { StorageAdapter } from '@novasamatech/storage-adapter';
3
- export type ssoSessionStorage = ReturnType<typeof createSsoSessionStorage>;
4
- export type UserSession = {
5
- id: string;
6
- local: LocalSessionAccount;
7
- remote: RemoteSessionAccount;
8
- };
9
- type Params = {
10
- storage: StorageAdapter;
11
- };
12
- export declare const createSsoSessionStorage: ({ storage }: Params) => {
13
- add(value: UserSession): import("neverthrow").ResultAsync<UserSession, Error>;
14
- filter(fn: (value: UserSession) => boolean): import("neverthrow").ResultAsync<UserSession[], Error>;
15
- mutate(fn: (value: UserSession[]) => UserSession[]): import("neverthrow").ResultAsync<UserSession[], Error>;
16
- read(): import("neverthrow").ResultAsync<UserSession[], Error>;
17
- write(value: UserSession[]): import("neverthrow").ResultAsync<UserSession[], Error> | import("neverthrow").ResultAsync<null, Error>;
18
- clear(): import("neverthrow").ResultAsync<void, Error>;
19
- subscribe(fn: (value: UserSession[]) => void): VoidFunction;
20
- };
21
- export {};
@@ -1,20 +0,0 @@
1
- import { LocalSessionAccountCodec, RemoteSessionAccountCodec } from '@novasamatech/statement-store';
2
- import { fieldListView } from '@novasamatech/storage-adapter';
3
- import { fromHex, toHex } from '@polkadot-api/utils';
4
- import { Struct, Vector, str } from 'scale-ts';
5
- const userSessionCodec = Struct({
6
- id: str,
7
- local: LocalSessionAccountCodec,
8
- remote: RemoteSessionAccountCodec,
9
- });
10
- const userSessionsCodec = Vector(userSessionCodec);
11
- export const createSsoSessionStorage = ({ storage }) => {
12
- return fieldListView({
13
- storage,
14
- key: 'Sessions',
15
- autosync: true,
16
- initial: [],
17
- from: x => userSessionsCodec.dec(fromHex(x)),
18
- to: x => toHex(userSessionsCodec.enc(x)),
19
- });
20
- };
@@ -1,6 +0,0 @@
1
- import type { EncrSecret, SharedSecret, SsSecret } from '../../modules/crypto.js';
2
- export type UserSecrets = {
3
- sharedSecret: SharedSecret;
4
- encr: EncrSecret;
5
- ss: SsSecret;
6
- };
@@ -1 +0,0 @@
1
- export {};
@@ -1,21 +0,0 @@
1
- import type { LocalSessionAccount, RemoteSessionAccount } from '@novasamatech/statement-store';
2
- import type { StorageAdapter } from '@novasamatech/storage-adapter';
3
- export type UserSessionStorage = ReturnType<typeof createUserSessionStorage>;
4
- export type UserSession = {
5
- id: string;
6
- local: LocalSessionAccount;
7
- remote: RemoteSessionAccount;
8
- };
9
- type Params = {
10
- storage: StorageAdapter;
11
- };
12
- export declare const createUserSessionStorage: ({ storage }: Params) => {
13
- add(value: UserSession): import("neverthrow").ResultAsync<UserSession, Error>;
14
- filter(fn: (value: UserSession) => boolean): import("neverthrow").ResultAsync<UserSession[], Error>;
15
- mutate(fn: (value: UserSession[]) => UserSession[]): import("neverthrow").ResultAsync<UserSession[], Error>;
16
- read(): import("neverthrow").ResultAsync<UserSession[], Error>;
17
- write(value: UserSession[]): import("neverthrow").ResultAsync<UserSession[], Error> | import("neverthrow").ResultAsync<null, Error>;
18
- clear(): import("neverthrow").ResultAsync<void, Error>;
19
- subscribe(fn: (value: UserSession[]) => void): VoidFunction;
20
- };
21
- export {};
@@ -1,20 +0,0 @@
1
- import { LocalSessionAccountCodec, RemoteSessionAccountCodec } from '@novasamatech/statement-store';
2
- import { fieldListView } from '@novasamatech/storage-adapter';
3
- import { fromHex, toHex } from '@polkadot-api/utils';
4
- import { Struct, Vector, str } from 'scale-ts';
5
- const userSessionCodec = Struct({
6
- id: str,
7
- local: LocalSessionAccountCodec,
8
- remote: RemoteSessionAccountCodec,
9
- });
10
- const userSessionsCodec = Vector(userSessionCodec);
11
- export const createUserSessionStorage = ({ storage }) => {
12
- return fieldListView({
13
- storage,
14
- key: 'Sessions',
15
- autosync: true,
16
- initial: [],
17
- from: x => userSessionsCodec.dec(fromHex(x)),
18
- to: x => toHex(userSessionsCodec.enc(x)),
19
- });
20
- };
@@ -1,5 +0,0 @@
1
- import type { LazyClient } from '@novasamatech/statement-store';
2
- import type { IdentityRepository } from '../../identity/types.js';
3
- export declare const createAttestationService: (lazyClient: LazyClient, identity: IdentityRepository) => {
4
- claimUsername(name: string): void;
5
- };
@@ -1,15 +0,0 @@
1
- export const createAttestationService = (lazyClient, identity) => {
2
- function generateSuffix(length) {
3
- let suffix = '';
4
- for (let i = 0; i < length; i++) {
5
- suffix += (Math.random() * 9).toFixed();
6
- }
7
- return suffix;
8
- }
9
- return {
10
- claimUsername(name) {
11
- const client = lazyClient.getClient();
12
- const api = client.getUnsafeApi();
13
- },
14
- };
15
- };
@@ -1,22 +0,0 @@
1
- import type { LocalSessionAccount, RemoteSessionAccount } from '@novasamatech/statement-store';
2
- import type { StorageAdapter } from '@novasamatech/storage-adapter';
3
- export type SsoSessionRepository = ReturnType<typeof createSsoSessionRepository>;
4
- export type UserSession = {
5
- id: string;
6
- local: LocalSessionAccount;
7
- remote: RemoteSessionAccount;
8
- };
9
- export declare function createUserSession(localAccount: LocalSessionAccount, remoteAccount: RemoteSessionAccount): UserSession;
10
- type Params = {
11
- storage: StorageAdapter;
12
- };
13
- export declare const createSsoSessionRepository: ({ storage }: Params) => {
14
- add(value: UserSession): import("neverthrow").ResultAsync<UserSession, Error>;
15
- filter(fn: (value: UserSession) => boolean): import("neverthrow").ResultAsync<UserSession[], Error>;
16
- mutate(fn: (value: UserSession[]) => UserSession[]): import("neverthrow").ResultAsync<UserSession[], Error>;
17
- read(): import("neverthrow").ResultAsync<UserSession[], Error>;
18
- write(value: UserSession[]): import("neverthrow").ResultAsync<UserSession[], Error> | import("neverthrow").ResultAsync<null, Error>;
19
- clear(): import("neverthrow").ResultAsync<void, Error>;
20
- subscribe(fn: (value: UserSession[]) => void): VoidFunction;
21
- };
22
- export {};
@@ -1,27 +0,0 @@
1
- import { LocalSessionAccountCodec, RemoteSessionAccountCodec } from '@novasamatech/statement-store';
2
- import { fieldListView } from '@novasamatech/storage-adapter';
3
- import { fromHex, toHex } from '@polkadot-api/utils';
4
- import { nanoid } from 'nanoid';
5
- import { Struct, Vector, str } from 'scale-ts';
6
- const userSessionCodec = Struct({
7
- id: str,
8
- local: LocalSessionAccountCodec,
9
- remote: RemoteSessionAccountCodec,
10
- });
11
- export function createUserSession(localAccount, remoteAccount) {
12
- return {
13
- id: nanoid(12),
14
- local: localAccount,
15
- remote: remoteAccount,
16
- };
17
- }
18
- const userSessionsCodec = Vector(userSessionCodec);
19
- export const createSsoSessionRepository = ({ storage }) => {
20
- return fieldListView({
21
- storage,
22
- key: 'SsoSessions',
23
- initial: [],
24
- from: x => userSessionsCodec.dec(fromHex(x)),
25
- to: x => toHex(userSessionsCodec.enc(x)),
26
- });
27
- };
@@ -1,19 +0,0 @@
1
- import type { CodecType } from 'scale-ts';
2
- export type SignRequest = CodecType<typeof SignRequestCodec>;
3
- export declare const SignRequestCodec: import("scale-ts").Codec<{
4
- address: string;
5
- blockHash: `0x${string}`;
6
- blockNumber: `0x${string}`;
7
- era: `0x${string}`;
8
- genesisHash: `0x${string}`;
9
- method: string;
10
- nonce: `0x${string}`;
11
- specVersion: `0x${string}`;
12
- tip: `0x${string}`;
13
- transactionVersion: `0x${string}`;
14
- signedExtensions: string[];
15
- version: number;
16
- assetId: `0x${string}` | undefined;
17
- mode: number | undefined;
18
- withSignedTransaction: boolean | undefined;
19
- }>;
@@ -1,19 +0,0 @@
1
- import { Option, Struct, Vector, bool, str, u32 } from 'scale-ts';
2
- import { hexCodec } from './hex.js';
3
- export const SignRequestCodec = Struct({
4
- address: str,
5
- blockHash: hexCodec,
6
- blockNumber: hexCodec,
7
- era: hexCodec,
8
- genesisHash: hexCodec,
9
- method: str,
10
- nonce: hexCodec,
11
- specVersion: hexCodec,
12
- tip: hexCodec,
13
- transactionVersion: hexCodec,
14
- signedExtensions: Vector(str),
15
- version: u32,
16
- assetId: Option(hexCodec),
17
- mode: Option(u32),
18
- withSignedTransaction: Option(bool),
19
- });
@@ -1,6 +0,0 @@
1
- import type { CodecType } from 'scale-ts';
2
- export type SignResponse = CodecType<typeof SignResponseCodec>;
3
- export declare const SignResponseCodec: import("scale-ts").Codec<{
4
- signature: Uint8Array<ArrayBufferLike>;
5
- SignedTransaction: Uint8Array<ArrayBufferLike>;
6
- }>;
@@ -1,5 +0,0 @@
1
- import { Bytes, Struct } from 'scale-ts';
2
- export const SignResponseCodec = Struct({
3
- signature: Bytes(),
4
- SignedTransaction: Bytes(),
5
- });
@@ -1,23 +0,0 @@
1
- import type { Encryption, StatementProver, StatementStoreAdapter } from '@novasamatech/statement-store';
2
- import type { StorageAdapter } from '@novasamatech/storage-adapter';
3
- import { ResultAsync } from 'neverthrow';
4
- import type { CodecType } from 'scale-ts';
5
- import type { Callback } from '../../types.js';
6
- import type { UserSession } from '../ssoSessionRepository.js';
7
- import { RemoteMessageCodec, RemoteMessageDataCodec } from './scale/remoteMessage.js';
8
- export type SsoSession = ReturnType<typeof createSsoSession>;
9
- export declare function createSsoSession({ userSession, statementStore, encryption, storage, prover, }: {
10
- userSession: UserSession;
11
- statementStore: StatementStoreAdapter;
12
- encryption: Encryption;
13
- storage: StorageAdapter;
14
- prover: StatementProver;
15
- }): {
16
- request(message: CodecType<typeof RemoteMessageDataCodec>): ResultAsync<{
17
- requestId: string;
18
- }, Error>;
19
- sendDisconnectMessage(): ResultAsync<{
20
- requestId: string;
21
- }, Error>;
22
- subscribe(callback: Callback<CodecType<typeof RemoteMessageCodec>, ResultAsync<boolean, Error>>): VoidFunction;
23
- };
@@ -1,69 +0,0 @@
1
- import { createSession } from '@novasamatech/statement-store';
2
- import { fieldListView } from '@novasamatech/storage-adapter';
3
- import { nanoid } from 'nanoid';
4
- import { ResultAsync, okAsync } from 'neverthrow';
5
- import { RemoteMessageCodec, RemoteMessageDataCodec } from './scale/remoteMessage.js';
6
- export function createSsoSession({ userSession, statementStore, encryption, storage, prover, }) {
7
- const session = createSession({
8
- localAccount: userSession.local,
9
- remoteAccount: userSession.remote,
10
- statementStore,
11
- encryption,
12
- prover,
13
- });
14
- const processedMessages = fieldListView({
15
- storage,
16
- key: `sso_processed_${userSession.id}`,
17
- from: JSON.parse,
18
- to: JSON.stringify,
19
- initial: [],
20
- });
21
- return {
22
- request(message) {
23
- return session.submitRequest(RemoteMessageCodec, {
24
- messageId: nanoid(),
25
- data: message,
26
- });
27
- },
28
- sendDisconnectMessage() {
29
- return session.submitRequest(RemoteMessageCodec, {
30
- messageId: nanoid(),
31
- data: {
32
- tag: 'v1',
33
- value: {
34
- tag: 'Disconnected',
35
- value: undefined,
36
- },
37
- },
38
- });
39
- },
40
- subscribe(callback) {
41
- return session.subscribe(RemoteMessageCodec, messages => {
42
- processedMessages.read().andThen(processed => {
43
- const results = messages.map(message => {
44
- if (message.type === 'request') {
45
- const isMessageProcessed = processed.includes(message.data.messageId);
46
- if (isMessageProcessed) {
47
- return okAsync({ processed: false });
48
- }
49
- return callback(message.data)
50
- .orTee(error => {
51
- console.error('Error while processing sso messsage:', error);
52
- })
53
- .orElse(() => okAsync(false))
54
- .map(processed => (processed ? { processed, message: message.data } : { processed }));
55
- }
56
- return okAsync({ processed: false });
57
- });
58
- return ResultAsync.combine(results).andThen(results => {
59
- const newMessages = results.filter(x => x.processed).map(x => x.message.messageId);
60
- if (newMessages.length > 0) {
61
- return processedMessages.mutate(x => x.concat(newMessages));
62
- }
63
- return okAsync();
64
- });
65
- });
66
- });
67
- },
68
- };
69
- }
@@ -1,4 +0,0 @@
1
- import type { StatementProver } from '@novasamatech/statement-store';
2
- import type { UserSession } from '../ssoSessionRepository.js';
3
- import type { UserSecretRepository } from '../userSecretRepository.js';
4
- export declare function createSsoStatementProver(userSession: UserSession, userSecretRepository: UserSecretRepository): StatementProver;