@nx-ddd/x 6.0.3
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/README.md +11 -0
- package/converter.d.ts +4 -0
- package/converter.js +30 -0
- package/converter.js.map +1 -0
- package/domain/models/index.d.ts +23 -0
- package/domain/models/index.js +18 -0
- package/domain/models/index.js.map +1 -0
- package/domain/models/message-event.d.ts +17 -0
- package/domain/models/message-event.js +31 -0
- package/domain/models/message-event.js.map +1 -0
- package/domain/models/token.d.ts +9 -0
- package/domain/models/token.js +40 -0
- package/domain/models/token.js.map +1 -0
- package/index.d.ts +2 -0
- package/index.js +6 -0
- package/index.js.map +1 -0
- package/package.json +9 -0
- package/x.config.d.ts +19 -0
- package/x.config.js +6 -0
- package/x.config.js.map +1 -0
- package/x.module.d.ts +10 -0
- package/x.module.js +24 -0
- package/x.module.js.map +1 -0
- package/x.service.d.ts +33 -0
- package/x.service.impl.d.ts +41 -0
- package/x.service.impl.js +249 -0
- package/x.service.impl.js.map +1 -0
- package/x.service.js +103 -0
- package/x.service.js.map +1 -0
- package/x.service.mock.d.ts +6 -0
- package/x.service.mock.js +22 -0
- package/x.service.mock.js.map +1 -0
package/README.md
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
# @nx-ddd-x
|
|
2
|
+
|
|
3
|
+
This library was generated with [Nx](https://nx.dev).
|
|
4
|
+
|
|
5
|
+
## Running unit tests
|
|
6
|
+
|
|
7
|
+
Run `nx test @nx-ddd-x` to execute the unit tests via [Jest](https://jestjs.io).
|
|
8
|
+
|
|
9
|
+
## Running lint
|
|
10
|
+
|
|
11
|
+
Run `nx lint @nx-ddd-x` to execute the lint via [ESLint](https://eslint.org/).
|
package/converter.d.ts
ADDED
package/converter.js
ADDED
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.TweetConverter = void 0;
|
|
4
|
+
const tslib_1 = require("tslib");
|
|
5
|
+
const core_1 = require("@nx-ddd/core");
|
|
6
|
+
const models_1 = require("./domain/models");
|
|
7
|
+
let TweetConverter = exports.TweetConverter = class TweetConverter {
|
|
8
|
+
fromTwitterResponseData(data) {
|
|
9
|
+
var _a;
|
|
10
|
+
return ((_a = data.data) !== null && _a !== void 0 ? _a : []).map(tweet => {
|
|
11
|
+
const user = data.includes.users.find(user => user.id === tweet.author_id);
|
|
12
|
+
return models_1.Tweet.from({
|
|
13
|
+
id: tweet.id,
|
|
14
|
+
authorId: tweet.author_id,
|
|
15
|
+
author: {
|
|
16
|
+
id: tweet.author_id,
|
|
17
|
+
name: user.name,
|
|
18
|
+
username: user.username,
|
|
19
|
+
description: user.description,
|
|
20
|
+
},
|
|
21
|
+
text: tweet.text,
|
|
22
|
+
liked: tweet.public_metrics.like_count > 0,
|
|
23
|
+
});
|
|
24
|
+
});
|
|
25
|
+
}
|
|
26
|
+
};
|
|
27
|
+
exports.TweetConverter = TweetConverter = tslib_1.__decorate([
|
|
28
|
+
(0, core_1.Injectable)({ providedIn: 'root' })
|
|
29
|
+
], TweetConverter);
|
|
30
|
+
//# sourceMappingURL=converter.js.map
|
package/converter.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"converter.js","sourceRoot":"","sources":["../../../../packages/@nx-ddd/x/src/lib/converter.ts"],"names":[],"mappings":";;;;AAAA,uCAA0C;AAC1C,4CAAwC;AAGjC,IAAM,cAAc,4BAApB,MAAM,cAAc;IACzB,uBAAuB,CAAC,IAAI;;QAC1B,OAAO,CAAC,MAAA,IAAI,CAAC,IAAI,mCAAI,EAAE,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE;YACnC,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,KAAK,KAAK,CAAC,SAAS,CAAC,CAAC;YAC3E,OAAO,cAAK,CAAC,IAAI,CAAC;gBAChB,EAAE,EAAE,KAAK,CAAC,EAAE;gBACZ,QAAQ,EAAE,KAAK,CAAC,SAAS;gBACzB,MAAM,EAAE;oBACN,EAAE,EAAE,KAAK,CAAC,SAAS;oBACnB,IAAI,EAAE,IAAI,CAAC,IAAI;oBACf,QAAQ,EAAE,IAAI,CAAC,QAAQ;oBACvB,WAAW,EAAE,IAAI,CAAC,WAAW;iBAC9B;gBACD,IAAI,EAAE,KAAK,CAAC,IAAI;gBAChB,KAAK,EAAE,KAAK,CAAC,cAAc,CAAC,UAAU,GAAG,CAAC;aAC3C,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC;CACF,CAAA;yBAlBY,cAAc;IAD1B,IAAA,iBAAU,EAAC,EAAC,UAAU,EAAE,MAAM,EAAC,CAAC;GACpB,cAAc,CAkB1B"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
export * from './message-event';
|
|
2
|
+
export * from './token';
|
|
3
|
+
export interface Twitter {
|
|
4
|
+
id: string;
|
|
5
|
+
accessToken: string;
|
|
6
|
+
secret: string;
|
|
7
|
+
}
|
|
8
|
+
export declare const nullTwitter: Twitter;
|
|
9
|
+
export declare class Tweet {
|
|
10
|
+
id: string;
|
|
11
|
+
authorId: string;
|
|
12
|
+
author?: TwitterUser;
|
|
13
|
+
text: string;
|
|
14
|
+
liked: boolean;
|
|
15
|
+
createdAt: any;
|
|
16
|
+
static from(obj: Partial<Tweet>): Tweet & Partial<Tweet>;
|
|
17
|
+
}
|
|
18
|
+
export interface TwitterUser {
|
|
19
|
+
id: string;
|
|
20
|
+
name: string;
|
|
21
|
+
username: string;
|
|
22
|
+
description: string;
|
|
23
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.Tweet = exports.nullTwitter = void 0;
|
|
4
|
+
const tslib_1 = require("tslib");
|
|
5
|
+
tslib_1.__exportStar(require("./message-event"), exports);
|
|
6
|
+
tslib_1.__exportStar(require("./token"), exports);
|
|
7
|
+
exports.nullTwitter = {
|
|
8
|
+
id: null,
|
|
9
|
+
accessToken: null,
|
|
10
|
+
secret: null
|
|
11
|
+
};
|
|
12
|
+
class Tweet {
|
|
13
|
+
static from(obj) {
|
|
14
|
+
return Object.assign(new Tweet(), obj);
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
exports.Tweet = Tweet;
|
|
18
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../packages/@nx-ddd/x/src/lib/domain/models/index.ts"],"names":[],"mappings":";;;;AAAA,0DAAgC;AAChC,kDAAwB;AAQX,QAAA,WAAW,GAAY;IAClC,EAAE,EAAE,IAAI;IACR,WAAW,EAAE,IAAI;IACjB,MAAM,EAAE,IAAI;CACb,CAAC;AAEF,MAAa,KAAK;IAQhB,MAAM,CAAC,IAAI,CAAC,GAAmB;QAC7B,OAAO,MAAM,CAAC,MAAM,CAAC,IAAI,KAAK,EAAE,EAAE,GAAG,CAAC,CAAC;IACzC,CAAC;CACF;AAXD,sBAWC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { Entity } from "@nx-ddd/common/domain/models";
|
|
2
|
+
declare class User {
|
|
3
|
+
id: string;
|
|
4
|
+
name: string;
|
|
5
|
+
username: string;
|
|
6
|
+
}
|
|
7
|
+
export declare class MessageEvent extends Entity {
|
|
8
|
+
id: string;
|
|
9
|
+
communityId?: string;
|
|
10
|
+
senderId: string;
|
|
11
|
+
sender?: User;
|
|
12
|
+
eventType: 'MessageCreate';
|
|
13
|
+
dmConversationId: string;
|
|
14
|
+
text: string;
|
|
15
|
+
static from(params: Partial<MessageEvent>): MessageEvent;
|
|
16
|
+
}
|
|
17
|
+
export {};
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.MessageEvent = void 0;
|
|
4
|
+
const tslib_1 = require("tslib");
|
|
5
|
+
const models_1 = require("@nx-ddd/common/domain/models");
|
|
6
|
+
const decorators_1 = require("@nx-ddd/firestore/decorators");
|
|
7
|
+
class User {
|
|
8
|
+
}
|
|
9
|
+
class MessageEvent extends models_1.Entity {
|
|
10
|
+
static from(params) {
|
|
11
|
+
return Object.assign(new MessageEvent(), params);
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
exports.MessageEvent = MessageEvent;
|
|
15
|
+
tslib_1.__decorate([
|
|
16
|
+
(0, decorators_1.String)(),
|
|
17
|
+
tslib_1.__metadata("design:type", String)
|
|
18
|
+
], MessageEvent.prototype, "senderId", void 0);
|
|
19
|
+
tslib_1.__decorate([
|
|
20
|
+
(0, decorators_1.String)(),
|
|
21
|
+
tslib_1.__metadata("design:type", String)
|
|
22
|
+
], MessageEvent.prototype, "eventType", void 0);
|
|
23
|
+
tslib_1.__decorate([
|
|
24
|
+
(0, decorators_1.String)(),
|
|
25
|
+
tslib_1.__metadata("design:type", String)
|
|
26
|
+
], MessageEvent.prototype, "dmConversationId", void 0);
|
|
27
|
+
tslib_1.__decorate([
|
|
28
|
+
(0, decorators_1.String)(),
|
|
29
|
+
tslib_1.__metadata("design:type", String)
|
|
30
|
+
], MessageEvent.prototype, "text", void 0);
|
|
31
|
+
//# sourceMappingURL=message-event.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"message-event.js","sourceRoot":"","sources":["../../../../../../packages/@nx-ddd/x/src/lib/domain/models/message-event.ts"],"names":[],"mappings":";;;;AAAA,yDAAsD;AACtD,6DAAsD;AAEtD,MAAM,IAAI;CAIT;AAED,MAAa,YAAa,SAAQ,eAAM;IAkBtC,MAAM,CAAC,IAAI,CAAC,MAA6B;QACvC,OAAO,MAAM,CAAC,MAAM,CAAC,IAAI,YAAY,EAAE,EAAE,MAAM,CAAC,CAAC;IACnD,CAAC;CACF;AArBD,oCAqBC;AAhBC;IADC,IAAA,mBAAM,GAAE;;8CACQ;AAKjB;IADC,IAAA,mBAAM,GAAE;;+CACkB;AAG3B;IADC,IAAA,mBAAM,GAAE;;sDACgB;AAGzB;IADC,IAAA,mBAAM,GAAE;;0CACI"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import dayjs from 'dayjs';
|
|
2
|
+
export declare class TwitterToken {
|
|
3
|
+
token_type: string;
|
|
4
|
+
access_token: string;
|
|
5
|
+
scope: string;
|
|
6
|
+
refresh_token: string;
|
|
7
|
+
expires_at: dayjs.Dayjs;
|
|
8
|
+
static validate(token?: Partial<TwitterToken>): import("class-validator").ValidationError[];
|
|
9
|
+
}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.TwitterToken = void 0;
|
|
4
|
+
const tslib_1 = require("tslib");
|
|
5
|
+
const class_validator_1 = require("class-validator");
|
|
6
|
+
const dayjs_1 = tslib_1.__importDefault(require("dayjs"));
|
|
7
|
+
const class_validators_1 = require("@nx-ddd/core/util/class-validators");
|
|
8
|
+
const decorators_1 = require("@nx-ddd/firestore/decorators");
|
|
9
|
+
class TwitterToken {
|
|
10
|
+
static validate(token) {
|
|
11
|
+
return (0, class_validator_1.validateSync)(Object.assign(new TwitterToken(), token));
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
exports.TwitterToken = TwitterToken;
|
|
15
|
+
tslib_1.__decorate([
|
|
16
|
+
decorators_1.Firestore.String(),
|
|
17
|
+
(0, class_validator_1.IsString)(),
|
|
18
|
+
tslib_1.__metadata("design:type", String)
|
|
19
|
+
], TwitterToken.prototype, "token_type", void 0);
|
|
20
|
+
tslib_1.__decorate([
|
|
21
|
+
decorators_1.Firestore.String(),
|
|
22
|
+
(0, class_validator_1.IsString)(),
|
|
23
|
+
tslib_1.__metadata("design:type", String)
|
|
24
|
+
], TwitterToken.prototype, "access_token", void 0);
|
|
25
|
+
tslib_1.__decorate([
|
|
26
|
+
decorators_1.Firestore.String(),
|
|
27
|
+
(0, class_validator_1.IsString)(),
|
|
28
|
+
tslib_1.__metadata("design:type", String)
|
|
29
|
+
], TwitterToken.prototype, "scope", void 0);
|
|
30
|
+
tslib_1.__decorate([
|
|
31
|
+
decorators_1.Firestore.String(),
|
|
32
|
+
(0, class_validator_1.IsString)(),
|
|
33
|
+
tslib_1.__metadata("design:type", String)
|
|
34
|
+
], TwitterToken.prototype, "refresh_token", void 0);
|
|
35
|
+
tslib_1.__decorate([
|
|
36
|
+
decorators_1.Firestore.Timestamp(),
|
|
37
|
+
(0, class_validators_1.IsDayjs)(),
|
|
38
|
+
tslib_1.__metadata("design:type", dayjs_1.default.Dayjs)
|
|
39
|
+
], TwitterToken.prototype, "expires_at", void 0);
|
|
40
|
+
//# sourceMappingURL=token.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"token.js","sourceRoot":"","sources":["../../../../../../packages/@nx-ddd/x/src/lib/domain/models/token.ts"],"names":[],"mappings":";;;;AAAA,qDAAyD;AACzD,0DAA0B;AAC1B,yEAA6D;AAC7D,6DAAyD;AAEzD,MAAa,YAAY;IAOvB,MAAM,CAAC,QAAQ,CAAC,KAA6B;QAC3C,OAAO,IAAA,8BAAY,EAAC,MAAM,CAAC,MAAM,CAAC,IAAI,YAAY,EAAE,EAAE,KAAK,CAAC,CAAC,CAAC;IAChE,CAAC;CACF;AAVD,oCAUC;AATiC;IAA/B,sBAAS,CAAC,MAAM,EAAE;IAAE,IAAA,0BAAQ,GAAE;;gDAAoB;AACnB;IAA/B,sBAAS,CAAC,MAAM,EAAE;IAAE,IAAA,0BAAQ,GAAE;;kDAAsB;AACrB;IAA/B,sBAAS,CAAC,MAAM,EAAE;IAAE,IAAA,0BAAQ,GAAE;;2CAAe;AACd;IAA/B,sBAAS,CAAC,MAAM,EAAE;IAAE,IAAA,0BAAQ,GAAE;;mDAAuB;AACpB;IAAjC,sBAAS,CAAC,SAAS,EAAE;IAAE,IAAA,0BAAO,GAAE;sCAAa,eAAK,CAAC,KAAK;gDAAC"}
|
package/index.d.ts
ADDED
package/index.js
ADDED
package/index.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../packages/@nx-ddd/x/src/lib/index.ts"],"names":[],"mappings":";;;AAAA,sDAA4B;AAC5B,sDAA4B"}
|
package/package.json
ADDED
package/x.config.d.ts
ADDED
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { InjectionToken } from "injection-js";
|
|
2
|
+
export interface XOauth2Config {
|
|
3
|
+
clientId: string;
|
|
4
|
+
clientSecret: string;
|
|
5
|
+
callback?: string;
|
|
6
|
+
scopes?: string[];
|
|
7
|
+
token: string;
|
|
8
|
+
}
|
|
9
|
+
export interface XOauthConfig {
|
|
10
|
+
consumerKey: string;
|
|
11
|
+
consumerSecret: string;
|
|
12
|
+
accessToken: string;
|
|
13
|
+
accessTokenSecret: string;
|
|
14
|
+
}
|
|
15
|
+
export interface XConfig {
|
|
16
|
+
oauth: XOauthConfig;
|
|
17
|
+
oauth2: XOauth2Config;
|
|
18
|
+
}
|
|
19
|
+
export declare const X_CONFIG: InjectionToken<XConfig>;
|
package/x.config.js
ADDED
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.X_CONFIG = void 0;
|
|
4
|
+
const injection_js_1 = require("injection-js");
|
|
5
|
+
exports.X_CONFIG = new injection_js_1.InjectionToken('[@nx-ddd/x] X Config');
|
|
6
|
+
//# sourceMappingURL=x.config.js.map
|
package/x.config.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"x.config.js","sourceRoot":"","sources":["../../../../packages/@nx-ddd/x/src/lib/x.config.ts"],"names":[],"mappings":";;;AAAA,+CAA8C;AAsBjC,QAAA,QAAQ,GAAG,IAAI,6BAAc,CAAU,sBAAsB,CAAC,CAAC"}
|
package/x.module.d.ts
ADDED
package/x.module.js
ADDED
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var XModule_1;
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
exports.XModule = void 0;
|
|
5
|
+
const tslib_1 = require("tslib");
|
|
6
|
+
const core_1 = require("@nx-ddd/core");
|
|
7
|
+
const x_config_1 = require("./x.config");
|
|
8
|
+
let XModule = exports.XModule = XModule_1 = class XModule {
|
|
9
|
+
static forRoot(config) {
|
|
10
|
+
return {
|
|
11
|
+
nxModule: XModule_1,
|
|
12
|
+
providers: [
|
|
13
|
+
{
|
|
14
|
+
provide: x_config_1.X_CONFIG,
|
|
15
|
+
useValue: config,
|
|
16
|
+
}
|
|
17
|
+
],
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
};
|
|
21
|
+
exports.XModule = XModule = XModule_1 = tslib_1.__decorate([
|
|
22
|
+
(0, core_1.NxModule)({})
|
|
23
|
+
], XModule);
|
|
24
|
+
//# sourceMappingURL=x.module.js.map
|
package/x.module.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"x.module.js","sourceRoot":"","sources":["../../../../packages/@nx-ddd/x/src/lib/x.module.ts"],"names":[],"mappings":";;;;;AAAA,uCAAwC;AACxC,yCAA+C;AAGxC,IAAM,OAAO,iCAAb,MAAM,OAAO;IAClB,MAAM,CAAC,OAAO,CAAC,MAAe;QAC5B,OAAO;YACL,QAAQ,EAAE,SAAO;YACjB,SAAS,EAAE;gBACT;oBACE,OAAO,EAAE,mBAAQ;oBACjB,QAAQ,EAAE,MAAM;iBACjB;aACF;SACF,CAAC;IACJ,CAAC;CACF,CAAA;kBAZY,OAAO;IADnB,IAAA,eAAQ,EAAC,EAAE,CAAC;GACA,OAAO,CAYnB"}
|
package/x.service.d.ts
ADDED
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { MessageEvent, TwitterToken } from './domain/models';
|
|
2
|
+
import { TwitterApi } from 'twitter-api-v2';
|
|
3
|
+
import { Tweet, TwitterUser } from './domain/models';
|
|
4
|
+
export declare abstract class XService {
|
|
5
|
+
getClient(obj: any): any;
|
|
6
|
+
isExpired(token: TwitterToken): boolean;
|
|
7
|
+
refreshToken(token: TwitterToken): Promise<TwitterToken>;
|
|
8
|
+
get consumerClient(): TwitterApi;
|
|
9
|
+
get consumerClientById(): TwitterApi;
|
|
10
|
+
get consumerClientByCredentials(): TwitterApi;
|
|
11
|
+
get consumerClientByToken(): TwitterApi;
|
|
12
|
+
getClientV2Next(token: TwitterToken): TwitterApi;
|
|
13
|
+
getDirectMessageEventsList(client: TwitterApi, options: {
|
|
14
|
+
count?: number;
|
|
15
|
+
}): Promise<MessageEvent[]>;
|
|
16
|
+
getAccountVerifyCredentials(client?: TwitterApi): Promise<{
|
|
17
|
+
id: string;
|
|
18
|
+
}>;
|
|
19
|
+
generateOAuth2AuthLink(client: TwitterApi): {
|
|
20
|
+
url: string;
|
|
21
|
+
codeVerifier: string;
|
|
22
|
+
};
|
|
23
|
+
loginWithOAuth2(client: TwitterApi, code: string, codeVerifier: string): Promise<any>;
|
|
24
|
+
getUser(client: TwitterApi, id: string): Promise<TwitterUser>;
|
|
25
|
+
getUsers(client: TwitterApi, ids: string[]): Promise<TwitterUser[]>;
|
|
26
|
+
sendDirectMessage(client: TwitterApi, recipientId: string, text: string): Promise<any>;
|
|
27
|
+
sendReply(client: TwitterApi, tweetId: string, text: string): Promise<void>;
|
|
28
|
+
reply(client: TwitterApi, tweetId: string, text: string): Promise<void>;
|
|
29
|
+
searchTweets(client: TwitterApi, query: string, sinceId?: string): Promise<Tweet[]>;
|
|
30
|
+
searchPosts(client: TwitterApi, query: string, sinceId?: string): Promise<void>;
|
|
31
|
+
deletePost(tweetId: string): Promise<void>;
|
|
32
|
+
like(tweetId: string): Promise<void>;
|
|
33
|
+
}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { MessageEvent, TwitterToken } from '@nx-ddd/x/domain/models';
|
|
2
|
+
import { XConfig } from './x.config';
|
|
3
|
+
import { XService } from './x.service';
|
|
4
|
+
import { TwitterApi } from 'twitter-api-v2';
|
|
5
|
+
import { TwitterUser } from './domain/models';
|
|
6
|
+
export declare class XServiceImpl extends XService {
|
|
7
|
+
private config;
|
|
8
|
+
constructor(config: XConfig);
|
|
9
|
+
isExpired(token: TwitterToken): boolean;
|
|
10
|
+
refreshToken(token: TwitterToken): Promise<TwitterToken>;
|
|
11
|
+
get consumerClient(): TwitterApi;
|
|
12
|
+
get consumerClientByCredentials(): TwitterApi;
|
|
13
|
+
get consumerClientById(): TwitterApi;
|
|
14
|
+
get consumerClientByToken(): TwitterApi;
|
|
15
|
+
getClientV2Next(token: TwitterToken): TwitterApi;
|
|
16
|
+
getClient(props: {
|
|
17
|
+
accessToken: string;
|
|
18
|
+
accessTokenSecret: string;
|
|
19
|
+
}): TwitterApi;
|
|
20
|
+
generateOAuth2AuthLink(client: TwitterApi): import("twitter-api-v2").IOAuth2RequestTokenResult;
|
|
21
|
+
loginWithOAuth2(client: TwitterApi, code: string, codeVerifier: string): Promise<any>;
|
|
22
|
+
getDirectMessageEventsList(client: TwitterApi, options: {
|
|
23
|
+
count?: number;
|
|
24
|
+
}): Promise<MessageEvent[]>;
|
|
25
|
+
getAccountVerifyCredentials(client?: TwitterApi): Promise<{
|
|
26
|
+
id: string;
|
|
27
|
+
}>;
|
|
28
|
+
getUser(client: TwitterApi, id: string): Promise<TwitterUser>;
|
|
29
|
+
getUsers(client: TwitterApi, ids: string[]): Promise<TwitterUser[]>;
|
|
30
|
+
sendDirectMessage(client: TwitterApi, recipientId: string, text: string): Promise<import("twitter-api-v2/dist/esm/types/v2/dm.v2.types").PostDMInConversationResult>;
|
|
31
|
+
sendReply(client: TwitterApi, tweetId: string, text: string): Promise<void>;
|
|
32
|
+
reply(client: TwitterApi, tweetId: string, text: string): Promise<void>;
|
|
33
|
+
searchTweets(client: TwitterApi, query: string, sinceId?: string): Promise<any>;
|
|
34
|
+
searchPosts(client: TwitterApi, query: string, sinceId?: string): Promise<any>;
|
|
35
|
+
deletePost(tweetId: string): Promise<void>;
|
|
36
|
+
like(tweetId: string): Promise<void>;
|
|
37
|
+
}
|
|
38
|
+
export declare const X_SERVICE_PROVIDER: {
|
|
39
|
+
provide: typeof XService;
|
|
40
|
+
useClass: typeof XServiceImpl;
|
|
41
|
+
}[];
|
|
@@ -0,0 +1,249 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.X_SERVICE_PROVIDER = exports.XServiceImpl = void 0;
|
|
4
|
+
const tslib_1 = require("tslib");
|
|
5
|
+
const core_1 = require("@nx-ddd/core");
|
|
6
|
+
const dayjs_1 = tslib_1.__importDefault(require("dayjs"));
|
|
7
|
+
const x_config_1 = require("./x.config");
|
|
8
|
+
const x_service_1 = require("./x.service");
|
|
9
|
+
const twitter_api_v2_1 = require("twitter-api-v2");
|
|
10
|
+
let XServiceImpl = exports.XServiceImpl = class XServiceImpl extends x_service_1.XService {
|
|
11
|
+
constructor(config) {
|
|
12
|
+
super();
|
|
13
|
+
this.config = config;
|
|
14
|
+
}
|
|
15
|
+
isExpired(token) {
|
|
16
|
+
return (0, dayjs_1.default)().isAfter(token.expires_at.add(-5, 'minutes'));
|
|
17
|
+
}
|
|
18
|
+
refreshToken(token) {
|
|
19
|
+
return tslib_1.__awaiter(this, void 0, void 0, function* () {
|
|
20
|
+
const client = this.consumerClientById;
|
|
21
|
+
const data = yield client.refreshOAuth2Token(token.refresh_token);
|
|
22
|
+
return {
|
|
23
|
+
token_type: 'bearer',
|
|
24
|
+
access_token: data.accessToken,
|
|
25
|
+
scope: data.scope.join(' '),
|
|
26
|
+
refresh_token: data.refreshToken,
|
|
27
|
+
expires_at: (0, dayjs_1.default)().add(data.expiresIn, 'seconds'),
|
|
28
|
+
};
|
|
29
|
+
});
|
|
30
|
+
}
|
|
31
|
+
get consumerClient() {
|
|
32
|
+
// return this.consumerClientByCredentials;
|
|
33
|
+
return this.consumerClientByToken;
|
|
34
|
+
}
|
|
35
|
+
get consumerClientByCredentials() {
|
|
36
|
+
return new twitter_api_v2_1.TwitterApi({
|
|
37
|
+
appKey: this.config.oauth.consumerKey,
|
|
38
|
+
appSecret: this.config.oauth.consumerSecret,
|
|
39
|
+
accessToken: this.config.oauth.accessToken,
|
|
40
|
+
accessSecret: this.config.oauth.accessTokenSecret,
|
|
41
|
+
});
|
|
42
|
+
}
|
|
43
|
+
get consumerClientById() {
|
|
44
|
+
return new twitter_api_v2_1.TwitterApi({
|
|
45
|
+
clientId: this.config.oauth2.clientId,
|
|
46
|
+
clientSecret: this.config.oauth2.clientSecret,
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
get consumerClientByToken() {
|
|
50
|
+
return new twitter_api_v2_1.TwitterApi(this.config.oauth2.token);
|
|
51
|
+
}
|
|
52
|
+
getClientV2Next(token) {
|
|
53
|
+
return new twitter_api_v2_1.TwitterApi(token.access_token);
|
|
54
|
+
}
|
|
55
|
+
getClient(props) {
|
|
56
|
+
return new twitter_api_v2_1.TwitterApi({
|
|
57
|
+
appKey: this.config.oauth.consumerKey,
|
|
58
|
+
appSecret: this.config.oauth.consumerSecret,
|
|
59
|
+
accessToken: props.accessToken,
|
|
60
|
+
accessSecret: props.accessTokenSecret,
|
|
61
|
+
});
|
|
62
|
+
}
|
|
63
|
+
generateOAuth2AuthLink(client) {
|
|
64
|
+
return client.generateOAuth2AuthLink(this.config.oauth2.callback, {
|
|
65
|
+
state: 'test',
|
|
66
|
+
scope: ['offline.access', 'dm.read', 'tweet.write', 'users.read', 'dm.write', 'tweet.read'],
|
|
67
|
+
});
|
|
68
|
+
}
|
|
69
|
+
loginWithOAuth2(client, code, codeVerifier) {
|
|
70
|
+
return client.loginWithOAuth2({
|
|
71
|
+
code,
|
|
72
|
+
codeVerifier,
|
|
73
|
+
redirectUri: this.config.oauth2.callback,
|
|
74
|
+
});
|
|
75
|
+
}
|
|
76
|
+
getDirectMessageEventsList(client, options) {
|
|
77
|
+
return tslib_1.__awaiter(this, void 0, void 0, function* () {
|
|
78
|
+
try {
|
|
79
|
+
const events = yield client.v2.listDmEvents({
|
|
80
|
+
'dm_event.fields': [
|
|
81
|
+
'attachments', 'created_at', 'dm_conversation_id',
|
|
82
|
+
'event_type', 'id', 'participant_ids',
|
|
83
|
+
'referenced_tweets', 'sender_id', 'text',
|
|
84
|
+
],
|
|
85
|
+
expansions: ['sender_id', 'participant_ids'],
|
|
86
|
+
event_types: ['MessageCreate'],
|
|
87
|
+
max_results: options.count,
|
|
88
|
+
'user.fields': [
|
|
89
|
+
'created_at', 'description', 'entities', 'id', 'location', 'name',
|
|
90
|
+
'pinned_tweet_id', 'profile_image_url', 'protected', 'public_metrics',
|
|
91
|
+
'url', 'username', 'verified', 'verified_type', 'withheld'
|
|
92
|
+
],
|
|
93
|
+
});
|
|
94
|
+
return events.data.data.map(data => ({
|
|
95
|
+
id: data.id,
|
|
96
|
+
senderId: data.sender_id,
|
|
97
|
+
eventType: 'MessageCreate',
|
|
98
|
+
dmConversationId: data.dm_conversation_id,
|
|
99
|
+
text: data.text,
|
|
100
|
+
createdAt: (0, dayjs_1.default)(data.created_at),
|
|
101
|
+
updatedAt: null,
|
|
102
|
+
}));
|
|
103
|
+
}
|
|
104
|
+
catch (error) {
|
|
105
|
+
console.error(error);
|
|
106
|
+
throw error;
|
|
107
|
+
}
|
|
108
|
+
});
|
|
109
|
+
}
|
|
110
|
+
getAccountVerifyCredentials(client = this.consumerClient) {
|
|
111
|
+
return tslib_1.__awaiter(this, void 0, void 0, function* () {
|
|
112
|
+
const data = yield client.v2.me();
|
|
113
|
+
return { id: data.data.id };
|
|
114
|
+
});
|
|
115
|
+
}
|
|
116
|
+
// async getUserShow(options: {user_id?: string}): Promise<Twitter.UserShow> {
|
|
117
|
+
// // const {data} = await this.client.get('users/show', options) as any;
|
|
118
|
+
// // return camelize(data);
|
|
119
|
+
// return null;
|
|
120
|
+
// }
|
|
121
|
+
getUser(client = this.consumerClient, id) {
|
|
122
|
+
return tslib_1.__awaiter(this, void 0, void 0, function* () {
|
|
123
|
+
try {
|
|
124
|
+
const { data } = yield client.v2.user(id, {
|
|
125
|
+
'user.fields': [
|
|
126
|
+
'created_at', 'description', 'entities', 'id', 'location',
|
|
127
|
+
'name', 'pinned_tweet_id', 'profile_image_url', 'protected',
|
|
128
|
+
'public_metrics', 'url', 'username', 'verified', 'verified_type', 'withheld'
|
|
129
|
+
],
|
|
130
|
+
});
|
|
131
|
+
return data;
|
|
132
|
+
}
|
|
133
|
+
catch (error) {
|
|
134
|
+
console.error('error:', error);
|
|
135
|
+
throw error;
|
|
136
|
+
}
|
|
137
|
+
});
|
|
138
|
+
}
|
|
139
|
+
getUsers(client = this.consumerClient, ids) {
|
|
140
|
+
return tslib_1.__awaiter(this, void 0, void 0, function* () {
|
|
141
|
+
try {
|
|
142
|
+
const { data } = yield client.v2.users(ids, {
|
|
143
|
+
'user.fields': [
|
|
144
|
+
'created_at',
|
|
145
|
+
'description',
|
|
146
|
+
'entities',
|
|
147
|
+
'id',
|
|
148
|
+
'location',
|
|
149
|
+
'name',
|
|
150
|
+
'pinned_tweet_id',
|
|
151
|
+
'profile_image_url',
|
|
152
|
+
'protected',
|
|
153
|
+
'public_metrics',
|
|
154
|
+
'url',
|
|
155
|
+
'username',
|
|
156
|
+
],
|
|
157
|
+
});
|
|
158
|
+
return data;
|
|
159
|
+
}
|
|
160
|
+
catch (err) {
|
|
161
|
+
console.error(err);
|
|
162
|
+
throw err;
|
|
163
|
+
}
|
|
164
|
+
});
|
|
165
|
+
}
|
|
166
|
+
sendDirectMessage(client = this.consumerClient, recipientId, text) {
|
|
167
|
+
return tslib_1.__awaiter(this, void 0, void 0, function* () {
|
|
168
|
+
return client.v2.sendDmToParticipant(recipientId, { text });
|
|
169
|
+
});
|
|
170
|
+
}
|
|
171
|
+
sendReply(client = this.consumerClient, tweetId, text) {
|
|
172
|
+
return tslib_1.__awaiter(this, void 0, void 0, function* () {
|
|
173
|
+
return this.reply(client, tweetId, text);
|
|
174
|
+
});
|
|
175
|
+
}
|
|
176
|
+
reply(client = this.consumerClient, tweetId, text) {
|
|
177
|
+
return tslib_1.__awaiter(this, void 0, void 0, function* () {
|
|
178
|
+
try {
|
|
179
|
+
yield client.v2.reply(text, tweetId);
|
|
180
|
+
}
|
|
181
|
+
catch (error) {
|
|
182
|
+
console.error('sendReply Error');
|
|
183
|
+
console.error('error:', error);
|
|
184
|
+
throw error;
|
|
185
|
+
}
|
|
186
|
+
});
|
|
187
|
+
}
|
|
188
|
+
searchTweets(client = this.consumerClient, query, sinceId) {
|
|
189
|
+
return tslib_1.__awaiter(this, void 0, void 0, function* () {
|
|
190
|
+
return this.searchPosts(client, query, sinceId);
|
|
191
|
+
});
|
|
192
|
+
}
|
|
193
|
+
searchPosts(client = this.consumerClient, query, sinceId) {
|
|
194
|
+
var _a, _b;
|
|
195
|
+
return tslib_1.__awaiter(this, void 0, void 0, function* () {
|
|
196
|
+
try {
|
|
197
|
+
const res = yield client.v2.search({
|
|
198
|
+
query,
|
|
199
|
+
since_id: sinceId,
|
|
200
|
+
"tweet.fields": ["created_at", "lang", "conversation_id", 'author_id'],
|
|
201
|
+
'user.fields': ['id', 'name', 'username'],
|
|
202
|
+
expansions: ['author_id'],
|
|
203
|
+
});
|
|
204
|
+
if (!((_a = res === null || res === void 0 ? void 0 : res.data) === null || _a === void 0 ? void 0 : _a.data))
|
|
205
|
+
return [];
|
|
206
|
+
return (_b = res === null || res === void 0 ? void 0 : res.data) === null || _b === void 0 ? void 0 : _b.data.map((tweet) => {
|
|
207
|
+
const author = res.includes.users.find(user => user.id === tweet.author_id);
|
|
208
|
+
return {
|
|
209
|
+
id: tweet.id,
|
|
210
|
+
text: tweet.text,
|
|
211
|
+
authorId: tweet.author_id,
|
|
212
|
+
author: {
|
|
213
|
+
id: author.id,
|
|
214
|
+
name: author.name,
|
|
215
|
+
username: author.username,
|
|
216
|
+
},
|
|
217
|
+
createdAt: (0, dayjs_1.default)(tweet.created_at),
|
|
218
|
+
};
|
|
219
|
+
});
|
|
220
|
+
}
|
|
221
|
+
catch (error) {
|
|
222
|
+
console.error(error);
|
|
223
|
+
throw error;
|
|
224
|
+
}
|
|
225
|
+
});
|
|
226
|
+
}
|
|
227
|
+
deletePost(tweetId) {
|
|
228
|
+
return tslib_1.__awaiter(this, void 0, void 0, function* () {
|
|
229
|
+
throw new Error('Method not implemented.');
|
|
230
|
+
});
|
|
231
|
+
}
|
|
232
|
+
like(tweetId) {
|
|
233
|
+
return tslib_1.__awaiter(this, void 0, void 0, function* () {
|
|
234
|
+
throw new Error('Method not implemented.');
|
|
235
|
+
});
|
|
236
|
+
}
|
|
237
|
+
};
|
|
238
|
+
exports.XServiceImpl = XServiceImpl = tslib_1.__decorate([
|
|
239
|
+
(0, core_1.Injectable)(),
|
|
240
|
+
tslib_1.__param(0, (0, core_1.Inject)(x_config_1.X_CONFIG)),
|
|
241
|
+
tslib_1.__metadata("design:paramtypes", [Object])
|
|
242
|
+
], XServiceImpl);
|
|
243
|
+
exports.X_SERVICE_PROVIDER = [
|
|
244
|
+
{
|
|
245
|
+
provide: x_service_1.XService,
|
|
246
|
+
useClass: XServiceImpl,
|
|
247
|
+
}
|
|
248
|
+
];
|
|
249
|
+
//# sourceMappingURL=x.service.impl.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"x.service.impl.js","sourceRoot":"","sources":["../../../../packages/@nx-ddd/x/src/lib/x.service.impl.ts"],"names":[],"mappings":"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"}
|
package/x.service.js
ADDED
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.XService = void 0;
|
|
4
|
+
const tslib_1 = require("tslib");
|
|
5
|
+
const di_1 = require("@nx-ddd/core/di");
|
|
6
|
+
let XService = exports.XService = class XService {
|
|
7
|
+
getClient(obj) {
|
|
8
|
+
throw new Error('Method not implemented.');
|
|
9
|
+
}
|
|
10
|
+
isExpired(token) {
|
|
11
|
+
throw new Error('Method not implemented.');
|
|
12
|
+
}
|
|
13
|
+
refreshToken(token) {
|
|
14
|
+
return tslib_1.__awaiter(this, void 0, void 0, function* () {
|
|
15
|
+
throw new Error('Method not implemented.');
|
|
16
|
+
});
|
|
17
|
+
}
|
|
18
|
+
get consumerClient() {
|
|
19
|
+
throw new Error('Method not implemented.');
|
|
20
|
+
}
|
|
21
|
+
get consumerClientById() {
|
|
22
|
+
throw new Error('Method not implemented.');
|
|
23
|
+
}
|
|
24
|
+
get consumerClientByCredentials() {
|
|
25
|
+
throw new Error('Method not implemented.');
|
|
26
|
+
}
|
|
27
|
+
get consumerClientByToken() {
|
|
28
|
+
throw new Error('Method not implemented.');
|
|
29
|
+
}
|
|
30
|
+
getClientV2Next(token) {
|
|
31
|
+
throw new Error('Method not implemented.');
|
|
32
|
+
}
|
|
33
|
+
getDirectMessageEventsList(client, options) {
|
|
34
|
+
return tslib_1.__awaiter(this, void 0, void 0, function* () {
|
|
35
|
+
throw new Error('Method not implemented.');
|
|
36
|
+
});
|
|
37
|
+
}
|
|
38
|
+
getAccountVerifyCredentials(client = this.consumerClient) {
|
|
39
|
+
return tslib_1.__awaiter(this, void 0, void 0, function* () {
|
|
40
|
+
throw new Error('Method not implemented.');
|
|
41
|
+
});
|
|
42
|
+
}
|
|
43
|
+
generateOAuth2AuthLink(client) {
|
|
44
|
+
throw new Error('Method not implemented.');
|
|
45
|
+
}
|
|
46
|
+
loginWithOAuth2(client, code, codeVerifier) {
|
|
47
|
+
throw new Error('Method not implemented.');
|
|
48
|
+
}
|
|
49
|
+
// async getUserShow(options: {user_id?: string}): Promise<Twitter.UserShow> {
|
|
50
|
+
// // const {data} = await this.client.get('users/show', options) as any;
|
|
51
|
+
// // return camelize(data);
|
|
52
|
+
// return null;
|
|
53
|
+
// }
|
|
54
|
+
getUser(client = this.consumerClient, id) {
|
|
55
|
+
return tslib_1.__awaiter(this, void 0, void 0, function* () {
|
|
56
|
+
throw new Error('Method not implemented.');
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
getUsers(client = this.consumerClient, ids) {
|
|
60
|
+
return tslib_1.__awaiter(this, void 0, void 0, function* () {
|
|
61
|
+
throw new Error('Method not implemented.');
|
|
62
|
+
});
|
|
63
|
+
}
|
|
64
|
+
sendDirectMessage(client = this.consumerClient, recipientId, text) {
|
|
65
|
+
return tslib_1.__awaiter(this, void 0, void 0, function* () {
|
|
66
|
+
throw new Error('Method not implemented.');
|
|
67
|
+
});
|
|
68
|
+
}
|
|
69
|
+
sendReply(client = this.consumerClient, tweetId, text) {
|
|
70
|
+
return tslib_1.__awaiter(this, void 0, void 0, function* () {
|
|
71
|
+
throw new Error('Method not implemented.');
|
|
72
|
+
});
|
|
73
|
+
}
|
|
74
|
+
reply(client = this.consumerClient, tweetId, text) {
|
|
75
|
+
return tslib_1.__awaiter(this, void 0, void 0, function* () {
|
|
76
|
+
throw new Error('Method not implemented.');
|
|
77
|
+
});
|
|
78
|
+
}
|
|
79
|
+
searchTweets(client = this.consumerClient, query, sinceId) {
|
|
80
|
+
return tslib_1.__awaiter(this, void 0, void 0, function* () {
|
|
81
|
+
throw new Error('Method not implemented.');
|
|
82
|
+
});
|
|
83
|
+
}
|
|
84
|
+
searchPosts(client = this.consumerClient, query, sinceId) {
|
|
85
|
+
return tslib_1.__awaiter(this, void 0, void 0, function* () {
|
|
86
|
+
throw new Error('Method not implemented.');
|
|
87
|
+
});
|
|
88
|
+
}
|
|
89
|
+
deletePost(tweetId) {
|
|
90
|
+
return tslib_1.__awaiter(this, void 0, void 0, function* () {
|
|
91
|
+
throw new Error('Method not implemented.');
|
|
92
|
+
});
|
|
93
|
+
}
|
|
94
|
+
like(tweetId) {
|
|
95
|
+
return tslib_1.__awaiter(this, void 0, void 0, function* () {
|
|
96
|
+
throw new Error('Method not implemented.');
|
|
97
|
+
});
|
|
98
|
+
}
|
|
99
|
+
};
|
|
100
|
+
exports.XService = XService = tslib_1.__decorate([
|
|
101
|
+
(0, di_1.Injectable)({ providedIn: 'root' })
|
|
102
|
+
], XService);
|
|
103
|
+
//# sourceMappingURL=x.service.js.map
|
package/x.service.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"x.service.js","sourceRoot":"","sources":["../../../../packages/@nx-ddd/x/src/lib/x.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { TwitterApi } from "twitter-api-v2";
|
|
2
|
+
import { XServiceImpl } from "./x.service.impl";
|
|
3
|
+
export declare class MockXService extends XServiceImpl {
|
|
4
|
+
reply(client: TwitterApi, tweetId: string, text: string): Promise<void>;
|
|
5
|
+
sendDirectMessage(client: TwitterApi, recipientId: string, text: string): Promise<any>;
|
|
6
|
+
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.MockXService = void 0;
|
|
4
|
+
const tslib_1 = require("tslib");
|
|
5
|
+
const core_1 = require("@nx-ddd/core");
|
|
6
|
+
const x_service_impl_1 = require("./x.service.impl");
|
|
7
|
+
let MockXService = exports.MockXService = class MockXService extends x_service_impl_1.XServiceImpl {
|
|
8
|
+
reply(client, tweetId, text) {
|
|
9
|
+
return tslib_1.__awaiter(this, void 0, void 0, function* () {
|
|
10
|
+
console.log('MockXService.reply() is called!');
|
|
11
|
+
});
|
|
12
|
+
}
|
|
13
|
+
sendDirectMessage(client, recipientId, text) {
|
|
14
|
+
return tslib_1.__awaiter(this, void 0, void 0, function* () {
|
|
15
|
+
console.log('MockXService.sendDirectMessage() is called!');
|
|
16
|
+
});
|
|
17
|
+
}
|
|
18
|
+
};
|
|
19
|
+
exports.MockXService = MockXService = tslib_1.__decorate([
|
|
20
|
+
(0, core_1.Injectable)()
|
|
21
|
+
], MockXService);
|
|
22
|
+
//# sourceMappingURL=x.service.mock.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"x.service.mock.js","sourceRoot":"","sources":["../../../../packages/@nx-ddd/x/src/lib/x.service.mock.ts"],"names":[],"mappings":";;;;AAAA,uCAA0C;AAE1C,qDAAgD;AAGzC,IAAM,YAAY,0BAAlB,MAAM,YAAa,SAAQ,6BAAY;IACtC,KAAK,CAAC,MAAkB,EAAE,OAAe,EAAE,IAAY;;YAC3D,OAAO,CAAC,GAAG,CAAC,iCAAiC,CAAC,CAAC;QACjD,CAAC;KAAA;IAEK,iBAAiB,CAAC,MAAkB,EAAE,WAAmB,EAAE,IAAY;;YAC3E,OAAO,CAAC,GAAG,CAAC,6CAA6C,CAAC,CAAC;QAC7D,CAAC;KAAA;CACF,CAAA;uBARY,YAAY;IADxB,IAAA,iBAAU,GAAE;GACA,YAAY,CAQxB"}
|