@or-sdk/authorizer 0.24.14-beta.944.0 → 0.24.14-beta.971.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 (81) hide show
  1. package/dist/cjs/Basic/BasicCollection.js +112 -23
  2. package/dist/cjs/Basic/BasicCollection.js.map +1 -1
  3. package/dist/cjs/Basic/index.js +21 -0
  4. package/dist/cjs/Basic/index.js.map +1 -0
  5. package/dist/cjs/OAuth/OAuth.js +4 -1
  6. package/dist/cjs/OAuth/OAuth.js.map +1 -1
  7. package/dist/cjs/OAuth/OAuthCollection.js +17 -6
  8. package/dist/cjs/OAuth/OAuthCollection.js.map +1 -1
  9. package/dist/cjs/OAuth/index.js +23 -0
  10. package/dist/cjs/OAuth/index.js.map +1 -0
  11. package/dist/cjs/OAuth/types.js.map +1 -1
  12. package/dist/cjs/Token/TokenCollection.js +82 -20
  13. package/dist/cjs/Token/TokenCollection.js.map +1 -1
  14. package/dist/cjs/Token/index.js +21 -0
  15. package/dist/cjs/Token/index.js.map +1 -0
  16. package/dist/cjs/index.js +8 -13
  17. package/dist/cjs/index.js.map +1 -1
  18. package/dist/esm/Basic/BasicCollection.js +79 -20
  19. package/dist/esm/Basic/BasicCollection.js.map +1 -1
  20. package/dist/esm/Basic/index.js +3 -0
  21. package/dist/esm/Basic/index.js.map +1 -0
  22. package/dist/esm/OAuth/OAuth.js +4 -1
  23. package/dist/esm/OAuth/OAuth.js.map +1 -1
  24. package/dist/esm/OAuth/OAuthCollection.js +17 -6
  25. package/dist/esm/OAuth/OAuthCollection.js.map +1 -1
  26. package/dist/esm/OAuth/index.js +4 -0
  27. package/dist/esm/OAuth/index.js.map +1 -0
  28. package/dist/esm/OAuth/types.js.map +1 -1
  29. package/dist/esm/Token/TokenCollection.js +50 -18
  30. package/dist/esm/Token/TokenCollection.js.map +1 -1
  31. package/dist/esm/Token/index.js +3 -0
  32. package/dist/esm/Token/index.js.map +1 -0
  33. package/dist/esm/index.js +3 -6
  34. package/dist/esm/index.js.map +1 -1
  35. package/dist/types/Basic/BasicCollection.d.ts +15 -6
  36. package/dist/types/Basic/BasicCollection.d.ts.map +1 -1
  37. package/dist/types/Basic/index.d.ts +3 -0
  38. package/dist/types/Basic/index.d.ts.map +1 -0
  39. package/dist/types/Basic/types.d.ts +3 -1
  40. package/dist/types/Basic/types.d.ts.map +1 -1
  41. package/dist/types/OAuth/OAuth.d.ts.map +1 -1
  42. package/dist/types/OAuth/OAuthCollection.d.ts +6 -4
  43. package/dist/types/OAuth/OAuthCollection.d.ts.map +1 -1
  44. package/dist/types/OAuth/index.d.ts +4 -0
  45. package/dist/types/OAuth/index.d.ts.map +1 -0
  46. package/dist/types/OAuth/types.d.ts +4 -1
  47. package/dist/types/OAuth/types.d.ts.map +1 -1
  48. package/dist/types/Token/TokenCollection.d.ts +7 -7
  49. package/dist/types/Token/TokenCollection.d.ts.map +1 -1
  50. package/dist/types/Token/index.d.ts +3 -0
  51. package/dist/types/Token/index.d.ts.map +1 -0
  52. package/dist/types/Token/types.d.ts +2 -0
  53. package/dist/types/Token/types.d.ts.map +1 -1
  54. package/dist/types/index.d.ts +3 -6
  55. package/dist/types/index.d.ts.map +1 -1
  56. package/package.json +33 -2
  57. package/src/Basic/BasicCollection.ts +138 -28
  58. package/src/Basic/index.ts +3 -0
  59. package/src/Basic/types.ts +3 -1
  60. package/src/OAuth/OAuth.ts +4 -0
  61. package/src/OAuth/OAuthCollection.ts +39 -10
  62. package/src/OAuth/index.ts +4 -0
  63. package/src/OAuth/types.ts +5 -1
  64. package/src/Token/TokenCollection.ts +94 -25
  65. package/src/Token/index.ts +3 -0
  66. package/src/Token/types.ts +2 -0
  67. package/src/index.ts +3 -8
  68. package/dist/cjs/Basic/BasicAuth.js +0 -162
  69. package/dist/cjs/Basic/BasicAuth.js.map +0 -1
  70. package/dist/cjs/Token/TokenAuth.js +0 -140
  71. package/dist/cjs/Token/TokenAuth.js.map +0 -1
  72. package/dist/esm/Basic/BasicAuth.js +0 -88
  73. package/dist/esm/Basic/BasicAuth.js.map +0 -1
  74. package/dist/esm/Token/TokenAuth.js +0 -66
  75. package/dist/esm/Token/TokenAuth.js.map +0 -1
  76. package/dist/types/Basic/BasicAuth.d.ts +0 -20
  77. package/dist/types/Basic/BasicAuth.d.ts.map +0 -1
  78. package/dist/types/Token/TokenAuth.d.ts +0 -12
  79. package/dist/types/Token/TokenAuth.d.ts.map +0 -1
  80. package/src/Basic/BasicAuth.ts +0 -130
  81. package/src/Token/TokenAuth.ts +0 -102
