@sweepbright/api-client 0.39.1 → 0.40.1

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.
package/dist/client.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  import { Logger } from './oauth-manager/interfaces';
2
- import { Client, ClientConf, InitConf } from './types';
2
+ import { Client, ClientConf, InitConf, Maybe } from './types';
3
3
  export declare class ClientImpl implements Client {
4
4
  private readonly conf;
5
5
  private readonly logger?;
@@ -10,8 +10,11 @@ export declare class ClientImpl implements Client {
10
10
  constructor(conf: ClientConf, logger?: Logger | undefined);
11
11
  private getContext;
12
12
  private authorizeWithOAuthManager;
13
+ private resetAuth;
13
14
  authorize(config?: InitConf): Promise<Client>;
14
15
  withUserToken(accessToken: string): Promise<Client>;
16
+ isAuthorized(config?: InitConf): boolean;
17
+ getCurrentToken(): Maybe<string>;
15
18
  get leads(): {
16
19
  createLead: (attributes: {
17
20
  firstName?: string;
@@ -155,4 +158,7 @@ export declare class ClientImpl implements Client {
155
158
  url: string;
156
159
  }) => Promise<import("axios").AxiosResponse<any, any>>;
157
160
  };
161
+ get events(): {
162
+ create: (attributes: import("./resources/events").CreateEventAttributes) => Promise<import("axios").AxiosResponse<any, any>>;
163
+ };
158
164
  }
package/dist/client.js CHANGED
@@ -4,6 +4,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.ClientImpl = void 0;
7
+ const async_mutex_1 = require("async-mutex");
7
8
  const axios_1 = __importDefault(require("axios"));
8
9
  const tiny_invariant_1 = __importDefault(require("tiny-invariant"));
9
10
  const envHosts_1 = require("./common/envHosts");
@@ -19,11 +20,13 @@ const companies_1 = __importDefault(require("./resources/companies"));
19
20
  const contact_preferences_1 = __importDefault(require("./resources/contact_preferences"));
20
21
  const contacts_1 = __importDefault(require("./resources/contacts"));
21
22
  const estates_1 = __importDefault(require("./resources/estates"));
23
+ const events_1 = __importDefault(require("./resources/events"));
22
24
  const leads_1 = __importDefault(require("./resources/leads"));
23
25
  const negotiators_1 = __importDefault(require("./resources/negotiators"));
24
26
  const offices_1 = __importDefault(require("./resources/offices"));
25
27
  const types_1 = require("./types");
26
28
  const utils_1 = require("./utils");
29
+ const authorizationMutex = new async_mutex_1.Mutex();
27
30
  const getDefaultAuthConfig = (conf, logger) => {
28
31
  return {
29
32
  storage: 'memory',
@@ -43,7 +46,6 @@ class ClientImpl {
43
46
  oauthManager ??
44
47
  (0, createCustomEndpointAuthManager_1.createCustomEndpointAuthManager)(getDefaultAuthConfig(conf, logger));
45
48
  this.httpClient = axios_1.default.create({ baseURL: envHosts_1.envHosts[env] });
46
- this.httpClient.interceptors.response.use(utils_1.getData, utils_1.handleRequestFailure);
47
49
  this.httpClient.interceptors.request.use((request) => {
48
50
  this.logger?.debug('api request:', (0, logRequest_1.logRequest)(request));
49
51
  return request;
@@ -52,6 +54,7 @@ class ClientImpl {
52
54
  this.logger?.debug('api response:', (0, logResponse_1.logResponse)(response));
53
55
  return response;
54
56
  });
57
+ this.httpClient.interceptors.response.use(utils_1.getData, utils_1.handleRequestFailure);
55
58
  if (version) {
56
59
  this.httpClient.defaults.headers.common['Accept'] = `application/vnd.sweepbright.${version}+json`;
57
60
  }
@@ -71,12 +74,22 @@ class ClientImpl {
71
74
  };
72
75
  }
73
76
  async authorizeWithOAuthManager(clientId, clientSecret, scopes, options) {
74
- const accessToken = await this.localAuthManager.getAccessTokenBySessionData(new SessionDataImpl_1.SessionDataImpl({ clientId, clientSecret, scopes }), options);
75
- if (!accessToken) {
76
- throw new ApiClientError_1.ApiClientError('Authentication failed');
77
- }
78
- this._auth = { token: accessToken, type: types_1.TokenType.API_TOKEN };
79
- this.httpClient.defaults.headers.common['Authorization'] = `Bearer ${accessToken}`;
77
+ await authorizationMutex.runExclusive(async () => {
78
+ this.logger?.debug('Started authorization mutex');
79
+ if (this.isAuthorized({ scopes })) {
80
+ return;
81
+ }
82
+ const accessToken = await this.localAuthManager.getAccessTokenBySessionData(new SessionDataImpl_1.SessionDataImpl({ clientId, clientSecret, scopes }), options);
83
+ if (!accessToken) {
84
+ throw new ApiClientError_1.ApiClientError('Authentication failed');
85
+ }
86
+ this._auth = { token: accessToken, type: types_1.TokenType.API_TOKEN, scopes };
87
+ this.httpClient.defaults.headers.common['Authorization'] = `Bearer ${accessToken}`;
88
+ });
89
+ this.logger?.debug('End authorization mutex');
90
+ }
91
+ resetAuth() {
92
+ this._auth = null;
80
93
  }
81
94
  async authorize(config = {}) {
82
95
  try {
@@ -84,9 +97,13 @@ class ClientImpl {
84
97
  const { clientId, clientSecret } = this.conf;
85
98
  (0, tiny_invariant_1.default)(clientId, 'Missing client ID');
86
99
  (0, tiny_invariant_1.default)(clientSecret, 'Missing client secret');
100
+ if (this.isAuthorized({ scopes })) {
101
+ return this;
102
+ }
87
103
  this._oAuthManagerInvalidateInterceptor = async (error) => {
88
- if (error.response?.status === 401) {
104
+ if (error?.status === 401) {
89
105
  this.logger?.debug('revoking cache due to 401', { clientId, scopes });
106
+ this.resetAuth();
90
107
  await this.authorizeWithOAuthManager(clientId, clientSecret, scopes, {
91
108
  forceInvalidate: true,
92
109
  });
@@ -112,6 +129,13 @@ class ClientImpl {
112
129
  this.httpClient.defaults.headers.common['Authorization'] = `Bearer ${accessToken}`;
113
130
  return this;
114
131
  }
132
+ isAuthorized(config = {}) {
133
+ const { scopes = ['companies:read', 'properties:download', 'lead_info:write'], } = config;
134
+ return !!this._auth?.token && this._auth.scopes === scopes;
135
+ }
136
+ getCurrentToken() {
137
+ return this._auth?.token ?? '';
138
+ }
115
139
  get leads() {
116
140
  return (0, leads_1.default)(this.getContext());
117
141
  }
@@ -139,6 +163,9 @@ class ClientImpl {
139
163
  get estates() {
140
164
  return (0, estates_1.default)(this.getContext());
141
165
  }
166
+ get events() {
167
+ return (0, events_1.default)(this.getContext());
168
+ }
142
169
  }
143
170
  exports.ClientImpl = ClientImpl;
144
171
  //# sourceMappingURL=client.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
@@ -6,6 +6,8 @@ export declare class TokensRepository_Redis implements TokensRepository, CanChec
6
6
  private readonly log;
7
7
  private readonly version;
8
8
  constructor(redis: RedisClientType | RedisClusterType, log: Logger);
9
+ private forceDisconnect;
10
+ private processRedisError;
9
11
  private getClient;
10
12
  isConnected(): Promise<boolean>;
11
13
  private accessTokenKey;
@@ -7,16 +7,27 @@ class TokensRepository_Redis {
7
7
  this.redis = redis;
8
8
  this.log = log;
9
9
  this.version = 'v1';
10
+ this.forceDisconnect = async () => {
11
+ // try to force disconnect to connect again on next call
12
+ await this.redis
13
+ .disconnect()
14
+ .catch((err) => this.log.warn(err?.message ?? `Unknown error on disconnect`, { err }));
15
+ };
16
+ this.processRedisError = async (err) => {
17
+ if (err instanceof Error) {
18
+ this.log.error(err.message, { err });
19
+ }
20
+ await this.forceDisconnect();
21
+ throw err;
22
+ };
10
23
  }
11
24
  async getClient() {
12
25
  try {
13
26
  if (this.redis && this.redis.isOpen) {
14
27
  return this.redis;
15
28
  }
16
- this.redis.on('error', (err) => {
17
- this.log.error(err);
18
- });
19
- this.log.debug(`Connection is not open. Connecting to redis ${new Date().toISOString()}`);
29
+ this.redis.on('error', async (err) => this.processRedisError(err));
30
+ this.log.debug('Connection is not open. Connecting to redis');
20
31
  await this.redis.connect();
21
32
  return this.redis;
22
33
  }
@@ -42,8 +53,18 @@ class TokensRepository_Redis {
42
53
  return `${this.version}/${sessionKey}/l`;
43
54
  }
44
55
  async getAccessTokenIfValid(sessionKey) {
45
- const redis = await this.getClient();
46
- return redis.get(this.accessTokenKey(sessionKey));
56
+ try {
57
+ const redis = await this.getClient();
58
+ return redis.get(this.accessTokenKey(sessionKey));
59
+ }
60
+ catch (err) {
61
+ if (err instanceof Error) {
62
+ this.log.error(err.message, { err });
63
+ }
64
+ await this.forceDisconnect();
65
+ this.log.warn('Some error on token getting returning null', { err });
66
+ return null;
67
+ }
47
68
  }
48
69
  async deleteAccessToken(lockId, sessionKey) {
49
70
  const redis = await this.getClient();
@@ -1 +1 @@
1
- {"version":3,"file":"TokensRepository_Redis.js","sourceRoot":"","sources":["../../src/oauth-manager/TokensRepository_Redis.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"TokensRepository_Redis.js","sourceRoot":"","sources":["../../src/oauth-manager/TokensRepository_Redis.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,74 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const assert_1 = require("assert");
4
+ const redis_1 = require("redis");
5
+ const __1 = require("../..");
6
+ const types_1 = require("../../types");
7
+ const createCustomEndpointAuthManager_1 = require("../factories/createCustomEndpointAuthManager");
8
+ const logger = console;
9
+ const REDIS = process.env.REDIS_URL ?? fail('redis must be set');
10
+ const getRedisClient = () => {
11
+ const url = new URL(REDIS);
12
+ const useTLS = url.protocol.startsWith('rediss');
13
+ const host = url.hostname;
14
+ const port = Number(url.port) ?? fail(`Invalid port ${url.port}`);
15
+ return (0, redis_1.createCluster)({
16
+ rootNodes: [
17
+ {
18
+ socket: {
19
+ host,
20
+ port,
21
+ noDelay: true,
22
+ reconnectStrategy: (retries) => {
23
+ console.log(`Reconnecting attempt #${retries}`);
24
+ return Math.min(retries * 50, 2000); // Exponential backoff
25
+ },
26
+ },
27
+ },
28
+ ],
29
+ minimizeConnections: true,
30
+ defaults: {
31
+ socket: { tls: useTLS },
32
+ },
33
+ });
34
+ };
35
+ const oauthManager = (0, createCustomEndpointAuthManager_1.createCustomEndpointAuthManager)({
36
+ env: types_1.Env.DEV,
37
+ apiVersion: 'v20230109',
38
+ storage: 'redis',
39
+ client: getRedisClient(),
40
+ logger,
41
+ });
42
+ const cuncurrentExecutions = 10;
43
+ async function main() {
44
+ const tasks = Array.from({ length: cuncurrentExecutions }, (_, k) => k);
45
+ const clientId = process.env.CLIENT_ID;
46
+ (0, assert_1.ok)(clientId, 'clientId should be defined');
47
+ const clientSecret = process.env.CLIENT_SECRET;
48
+ (0, assert_1.ok)(clientSecret, 'clientSecret should be defined');
49
+ const scopes = ['contacts:read'];
50
+ const client = (0, __1.createClient)({
51
+ clientId,
52
+ clientSecret,
53
+ env: types_1.Env.DEV,
54
+ version: 'v20230109',
55
+ oauthManager,
56
+ }, logger);
57
+ const pending = tasks.map(async (task) => {
58
+ console.log(`Processing ${task}`);
59
+ await client.authorize({ scopes });
60
+ await client.contacts.getOne({
61
+ contactId: 'b97c3865-2de0-4411-b9bc-999b5f0c4d19',
62
+ });
63
+ });
64
+ await Promise.all(pending);
65
+ }
66
+ main()
67
+ .then(() => {
68
+ process.exit(0);
69
+ })
70
+ .catch((e) => {
71
+ console.error(e);
72
+ process.exit(1);
73
+ });
74
+ //# sourceMappingURL=async.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"async.js","sourceRoot":"","sources":["../../../src/oauth-manager/playground/async.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,51 @@
1
+ import { ClientCtx } from '../types';
2
+ export declare enum EventType {
3
+ VISIT_SCHEDULED = "VISIT_SCHEDULED",
4
+ VISIT_UPDATED = "VISIT_UPDATED",
5
+ VISIT_DELETED = "VISIT_DELETED",
6
+ OPEN_HOME_CREATED = "OPEN_HOME_CREATED",
7
+ OPEN_HOME_UPDATED = "OPEN_HOME_UPDATED",
8
+ OPEN_HOME_DELETED = "OPEN_HOME_DELETED",
9
+ AUCTION_CREATED = "AUCTION_CREATED",
10
+ AUCTION_UPDATED = "AUCTION_UPDATED",
11
+ AUCTION_DELETED = "AUCTION_DELETED"
12
+ }
13
+ export type UserType = 'user';
14
+ export type ContactType = 'contact';
15
+ export interface VisitEventData {
16
+ id: string;
17
+ organizer: {
18
+ type: UserType;
19
+ id: string;
20
+ };
21
+ attendees: {
22
+ type: ContactType;
23
+ id: string;
24
+ }[];
25
+ start_date: Date;
26
+ duration_in_minutes: number;
27
+ estate_id: string;
28
+ title: string;
29
+ description: string;
30
+ location: string;
31
+ creator_id: string;
32
+ legacy_id?: string;
33
+ }
34
+ export interface OpenHopeEventData {
35
+ start_date: Date;
36
+ end_date: Date;
37
+ estate_id: string;
38
+ legacy_id?: string;
39
+ }
40
+ export interface AuctionEventData {
41
+ start_date: Date;
42
+ estate_id: string;
43
+ }
44
+ export interface CreateEventAttributes {
45
+ event: EventType;
46
+ data: VisitEventData | OpenHopeEventData | AuctionEventData;
47
+ }
48
+ declare const events: (ctx: ClientCtx) => {
49
+ create: (attributes: CreateEventAttributes) => Promise<import("axios").AxiosResponse<any, any>>;
50
+ };
51
+ export default events;
@@ -0,0 +1,27 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.EventType = void 0;
4
+ const types_1 = require("../types");
5
+ var EventType;
6
+ (function (EventType) {
7
+ EventType["VISIT_SCHEDULED"] = "VISIT_SCHEDULED";
8
+ EventType["VISIT_UPDATED"] = "VISIT_UPDATED";
9
+ EventType["VISIT_DELETED"] = "VISIT_DELETED";
10
+ EventType["OPEN_HOME_CREATED"] = "OPEN_HOME_CREATED";
11
+ EventType["OPEN_HOME_UPDATED"] = "OPEN_HOME_UPDATED";
12
+ EventType["OPEN_HOME_DELETED"] = "OPEN_HOME_DELETED";
13
+ EventType["AUCTION_CREATED"] = "AUCTION_CREATED";
14
+ EventType["AUCTION_UPDATED"] = "AUCTION_UPDATED";
15
+ EventType["AUCTION_DELETED"] = "AUCTION_DELETED";
16
+ })(EventType || (exports.EventType = EventType = {}));
17
+ const events = (ctx) => {
18
+ return {
19
+ create: async (attributes) => {
20
+ ctx.checkAuth(types_1.TokenType.API_TOKEN);
21
+ const result = await ctx.httpClient.post('/services/events', attributes);
22
+ return result;
23
+ },
24
+ };
25
+ };
26
+ exports.default = events;
27
+ //# sourceMappingURL=events.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"events.js","sourceRoot":"","sources":["../../src/resources/events.ts"],"names":[],"mappings":";;;AAAA,oCAAgD;AAEhD,IAAY,SAUX;AAVD,WAAY,SAAS;IACnB,gDAAmC,CAAA;IACnC,4CAA+B,CAAA;IAC/B,4CAA+B,CAAA;IAC/B,oDAAuC,CAAA;IACvC,oDAAuC,CAAA;IACvC,oDAAuC,CAAA;IACvC,gDAAmC,CAAA;IACnC,gDAAmC,CAAA;IACnC,gDAAmC,CAAA;AACrC,CAAC,EAVW,SAAS,yBAAT,SAAS,QAUpB;AA0CD,MAAM,MAAM,GAAG,CAAC,GAAc,EAAE,EAAE;IAChC,OAAO;QACL,MAAM,EAAE,KAAK,EAAE,UAAiC,EAAE,EAAE;YAClD,GAAG,CAAC,SAAS,CAAC,iBAAS,CAAC,SAAS,CAAC,CAAC;YACnC,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,kBAAkB,EAAE,UAAU,CAAC,CAAC;YACzE,OAAO,MAAM,CAAC;QAChB,CAAC;KACF,CAAC;AACJ,CAAC,CAAC;AAEF,kBAAe,MAAM,CAAC"}
package/dist/types.d.ts CHANGED
@@ -7,6 +7,7 @@ import companies from './resources/companies';
7
7
  import contact_preferences from './resources/contact_preferences';
8
8
  import contacts from './resources/contacts';
9
9
  import estates from './resources/estates';
10
+ import events from './resources/events';
10
11
  import leads from './resources/leads';
11
12
  import negotiators from './resources/negotiators';
12
13
  import offices from './resources/offices';
@@ -56,6 +57,7 @@ export declare enum TokenType {
56
57
  export type Auth = {
57
58
  token: string;
58
59
  type: TokenType;
60
+ scopes?: string[];
59
61
  };
60
62
  export type Maybe<T> = T | null;
61
63
  export type ClientCtx = {
@@ -89,6 +91,8 @@ export interface PropertiesOutput {
89
91
  export interface Client {
90
92
  authorize(config?: InitConf): Promise<Client>;
91
93
  withUserToken(accessToken: string): Promise<Client>;
94
+ isAuthorized(config?: InitConf): boolean;
95
+ getCurrentToken(): Maybe<string>;
92
96
  leads: ReturnType<typeof leads>;
93
97
  negotiators: ReturnType<typeof negotiators>;
94
98
  offices: ReturnType<typeof offices>;
@@ -98,6 +102,7 @@ export interface Client {
98
102
  companies: ReturnType<typeof companies>;
99
103
  contactPreferences: ReturnType<typeof contact_preferences>;
100
104
  estates: ReturnType<typeof estates>;
105
+ events: ReturnType<typeof events>;
101
106
  }
102
107
  export interface AccessToken {
103
108
  access_token: string;
package/dist/types.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":";;;AAaA,IAAY,GAIX;AAJD,WAAY,GAAG;IACb,gCAAyB,CAAA;IACzB,0BAAmB,CAAA;IACnB,kBAAW,CAAA;AACb,CAAC,EAJW,GAAG,mBAAH,GAAG,QAId;AAED,IAAY,aAuBX;AAvBD,WAAY,aAAa;IACvB,sCAAqB,CAAA;IACrB,sCAAqB,CAAA;IACrB,0CAAyB,CAAA;IACzB,oDAAqC,CAAA;IACrC,sDAAuC,CAAA;IACvC,oEAAqD,CAAA;IACrD,0FAA2E,CAAA;IAC3E,4EAA6D,CAAA;IAC7D,4DAA6C,CAAA;IAC7C,0EAA2D,CAAA;IAC3D,gEAAiD,CAAA;IACjD,gDAAiC,CAAA;IACjC,8DAA+C,CAAA;IAC/C,gDAAiC,CAAA;IACjC,gEAAiD,CAAA;IACjD,8EAA+D,CAAA;IAC/D,oGAAqF,CAAA;IACrF,sFAAuE,CAAA;IACvE,sEAAuD,CAAA;IACvD,oFAAqE,CAAA;IACrE,oDAAqC,CAAA;IACrC,0EAA2D,CAAA;AAC7D,CAAC,EAvBW,aAAa,6BAAb,aAAa,QAuBxB;AAcD,IAAY,SAGX;AAHD,WAAY,SAAS;IACnB,qDAAU,CAAA;IACV,mDAAS,CAAA;AACX,CAAC,EAHW,SAAS,yBAAT,SAAS,QAGpB"}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":";;;AAcA,IAAY,GAIX;AAJD,WAAY,GAAG;IACb,gCAAyB,CAAA;IACzB,0BAAmB,CAAA;IACnB,kBAAW,CAAA;AACb,CAAC,EAJW,GAAG,mBAAH,GAAG,QAId;AAED,IAAY,aAuBX;AAvBD,WAAY,aAAa;IACvB,sCAAqB,CAAA;IACrB,sCAAqB,CAAA;IACrB,0CAAyB,CAAA;IACzB,oDAAqC,CAAA;IACrC,sDAAuC,CAAA;IACvC,oEAAqD,CAAA;IACrD,0FAA2E,CAAA;IAC3E,4EAA6D,CAAA;IAC7D,4DAA6C,CAAA;IAC7C,0EAA2D,CAAA;IAC3D,gEAAiD,CAAA;IACjD,gDAAiC,CAAA;IACjC,8DAA+C,CAAA;IAC/C,gDAAiC,CAAA;IACjC,gEAAiD,CAAA;IACjD,8EAA+D,CAAA;IAC/D,oGAAqF,CAAA;IACrF,sFAAuE,CAAA;IACvE,sEAAuD,CAAA;IACvD,oFAAqE,CAAA;IACrE,oDAAqC,CAAA;IACrC,0EAA2D,CAAA;AAC7D,CAAC,EAvBW,aAAa,6BAAb,aAAa,QAuBxB;AAcD,IAAY,SAGX;AAHD,WAAY,SAAS;IACnB,qDAAU,CAAA;IACV,mDAAS,CAAA;AACX,CAAC,EAHW,SAAS,yBAAT,SAAS,QAGpB"}
package/package.json CHANGED
@@ -1,5 +1,5 @@
1
1
  {
2
- "version": "0.39.1",
2
+ "version": "0.40.1",
3
3
  "license": "UNLICENCED",
4
4
  "main": "./dist/index.js",
5
5
  "typings": "./dist/index.d.ts",
@@ -14,7 +14,8 @@
14
14
  "lint": "eslint --ext .ts ./src",
15
15
  "format": "prettier --write \"**/*.{js,md,scss,css,ts,tsx}\"",
16
16
  "dev:one": "tsx ./src/oauth-manager/playground/one.ts",
17
- "dev:two": "tsx ./src/oauth-manager/playground/two.ts"
17
+ "dev:two": "tsx ./src/oauth-manager/playground/two.ts",
18
+ "dev:async": "tsx ./src/oauth-manager/playground/async.ts"
18
19
  },
19
20
  "peerDependencies": {},
20
21
  "prettier": {
@@ -42,6 +43,7 @@
42
43
  "typescript": "^5.7.3"
43
44
  },
44
45
  "dependencies": {
46
+ "async-mutex": "^0.5.0",
45
47
  "axios": "1.7.9",
46
48
  "redis": "^4.7.0",
47
49
  "tiny-invariant": "1.3.3",