@dronedeploy/rocos-js-sdk 3.0.1-alpha.16 → 3.0.1-alpha.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.
@@ -21,7 +21,7 @@ export interface DeviceCredentialCreate {
21
21
  /**
22
22
  * Will automatically be generated if not provided
23
23
  */
24
- key?: string;
24
+ secret?: string;
25
25
  /**
26
26
  * The agent component the credentials are for e.g. dji, spot, etc.
27
27
  */
@@ -30,7 +30,22 @@ export interface DeviceCredentialCreate {
30
30
  * The system the credentials are for e.g. mqtt, rtmp, etc.
31
31
  */
32
32
  system: string;
33
+ /**
34
+ * Access control list for the credentials
35
+ */
36
+ acl?: DeviceCredentialACLItem[];
37
+ }
38
+ export interface DeviceCredentialACLItem {
39
+ /**
40
+ * The resource the ACL item is for e.g. /sys/product/{device_sn}/*
41
+ */
42
+ resource: string;
43
+ /**
44
+ * The action the ACL item is for e.g. allow, deny, ignore
45
+ */
46
+ action: DeviceCredentialAuthAction;
33
47
  }
48
+ export type DeviceCredentialAuthAction = 'allow' | 'deny' | 'ignore';
34
49
  export interface DeviceCredentialAuth extends DeviceCredential {
35
50
  /**
36
51
  * The agent component the credentials are for e.g. dji, spot, etc.
@@ -1,10 +1,20 @@
1
1
  import { IBaseService, IRocosSDKConfig, RocosError, Token } from '../models';
2
+ import { Observable } from 'rxjs';
2
3
  import { BaseServiceAbstract } from './BaseServiceAbstract';
3
4
  export declare class AuthService extends BaseServiceAbstract implements IBaseService {
4
5
  protected config: IRocosSDKConfig;
5
6
  private token?;
6
7
  private tokenRefreshTimeoutId?;
8
+ private tokenSubject$;
7
9
  constructor(config: IRocosSDKConfig);
10
+ /** Observable for token updates
11
+ *
12
+ * This is useful for getting notified when the token changes.
13
+ * i.e. when the token is refreshed from the token refresh checker.
14
+ *
15
+ * This will not emit until the token is set, either by `setToken` or by getting a new token.
16
+ */
17
+ get tokenUpdates$(): Observable<Token>;
8
18
  getStatus(): boolean;
9
19
  teardown(): void;
10
20
  protected getError(e: RocosError): RocosError;
@@ -62,9 +72,10 @@ export declare class AuthService extends BaseServiceAbstract implements IBaseSer
62
72
  * If you want to refresh the token regardless of the expiry time, use `refreshToken`.
63
73
  *
64
74
  * @param minutes the number of minutes before the token expires to refresh the token
75
+ * @returns true if the token was refreshed
65
76
  * @see refreshToken
66
77
  */
67
- refreshTokenIfExpired(minutes: number): Promise<void>;
78
+ refreshTokenIfExpired(minutes: number): Promise<boolean>;
68
79
  /** Start a 5-minute loop to check if the token needs to be refreshed
69
80
  *
70
81
  * This is useful when you are using GRPC services (i.e. telemetry) which does not automatically refresh the token.
@@ -3,6 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.AuthService = void 0;
4
4
  const api_1 = require("../constants/api");
5
5
  const models_1 = require("../models");
6
+ const rxjs_1 = require("rxjs");
6
7
  const BaseServiceAbstract_1 = require("./BaseServiceAbstract");
7
8
  const RocosLogger_1 = require("../logger/RocosLogger");
8
9
  const RocosStore_1 = require("../store/RocosStore");
@@ -12,11 +13,25 @@ class AuthService extends BaseServiceAbstract_1.BaseServiceAbstract {
12
13
  constructor(config) {
13
14
  super(config);
14
15
  this.config = config;
16
+ this.tokenSubject$ = new rxjs_1.Subject();
15
17
  this.config = config;
16
18
  this.logger = RocosLogger_1.RocosLogger.getInstance(`AuthService(${this.config.url})`);
17
19
  if (this.config.token) {
18
20
  this.setToken(this.config.token);
19
21
  }
22
+ this.tokenUpdates$.subscribe((token) => {
23
+ RocosStore_1.RocosStore.getChangeSubject().next({ type: 'token', url: this.config.url, data: token.value });
24
+ });
25
+ }
26
+ /** Observable for token updates
27
+ *
28
+ * This is useful for getting notified when the token changes.
29
+ * i.e. when the token is refreshed from the token refresh checker.
30
+ *
31
+ * This will not emit until the token is set, either by `setToken` or by getting a new token.
32
+ */
33
+ get tokenUpdates$() {
34
+ return this.tokenSubject$.asObservable();
20
35
  }
21
36
  getStatus() {
22
37
  return true;
@@ -42,7 +57,7 @@ class AuthService extends BaseServiceAbstract_1.BaseServiceAbstract {
42
57
  }
43
58
  this.config.token = this.token.value;
44
59
  // output a message for token change
45
- RocosStore_1.RocosStore.getChangeSubject().next({ type: 'token', url: this.config.url, data: this.token.value });
60
+ this.tokenSubject$?.next(this.token);
46
61
  }
47
62
  /**
48
63
  * Clear token
@@ -166,6 +181,7 @@ class AuthService extends BaseServiceAbstract_1.BaseServiceAbstract {
166
181
  * If you want to refresh the token regardless of the expiry time, use `refreshToken`.
167
182
  *
168
183
  * @param minutes the number of minutes before the token expires to refresh the token
184
+ * @returns true if the token was refreshed
169
185
  * @see refreshToken
170
186
  */
171
187
  async refreshTokenIfExpired(minutes) {
@@ -173,7 +189,9 @@ class AuthService extends BaseServiceAbstract_1.BaseServiceAbstract {
173
189
  this.logger.info('Token expires in 15 minutes. Refreshing.');
174
190
  const newToken = await this.refreshToken();
175
191
  this.setToken(newToken);
192
+ return true;
176
193
  }
194
+ return false;
177
195
  }
178
196
  /** Start a 5-minute loop to check if the token needs to be refreshed
179
197
  *
@@ -21,7 +21,7 @@ export interface DeviceCredentialCreate {
21
21
  /**
22
22
  * Will automatically be generated if not provided
23
23
  */
24
- key?: string;
24
+ secret?: string;
25
25
  /**
26
26
  * The agent component the credentials are for e.g. dji, spot, etc.
27
27
  */
@@ -30,7 +30,22 @@ export interface DeviceCredentialCreate {
30
30
  * The system the credentials are for e.g. mqtt, rtmp, etc.
31
31
  */
32
32
  system: string;
33
+ /**
34
+ * Access control list for the credentials
35
+ */
36
+ acl?: DeviceCredentialACLItem[];
37
+ }
38
+ export interface DeviceCredentialACLItem {
39
+ /**
40
+ * The resource the ACL item is for e.g. /sys/product/{device_sn}/*
41
+ */
42
+ resource: string;
43
+ /**
44
+ * The action the ACL item is for e.g. allow, deny, ignore
45
+ */
46
+ action: DeviceCredentialAuthAction;
33
47
  }
48
+ export type DeviceCredentialAuthAction = 'allow' | 'deny' | 'ignore';
34
49
  export interface DeviceCredentialAuth extends DeviceCredential {
35
50
  /**
36
51
  * The agent component the credentials are for e.g. dji, spot, etc.
@@ -1,10 +1,20 @@
1
1
  import { IBaseService, IRocosSDKConfig, RocosError, Token } from '../models';
2
+ import { Observable } from 'rxjs';
2
3
  import { BaseServiceAbstract } from './BaseServiceAbstract';
3
4
  export declare class AuthService extends BaseServiceAbstract implements IBaseService {
4
5
  protected config: IRocosSDKConfig;
5
6
  private token?;
6
7
  private tokenRefreshTimeoutId?;
8
+ private tokenSubject$;
7
9
  constructor(config: IRocosSDKConfig);
10
+ /** Observable for token updates
11
+ *
12
+ * This is useful for getting notified when the token changes.
13
+ * i.e. when the token is refreshed from the token refresh checker.
14
+ *
15
+ * This will not emit until the token is set, either by `setToken` or by getting a new token.
16
+ */
17
+ get tokenUpdates$(): Observable<Token>;
8
18
  getStatus(): boolean;
9
19
  teardown(): void;
10
20
  protected getError(e: RocosError): RocosError;
@@ -62,9 +72,10 @@ export declare class AuthService extends BaseServiceAbstract implements IBaseSer
62
72
  * If you want to refresh the token regardless of the expiry time, use `refreshToken`.
63
73
  *
64
74
  * @param minutes the number of minutes before the token expires to refresh the token
75
+ * @returns true if the token was refreshed
65
76
  * @see refreshToken
66
77
  */
67
- refreshTokenIfExpired(minutes: number): Promise<void>;
78
+ refreshTokenIfExpired(minutes: number): Promise<boolean>;
68
79
  /** Start a 5-minute loop to check if the token needs to be refreshed
69
80
  *
70
81
  * This is useful when you are using GRPC services (i.e. telemetry) which does not automatically refresh the token.
@@ -1,5 +1,6 @@
1
1
  import { API_APPLICATION_AUTH_URL, API_OTP_AUTH_URL, API_OTP_URL, API_USER_TOKEN_URL } from '../constants/api';
2
2
  import { RocosError, Token, errorCodes } from '../models';
3
+ import { Subject } from 'rxjs';
3
4
  import { BaseServiceAbstract } from './BaseServiceAbstract';
4
5
  import { RocosLogger } from '../logger/RocosLogger';
5
6
  import { RocosStore } from '../store/RocosStore';
@@ -9,11 +10,25 @@ export class AuthService extends BaseServiceAbstract {
9
10
  constructor(config) {
10
11
  super(config);
11
12
  this.config = config;
13
+ this.tokenSubject$ = new Subject();
12
14
  this.config = config;
13
15
  this.logger = RocosLogger.getInstance(`AuthService(${this.config.url})`);
14
16
  if (this.config.token) {
15
17
  this.setToken(this.config.token);
16
18
  }
19
+ this.tokenUpdates$.subscribe((token) => {
20
+ RocosStore.getChangeSubject().next({ type: 'token', url: this.config.url, data: token.value });
21
+ });
22
+ }
23
+ /** Observable for token updates
24
+ *
25
+ * This is useful for getting notified when the token changes.
26
+ * i.e. when the token is refreshed from the token refresh checker.
27
+ *
28
+ * This will not emit until the token is set, either by `setToken` or by getting a new token.
29
+ */
30
+ get tokenUpdates$() {
31
+ return this.tokenSubject$.asObservable();
17
32
  }
18
33
  getStatus() {
19
34
  return true;
@@ -39,7 +54,7 @@ export class AuthService extends BaseServiceAbstract {
39
54
  }
40
55
  this.config.token = this.token.value;
41
56
  // output a message for token change
42
- RocosStore.getChangeSubject().next({ type: 'token', url: this.config.url, data: this.token.value });
57
+ this.tokenSubject$?.next(this.token);
43
58
  }
44
59
  /**
45
60
  * Clear token
@@ -163,6 +178,7 @@ export class AuthService extends BaseServiceAbstract {
163
178
  * If you want to refresh the token regardless of the expiry time, use `refreshToken`.
164
179
  *
165
180
  * @param minutes the number of minutes before the token expires to refresh the token
181
+ * @returns true if the token was refreshed
166
182
  * @see refreshToken
167
183
  */
168
184
  async refreshTokenIfExpired(minutes) {
@@ -170,7 +186,9 @@ export class AuthService extends BaseServiceAbstract {
170
186
  this.logger.info('Token expires in 15 minutes. Refreshing.');
171
187
  const newToken = await this.refreshToken();
172
188
  this.setToken(newToken);
189
+ return true;
173
190
  }
191
+ return false;
174
192
  }
175
193
  /** Start a 5-minute loop to check if the token needs to be refreshed
176
194
  *
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dronedeploy/rocos-js-sdk",
3
- "version": "3.0.1-alpha.16",
3
+ "version": "3.0.1-alpha.19",
4
4
  "description": "Javascript SDK for rocos",
5
5
  "main": "cjs/index.js",
6
6
  "module": "esm/index.js",