@@ -1,14 +1,14 @@
1
1
  import { List } from '@or-sdk/base';
2
- import { TokenAuth } from './TokenAuth';
3
- import { TokenCollectionConfig, CreateTokenAuthInCollectionConfig } from './types';
2
+ import { TokenCollectionConfig, CreateTokenAuthInCollectionConfig, TokenAuthData } from './types';
4
3
  export declare class TokenCollection {
5
- private readonly serviceName;
4
+ private serviceName;
6
5
  private readonly keyValueStorage;
7
- private readonly localToken;
8
- private readonly localDiscoveryUrl;
9
6
  constructor(params: TokenCollectionConfig);
7
+ init(serviceName: string): void;
10
8
  listAuthorizations(): Promise<List<string>>;
11
- getAuthorization(key: string): Promise<TokenAuth>;
12
- createAuthorization(params: CreateTokenAuthInCollectionConfig): Promise<TokenAuth>;
9
+ getAuthorization(key: string): Promise<TokenAuthData>;
10
+ createAuthorization(params: CreateTokenAuthInCollectionConfig): Promise<TokenAuthData>;
11
+ updateAuthorization(tokenAuth: TokenAuthData, newCredentials: Record<string, unknown>): Promise<TokenAuthData>;
12
+ deleteAuthorization(key: string): Promise<void>;
13
13
  }
14
14
  //# sourceMappingURL=TokenCollection.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"TokenCollection.d.ts","sourceRoot":"","sources":["../../../src/Token/TokenCollection.ts"],"names":[],"mappings":"AAAA,OAAO,EAAmB,IAAI,EAAE,MAAM,cAAc,CAAC;AAErD,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAExC,OAAO,EACL,qBAAqB,EACrB,iCAAiC,EAClC,MAAM,SAAS,CAAC;AAEjB,qBAAa,eAAe;IAC1B,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAS;IACrC,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAkB;IAClD,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAQ;IACnC,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAS;gBAE/B,MAAM,EAAE,qBAAqB;IAe5B,kBAAkB,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAS3C,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC;IA4BjD,mBAAmB,CAC9B,MAAM,EAAE,iCAAiC,GACxC,OAAO,CAAC,SAAS,CAAC;CAStB"}
1
+ {"version":3,"file":"TokenCollection.d.ts","sourceRoot":"","sources":["../../../src/Token/TokenCollection.ts"],"names":[],"mappings":"AAAA,OAAO,EAAY,IAAI,EAAE,MAAM,cAAc,CAAC;AAK9C,OAAO,EACL,qBAAqB,EACrB,iCAAiC,EACjC,aAAa,EACd,MAAM,SAAS,CAAC;AAEjB,qBAAa,eAAe;IAC1B,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAkB;gBAEtC,MAAM,EAAE,qBAAqB;IAelC,IAAI,CAAC,WAAW,EAAE,MAAM;IAUlB,kBAAkB,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAS3C,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC;IAoCrD,mBAAmB,CAC9B,MAAM,EAAE,iCAAiC,GACxC,OAAO,CAAC,aAAa,CAAC;IA2BZ,mBAAmB,CAC9B,SAAS,EAAE,aAAa,EACxB,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GACtC,OAAO,CAAC,aAAa,CAAC;IAyBZ,mBAAmB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAK7D"}
@@ -0,0 +1,3 @@
1
+ export { TokenCollection } from './TokenCollection';
2
+ export * from './types';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/Token/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAEpD,cAAc,SAAS,CAAC"}
@@ -7,6 +7,7 @@ export declare type TokenAuthConfig = {
7
7
  };
8
8
  export declare type TokenAuthData = {
9
9
  auth_name: string;
10
+ key: string;
10
11
  date_created: string;
11
12
  [credentialKey: string]: string;
12
13
  };
@@ -22,5 +23,6 @@ export declare type TokenCollectionConfig = {
22
23
  token: Token;
23
24
  discoveryUrl: string;
24
25
  serviceName: string;
26
+ accountId?: string;
25
27
  };
26
28
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/Token/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,cAAc,CAAC;AAErC,oBAAY,eAAe,GAAG;IAI5B,KAAK,EAAE,KAAK,CAAC;IACb,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,oBAAY,aAAa,GAAG;IAC1B,SAAS,EAAE,MAAM,CAAC;IAIlB,YAAY,EAAE,MAAM,CAAC;IAKrB,CAAC,aAAa,EAAE,MAAM,GAAG,MAAM,CAAC;CACjC,CAAC;AAEF,oBAAY,qBAAqB,GAAG;IAClC,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IAKjB,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAKrC,KAAK,EAAE,KAAK,CAAC;IACb,YAAY,EAAE,MAAM,CAAC;CACtB,CAAC;AAEF,oBAAY,iCAAiC,GAAG,IAAI,CAAC,qBAAqB,EAAE,aAAa,GAAG,cAAc,GAAG,OAAO,CAAC,CAAC;AAEtH,oBAAY,qBAAqB,GAAG;IAIlC,KAAK,EAAE,KAAK,CAAC;IACb,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;CACrB,CAAC"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/Token/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,cAAc,CAAC;AAErC,oBAAY,eAAe,GAAG;IAI5B,KAAK,EAAE,KAAK,CAAC;IACb,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,oBAAY,aAAa,GAAG;IAC1B,SAAS,EAAE,MAAM,CAAC;IAClB,GAAG,EAAE,MAAM,CAAC;IAIZ,YAAY,EAAE,MAAM,CAAC;IAKrB,CAAC,aAAa,EAAE,MAAM,GAAG,MAAM,CAAC;CACjC,CAAC;AAEF,oBAAY,qBAAqB,GAAG;IAClC,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IAKjB,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAKrC,KAAK,EAAE,KAAK,CAAC;IACb,YAAY,EAAE,MAAM,CAAC;CACtB,CAAC;AAEF,oBAAY,iCAAiC,GAAG,IAAI,CAAC,qBAAqB,EAAE,aAAa,GAAG,cAAc,GAAG,OAAO,CAAC,CAAC;AAEtH,oBAAY,qBAAqB,GAAG;IAIlC,KAAK,EAAE,KAAK,CAAC;IACb,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC"}
@@ -1,8 +1,5 @@
1
- export { BasicAuth } from './Basic/BasicAuth';
2
- export { BasicCollection } from './Basic/BasicCollection';
3
- export { TokenAuth } from './Token/TokenAuth';
4
- export { TokenCollection } from './Token/TokenCollection';
5
- export { OAuth } from './OAuth/OAuth';
6
- export { OAuthCollection } from './OAuth/OAuthCollection';
1
+ export { BasicCollection } from './Basic/index';
2
+ export { TokenCollection } from './Token/index';
3
+ export { OAuth, OAuthCollection } from './OAuth/index';
7
4
  export * from './types';
8
5
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAC9C,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAE1D,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAC9C,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAE1D,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AACtC,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAE1D,cAAc,SAAS,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,KAAK,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAEvD,cAAc,SAAS,CAAC"}
package/package.json CHANGED
@@ -1,9 +1,40 @@
1
1
  {
2
2
  "name": "@or-sdk/authorizer",
3
- "version": "0.24.14-beta.944.0",
3
+ "version": "0.24.14-beta.971.0",
4
4
  "main": "dist/cjs/index.js",
5
5
  "module": "dist/esm/index.js",
6
6
  "types": "dist/types/index.d.ts",
7
+ "typesVersions": {
8
+ "*": {
9
+ "Basic": [
10
+ "dist/types/Basic/index.d.ts"
11
+ ],
12
+ "OAuth": [
13
+ "dist/types/OAuth/index.d.ts"
14
+ ],
15
+ "Token": [
16
+ "dist/types/Token/index.d.ts"
17
+ ]
18
+ }
19
+ },
20
+ "exports": {
21
+ ".": {
22
+ "import": "./dist/esm/index.js",
23
+ "require": "./dist/cjs/index.js"
24
+ },
25
+ "./Basic": {
26
+ "import": "./dist/esm/Basic/index.js",
27
+ "require": "./dist/cjs/Basic/index.js"
28
+ },
29
+ "./OAuth": {
30
+ "import": "./dist/esm/OAuth/index.js",
31
+ "require": "./dist/cjs/OAuth/index.js"
32
+ },
33
+ "./Token": {
34
+ "import": "./dist/esm/Token/index.js",
35
+ "require": "./dist/cjs/Token/index.js"
36
+ }
37
+ },
7
38
  "scripts": {
8
39
  "build": "pnpm clean && pnpm build:esm && pnpm build:cjs",
9
40
  "build:cjs": "tsc --project tsconfig.json",
@@ -21,7 +52,7 @@
21
52
  "@or-sdk/discovery": "^1.6.1",
22
53
  "@or-sdk/event-manager": "^0.24.8",
23
54
  "@or-sdk/key-value-storage": "^0.25.8",
24
- "@or-sdk/providers": "^0.2.2-beta.944.0",
55
+ "@or-sdk/providers": "^0.2.2-beta.971.0",
25
56
  "uuid": "^8.3.2"
26
57
  },
27
58
  "devDependencies": {
@@ -1,6 +1,8 @@
1
- import { Token, List, makeList } from '@or-sdk/base';
1
+ import { List, makeList } from '@or-sdk/base';
2
2
  import { KeyValueStorage } from '@or-sdk/key-value-storage';
3
- import { BasicAuth } from './BasicAuth';
3
+ import { BasicAuthData } from './types';
4
+ import { createAuthKey } from './utils/createAuthKey';
5
+ import { v4 as uuidv4 } from 'uuid';
4
6
 
5
7
  import {
6
8
  BasicCollectionConfig,
@@ -8,23 +10,50 @@ import {
8
10
  } from './types';
9
11
 
10
12
  export class BasicCollection {
11
- private readonly serviceName: string;
13
+ private serviceName: string;
12
14
  private readonly keyValueStorage: KeyValueStorage;
13
- private readonly localToken: Token;
14
- private readonly localDiscoveryUrl: string;
15
15
 
16
16
  constructor(params: BasicCollectionConfig) {
17
- const { token, discoveryUrl, serviceName } = params;
17
+ const { token, discoveryUrl, serviceName, accountId } = params;
18
18
 
19
- this.localToken = token;
20
- this.localDiscoveryUrl = discoveryUrl;
21
- this.serviceName = serviceName;
19
+ this.serviceName = serviceName || '';
22
20
  this.keyValueStorage = new KeyValueStorage({
23
21
  token,
24
22
  discoveryUrl,
23
+ accountId,
25
24
  });
26
25
  }
27
26
 
27
+
28
+ /**
29
+ * Allows to explicitly (re-)set authorization service name
30
+ */
31
+ public init(serviceName: string) {
32
+ if (!serviceName) throw new Error('Service name is required.');
33
+
34
+ this.serviceName = serviceName;
35
+ }
36
+
37
+
38
+ /**
39
+ * Encodes username and password into Basic authorization token
40
+ */
41
+ static encodeAccessToken(username: string, password: string): string {
42
+ return btoa(`${username}:${password}`);
43
+ }
44
+
45
+ /**
46
+ * Decodes base64 encoded token and parses it to username and password
47
+ */
48
+ static decodeAccessToken(token: string): {username: string; password: string;} {
49
+ const [username, password] = atob(token).split(':');
50
+ return {
51
+ username,
52
+ password,
53
+ };
54
+ }
55
+
56
+
28
57
  /**
29
58
  * Returns array of auth keys from this collection
30
59
  */
@@ -34,30 +63,42 @@ export class BasicCollection {
34
63
  return makeList<string>(records.map((record) => record.key).filter(key => key.includes('::basic')));
35
64
  }
36
65
 
66
+
37
67
  /**
38
68
  * Returns BasicAuth instance for given key
39
69
  */
40
- public async getAuthorization(key: string): Promise<BasicAuth> {
41
- if (!key.includes('::basic')) throw new Error('The Token authorization key should contain "basic" type specifier.');
70
+ public async getAuthorization(key: string): Promise<BasicAuthData> {
71
+ if (!this.serviceName) throw new Error('Service name is not defined.');
72
+ if (!key.includes('::basic')) throw new Error('The basic authorization key should contain "basic" type specifier.');
73
+
42
74
  const record = await this.keyValueStorage.getValueByKey(this.serviceName, encodeURIComponent(key));
75
+
43
76
  if (!record.value) {
44
- throw new Error('Authorization does not exist');
77
+ throw new Error('Authorization does not exist.');
45
78
  }
46
79
 
47
- return new BasicAuth({
48
- serviceName: this.serviceName,
49
- authKey: key,
50
- discoveryUrl: this.localDiscoveryUrl,
51
- token: this.localToken,
52
- });
80
+
81
+ const authRecord = record.value as Omit<BasicAuthData, 'key'>;
82
+
83
+ if (!authRecord.auth_name || !authRecord.access_token || !authRecord.date_created) {
84
+ throw new Error('Authorization does not exist or invalid.');
85
+ }
86
+
87
+ return {
88
+ auth_name: authRecord.auth_name,
89
+ access_token: authRecord.access_token,
90
+ date_created: authRecord.date_created,
91
+ key,
92
+ } as BasicAuthData;
53
93
  }
54
94
 
95
+
55
96
  /**
56
97
  * Creates a new auth record in current collection with the given config.
57
98
  * @returns BasicAuth instance connected to created auth
58
99
  *
59
100
  * ```typescript
60
- * const basicAuthInstance = await basicCollectionInstance.createAuthorization({
101
+ * const basicAuthData = await basicCollectionInstance.createAuthorization({
61
102
  * authName: 'my-auth-name',
62
103
  * username: 'user',
63
104
  * password: 'pass'
@@ -66,14 +107,83 @@ export class BasicCollection {
66
107
  */
67
108
  public async createAuthorization(
68
109
  params: CreateBasicAuthInCollectionConfig
69
- ): Promise<BasicAuth> {
70
- return await BasicAuth.create({
71
- discoveryUrl: this.localDiscoveryUrl,
72
- token: this.localToken,
73
- serviceName: this.serviceName,
74
- authName: params.authName,
75
- password: params.password,
76
- username: params.username,
77
- });
110
+ ): Promise<BasicAuthData> {
111
+
112
+ const { authName, password, username } = params;
113
+
114
+ if (!authName || !username || !password) {
115
+ throw new Error('Invalid authorization config passed.');
116
+ }
117
+
118
+ if (!this.serviceName) throw new Error('Service name is not defined.');
119
+
120
+
121
+ const id = uuidv4();
122
+ const authKey = createAuthKey(id, authName);
123
+
124
+ const authData = {
125
+ auth_name: authName,
126
+ access_token: BasicCollection.encodeAccessToken(username, password),
127
+ date_created: new Date().toISOString(),
128
+ } as Omit<BasicAuthData, 'key'>;
129
+
130
+ await this.keyValueStorage.setValueByKey(this.serviceName, encodeURIComponent(authKey), authData);
131
+
132
+ return {
133
+ ...authData,
134
+ key: authKey,
135
+ } as BasicAuthData;
136
+ }
137
+
138
+
139
+ /**
140
+ * Returns array of auth keys from this collection
141
+ */
142
+ public async updateAuthorization(
143
+ basicAuth: BasicAuthData,
144
+ newCredentials: { username?: string; password?: string; }
145
+ ): Promise<BasicAuthData> {
146
+ if (!basicAuth || !basicAuth.key || !basicAuth.access_token) {
147
+ throw new Error('Authorization is invalid.');
148
+ }
149
+
150
+ if (!this.serviceName) throw new Error('Service name is not defined.');
151
+
152
+
153
+ let { username, password } = BasicCollection.decodeAccessToken(basicAuth.access_token);
154
+
155
+ if (newCredentials.username) {
156
+ username = newCredentials.username;
157
+ }
158
+ if (newCredentials.password) {
159
+ password = newCredentials.password;
160
+ }
161
+
162
+ const access_token = BasicCollection.encodeAccessToken(username, password);
163
+ const response = await this.keyValueStorage.setValueByKey(
164
+ this.serviceName,
165
+ encodeURIComponent(basicAuth.key),
166
+ {
167
+ auth_name: basicAuth.auth_name,
168
+ date_created: basicAuth.date_created,
169
+ access_token,
170
+ }
171
+ );
172
+
173
+ const updatedData = response.value as Omit<BasicAuthData, 'key'>;
174
+ return {
175
+ ...updatedData,
176
+ key: basicAuth.key,
177
+ } as BasicAuthData;
178
+ }
179
+
180
+
181
+ /**
182
+ * Deletes authorization from collection
183
+ */
184
+ public async deleteAuthorization(authKey: string): Promise<void> {
185
+ if (!this.serviceName) throw new Error('Service name is not defined.');
186
+ await this.keyValueStorage.deleteKey(this.serviceName, encodeURIComponent(authKey));
78
187
  }
79
188
  }
189
+
@@ -0,0 +1,3 @@
1
+ export { BasicCollection } from './BasicCollection';
2
+
3
+ export * from './types';
@@ -14,6 +14,7 @@ export type BasicAuthConfig = {
14
14
  };
15
15
 
16
16
  export type BasicAuthData = {
17
+ key: string;
17
18
  auth_name: string;
18
19
 
19
20
  /**
@@ -50,5 +51,6 @@ export type BasicCollectionConfig = {
50
51
  * function which return token
51
52
  */
52
53
  discoveryUrl: string;
53
- serviceName: string;
54
+ accountId?: string;
55
+ serviceName?: string;
54
56
  };
@@ -39,6 +39,7 @@ export class OAuth {
39
39
 
40
40
  constructor(params: OAuthConfig) {
41
41
  const {
42
+ accountId,
42
43
  authKey,
43
44
  discoveryUrl,
44
45
  eventManagerUrl,
@@ -63,6 +64,7 @@ export class OAuth {
63
64
  this.keyValueStorage = new KeyValueStorage({
64
65
  token,
65
66
  discoveryUrl,
67
+ accountId,
66
68
  });
67
69
 
68
70
  this.providers = new Providers({
@@ -163,6 +165,7 @@ export class OAuth {
163
165
  const keyValueStorage = new KeyValueStorage({
164
166
  token,
165
167
  discoveryUrl,
168
+ accountId,
166
169
  });
167
170
 
168
171
  const providers = new Providers({
@@ -270,6 +273,7 @@ export class OAuth {
270
273
  const authorizeUrl = authUrl.href;
271
274
 
272
275
  const newOAuth = new OAuth({
276
+ accountId,
273
277
  authKey,
274
278
  discoveryUrl,
275
279
  eventManagerUrl,
@@ -2,34 +2,60 @@ import { Token, List, makeList } from '@or-sdk/base';
2
2
  import { KeyValueStorage } from '@or-sdk/key-value-storage';
3
3
  import { OAuth } from './OAuth';
4
4
 
5
- import { OAuthCollectionConfig, CreateOAuthInCollectionConfig, CreateOAuthResult, OAuthApp } from './types';
5
+ import {
6
+ CreateOAuthInCollectionConfig,
7
+ CreateOAuthResult,
8
+ OAuthCollectionConfig,
9
+ OAuthApp,
10
+ OAuthCollectionInitConfig,
11
+ } from './types';
6
12
 
7
13
  export class OAuthCollection {
8
- private readonly serviceName: string;
9
- private readonly keyValueCollection: string;
10
- private readonly keyValueStorage: KeyValueStorage;
14
+ private serviceName: string;
15
+ private keyValueCollection: string;
16
+ private keyValueStorage: KeyValueStorage;
17
+ private localAccountId: string | undefined;
11
18
  private readonly localToken: Token;
12
19
  private readonly localDiscoveryUrl: string;
13
20
 
14
21
  constructor(params: OAuthCollectionConfig) {
15
- const { token, discoveryUrl, serviceName, keyValueCollection } = params;
22
+ const { token, discoveryUrl, accountId, serviceName, keyValueCollection } = params;
16
23
 
17
24
  this.localToken = token;
25
+ this.localAccountId = accountId;
18
26
  this.localDiscoveryUrl = discoveryUrl;
19
- this.serviceName = serviceName;
20
- this.keyValueCollection = keyValueCollection || serviceName;
27
+ this.serviceName = serviceName || '';
28
+ this.keyValueCollection = keyValueCollection || serviceName || '';
29
+
21
30
  this.keyValueStorage = new KeyValueStorage({
22
- token,
23
- discoveryUrl,
31
+ token: this.localToken,
32
+ discoveryUrl: this.localDiscoveryUrl,
33
+ accountId: this.localAccountId,
24
34
  });
25
35
  }
26
36
 
37
+
38
+ /**
39
+ * Allows to explicitly (re)initialize collection parameters
40
+ */
41
+ public init(params: OAuthCollectionInitConfig): void {
42
+ const { serviceName, keyValueCollection } = params;
43
+
44
+ this.serviceName = serviceName || this.serviceName;
45
+ this.keyValueCollection = keyValueCollection || this.keyValueCollection || this.serviceName;
46
+
47
+ if (!this.serviceName) {
48
+ throw new Error('Service Name is required.');
49
+ }
50
+ }
51
+
52
+
27
53
  /**
28
54
  * Returns array of auth keys from this collection
29
55
  */
30
56
  public async listAuthorizations(): Promise<List<string>> {
31
57
  const { items: records } = await this.keyValueStorage.listKeys(
32
- this.keyValueCollection
58
+ this.keyValueCollection || ''
33
59
  );
34
60
 
35
61
  return makeList<string>(records.map((record) => record.key).filter(key => key.includes('::oauth')));
@@ -59,6 +85,7 @@ export class OAuthCollection {
59
85
  })));
60
86
  }
61
87
 
88
+
62
89
  /**
63
90
  * Returns OAuth instance for given key
64
91
  */
@@ -81,6 +108,7 @@ export class OAuthCollection {
81
108
  });
82
109
  }
83
110
 
111
+
84
112
  /**
85
113
  * Creates a new auth record in current collection with the given config.
86
114
  * @returns Object with OAuth instance connected to created auth and authorizerUrl to redirect the user to for completing authorization
@@ -109,6 +137,7 @@ export class OAuthCollection {
109
137
  return await OAuth.create({
110
138
  discoveryUrl: this.localDiscoveryUrl,
111
139
  token: this.localToken,
140
+ accountId: this.localAccountId,
112
141
  appId: params.appId,
113
142
  keyValueCollection: this.keyValueCollection,
114
143
  scope: params.scope,
@@ -0,0 +1,4 @@
1
+ export { OAuth } from './OAuth';
2
+ export { OAuthCollection } from './OAuthCollection';
3
+
4
+ export * from './types';
@@ -10,6 +10,7 @@ export type OAuthConfig = {
10
10
  serviceName: string;
11
11
  keyValueCollection?: string;
12
12
  authKey: string;
13
+ accountId?: string;
13
14
  eventManagerUrl?: string;
14
15
  providersAccountId?: string;
15
16
  };
@@ -120,13 +121,16 @@ export type OAuthCollectionConfig = {
120
121
  */
121
122
  token: Token;
122
123
  discoveryUrl: string;
123
- serviceName: string;
124
+ accountId?: string;
125
+ serviceName?: string;
124
126
  /**
125
127
  * Pass this if your using custom name for key-value collection that differs from serviceName
126
128
  */
127
129
  keyValueCollection?: string;
128
130
  };
129
131
 
132
+ export type OAuthCollectionInitConfig = Pick<OAuthCollectionConfig, 'serviceName' | 'keyValueCollection'>;
133
+
130
134
  export type ServiceDefinitionConfig = {
131
135
  serviceName: string;
132
136
  requestDataType: string;