nodejs-insta-private-api-mqt 1.3.70
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/LICENSE +21 -0
- package/README.md +3677 -0
- package/dist/constants/constants.js +342 -0
- package/dist/constants/index.js +58 -0
- package/dist/core/client.js +419 -0
- package/dist/core/nav-chain.js +282 -0
- package/dist/core/repository.js +7 -0
- package/dist/core/request.js +390 -0
- package/dist/core/state.js +1473 -0
- package/dist/core/utils.js +786 -0
- package/dist/downloadMedia.js +381 -0
- package/dist/errors/index.d.ts +16 -0
- package/dist/errors/index.js +38 -0
- package/dist/errors/index.js.map +1 -0
- package/dist/extend.js +167 -0
- package/dist/fbns/fbns.client.d.ts +32 -0
- package/dist/fbns/fbns.client.events.d.ts +41 -0
- package/dist/fbns/fbns.client.events.js +3 -0
- package/dist/fbns/fbns.client.events.js.map +1 -0
- package/dist/fbns/fbns.client.js +252 -0
- package/dist/fbns/fbns.client.js.map +1 -0
- package/dist/fbns/fbns.device-auth.d.ts +17 -0
- package/dist/fbns/fbns.device-auth.js +54 -0
- package/dist/fbns/fbns.device-auth.js.map +1 -0
- package/dist/fbns/fbns.types.d.ts +83 -0
- package/dist/fbns/fbns.types.js +3 -0
- package/dist/fbns/fbns.types.js.map +1 -0
- package/dist/fbns/fbns.utilities.d.ts +2 -0
- package/dist/fbns/fbns.utilities.js +79 -0
- package/dist/fbns/fbns.utilities.js.map +1 -0
- package/dist/fbns/index.d.ts +4 -0
- package/dist/fbns/index.js +21 -0
- package/dist/fbns/index.js.map +1 -0
- package/dist/index.js +139 -0
- package/dist/mqtt-shim.d.ts +96 -0
- package/dist/mqtt-shim.js +15 -0
- package/dist/mqttot/index.d.ts +4 -0
- package/dist/mqttot/index.js +21 -0
- package/dist/mqttot/index.js.map +1 -0
- package/dist/mqttot/mqttot.client.d.ts +39 -0
- package/dist/mqttot/mqttot.client.js +318 -0
- package/dist/mqttot/mqttot.client.js.map +1 -0
- package/dist/mqttot/mqttot.connect.request.packet.d.ts +7 -0
- package/dist/mqttot/mqttot.connect.request.packet.js +9 -0
- package/dist/mqttot/mqttot.connect.request.packet.js.map +1 -0
- package/dist/mqttot/mqttot.connect.response.packet.d.ts +7 -0
- package/dist/mqttot/mqttot.connect.response.packet.js +24 -0
- package/dist/mqttot/mqttot.connect.response.packet.js.map +1 -0
- package/dist/mqttot/mqttot.connection.d.ts +57 -0
- package/dist/mqttot/mqttot.connection.js +79 -0
- package/dist/mqttot/mqttot.connection.js.map +1 -0
- package/dist/package.json +59 -0
- package/dist/realtime/commands/commands.d.ts +15 -0
- package/dist/realtime/commands/commands.js +71 -0
- package/dist/realtime/commands/commands.js.map +1 -0
- package/dist/realtime/commands/direct.commands.d.ts +75 -0
- package/dist/realtime/commands/direct.commands.js +417 -0
- package/dist/realtime/commands/direct.commands.js.map +1 -0
- package/dist/realtime/commands/enhanced.direct.commands.js +1731 -0
- package/dist/realtime/commands/enhanced.direct.commands.js.bak +967 -0
- package/dist/realtime/commands/index.d.ts +2 -0
- package/dist/realtime/commands/index.js +20 -0
- package/dist/realtime/commands/index.js.map +1 -0
- package/dist/realtime/delta-sync.manager.js +293 -0
- package/dist/realtime/features/dm-sender.js +88 -0
- package/dist/realtime/features/error-handler.js +185 -0
- package/dist/realtime/features/gap-handler.js +61 -0
- package/dist/realtime/features/persistent-logger.js +186 -0
- package/dist/realtime/features/presence.manager.js +66 -0
- package/dist/realtime/features/session-health-monitor.js +345 -0
- package/dist/realtime/index.js +30 -0
- package/dist/realtime/messages/app-presence.event.d.ts +9 -0
- package/dist/realtime/messages/app-presence.event.js +3 -0
- package/dist/realtime/messages/app-presence.event.js.map +1 -0
- package/dist/realtime/messages/index.d.ts +3 -0
- package/dist/realtime/messages/index.js +20 -0
- package/dist/realtime/messages/index.js.map +1 -0
- package/dist/realtime/messages/message-sync.message.d.ts +222 -0
- package/dist/realtime/messages/message-sync.message.js +43 -0
- package/dist/realtime/messages/message-sync.message.js.map +1 -0
- package/dist/realtime/messages/realtime-sub.direct.data.d.ts +11 -0
- package/dist/realtime/messages/realtime-sub.direct.data.js +3 -0
- package/dist/realtime/messages/realtime-sub.direct.data.js.map +1 -0
- package/dist/realtime/messages/thread-update.message.d.ts +68 -0
- package/dist/realtime/messages/thread-update.message.js +3 -0
- package/dist/realtime/messages/thread-update.message.js.map +1 -0
- package/dist/realtime/mixins/index.d.ts +3 -0
- package/dist/realtime/mixins/index.js +20 -0
- package/dist/realtime/mixins/index.js.map +1 -0
- package/dist/realtime/mixins/message-sync.mixin.d.ts +8 -0
- package/dist/realtime/mixins/message-sync.mixin.js +596 -0
- package/dist/realtime/mixins/message-sync.mixin.js.map +1 -0
- package/dist/realtime/mixins/mixin.d.ts +19 -0
- package/dist/realtime/mixins/mixin.js +41 -0
- package/dist/realtime/mixins/mixin.js.map +1 -0
- package/dist/realtime/mixins/presence-typing.mixin.js +33 -0
- package/dist/realtime/mixins/realtime-sub.mixin.d.ts +8 -0
- package/dist/realtime/mixins/realtime-sub.mixin.js +181 -0
- package/dist/realtime/mixins/realtime-sub.mixin.js.map +1 -0
- package/dist/realtime/parsers/graphql-parser.js +43 -0
- package/dist/realtime/parsers/graphql.parser.d.ts +15 -0
- package/dist/realtime/parsers/graphql.parser.js +22 -0
- package/dist/realtime/parsers/graphql.parser.js.map +1 -0
- package/dist/realtime/parsers/index.d.ts +6 -0
- package/dist/realtime/parsers/index.js +23 -0
- package/dist/realtime/parsers/index.js.map +1 -0
- package/dist/realtime/parsers/iris-parser.js +43 -0
- package/dist/realtime/parsers/iris.parser.d.ts +17 -0
- package/dist/realtime/parsers/iris.parser.js +10 -0
- package/dist/realtime/parsers/iris.parser.js.map +1 -0
- package/dist/realtime/parsers/json-parser.js +43 -0
- package/dist/realtime/parsers/json.parser.d.ts +6 -0
- package/dist/realtime/parsers/json.parser.js +10 -0
- package/dist/realtime/parsers/json.parser.js.map +1 -0
- package/dist/realtime/parsers/parser.d.ts +9 -0
- package/dist/realtime/parsers/parser.js +3 -0
- package/dist/realtime/parsers/parser.js.map +1 -0
- package/dist/realtime/parsers/region-hint-parser.js +43 -0
- package/dist/realtime/parsers/region-hint.parser.d.ts +12 -0
- package/dist/realtime/parsers/region-hint.parser.js +15 -0
- package/dist/realtime/parsers/region-hint.parser.js.map +1 -0
- package/dist/realtime/parsers/skywalker-parser.js +43 -0
- package/dist/realtime/parsers/skywalker.parser.d.ts +12 -0
- package/dist/realtime/parsers/skywalker.parser.js +15 -0
- package/dist/realtime/parsers/skywalker.parser.js.map +1 -0
- package/dist/realtime/parsers-advanced.js +158 -0
- package/dist/realtime/proto/common.proto +38 -0
- package/dist/realtime/proto/direct.proto +65 -0
- package/dist/realtime/proto/ig-messages.proto +83 -0
- package/dist/realtime/proto/iris.proto +188 -0
- package/dist/realtime/proto-parser.js +195 -0
- package/dist/realtime/protocols/iris.handshake.js +74 -0
- package/dist/realtime/protocols/proto-definitions.js +80 -0
- package/dist/realtime/protocols/skywalker.protocol.js +91 -0
- package/dist/realtime/realtime.client.events.js +3 -0
- package/dist/realtime/realtime.client.js +1915 -0
- package/dist/realtime/realtime.service.js +462 -0
- package/dist/realtime/reconnect.manager.js +88 -0
- package/dist/realtime/session.manager.js +121 -0
- package/dist/realtime/subscriptions/graphql.subscription.d.ts +47 -0
- package/dist/realtime/subscriptions/graphql.subscription.js +99 -0
- package/dist/realtime/subscriptions/graphql.subscription.js.map +1 -0
- package/dist/realtime/subscriptions/index.d.ts +2 -0
- package/dist/realtime/subscriptions/index.js +19 -0
- package/dist/realtime/subscriptions/index.js.map +1 -0
- package/dist/realtime/subscriptions/skywalker.subscription.d.ts +4 -0
- package/dist/realtime/subscriptions/skywalker.subscription.js +13 -0
- package/dist/realtime/subscriptions/skywalker.subscription.js.map +1 -0
- package/dist/realtime/topic-map.js +71 -0
- package/dist/realtime/topic.js +80 -0
- package/dist/repositories/account.repository.js +575 -0
- package/dist/repositories/bloks.repository.js +70 -0
- package/dist/repositories/captcha.repository.js +44 -0
- package/dist/repositories/challenge.repository.js +120 -0
- package/dist/repositories/clip.repository.js +165 -0
- package/dist/repositories/close-friends.repository.js +46 -0
- package/dist/repositories/collection.repository.js +68 -0
- package/dist/repositories/direct-thread.repository.js +446 -0
- package/dist/repositories/direct.repository.js +232 -0
- package/dist/repositories/explore.repository.js +70 -0
- package/dist/repositories/fbsearch.repository.js +140 -0
- package/dist/repositories/feed.repository.js +245 -0
- package/dist/repositories/friendship.repository.js +296 -0
- package/dist/repositories/fundraiser.repository.js +49 -0
- package/dist/repositories/hashtag.repository.js +99 -0
- package/dist/repositories/highlights.repository.js +121 -0
- package/dist/repositories/insights.repository.js +82 -0
- package/dist/repositories/location.repository.js +84 -0
- package/dist/repositories/media.repository.js +395 -0
- package/dist/repositories/multiple-accounts.repository.js +41 -0
- package/dist/repositories/news.repository.js +35 -0
- package/dist/repositories/note.repository.js +57 -0
- package/dist/repositories/notification.repository.js +79 -0
- package/dist/repositories/share.repository.js +35 -0
- package/dist/repositories/signup.repository.js +218 -0
- package/dist/repositories/story.repository.js +290 -0
- package/dist/repositories/timeline.repository.js +60 -0
- package/dist/repositories/totp.repository.js +139 -0
- package/dist/repositories/track.repository.js +53 -0
- package/dist/repositories/upload.repository.js +204 -0
- package/dist/repositories/user.repository.js +360 -0
- package/dist/sendmedia/index.js +27 -0
- package/dist/sendmedia/sendFile.js +72 -0
- package/dist/sendmedia/sendPhoto.js +142 -0
- package/dist/sendmedia/sendRavenPhoto.js +153 -0
- package/dist/sendmedia/sendRavenVideo.js +158 -0
- package/dist/sendmedia/uploadPhoto.js +107 -0
- package/dist/sendmedia/uploadfFile.js +130 -0
- package/dist/services/live.service.js +139 -0
- package/dist/services/search.service.js +115 -0
- package/dist/shared/index.js +96 -0
- package/dist/shared/shared.js +86 -0
- package/dist/thrift/index.d.ts +3 -0
- package/dist/thrift/index.js +20 -0
- package/dist/thrift/index.js.map +1 -0
- package/dist/thrift/thrift.d.ts +59 -0
- package/dist/thrift/thrift.js +101 -0
- package/dist/thrift/thrift.js.map +1 -0
- package/dist/thrift/thrift.reading.d.ts +41 -0
- package/dist/thrift/thrift.reading.js +327 -0
- package/dist/thrift/thrift.reading.js.map +1 -0
- package/dist/thrift/thrift.writing.d.ts +44 -0
- package/dist/thrift/thrift.writing.js +342 -0
- package/dist/thrift/thrift.writing.js.map +1 -0
- package/dist/types/index.js +285 -0
- package/dist/useMultiFileAuthState.js +1768 -0
- package/dist/utils/helper-1.js +1 -0
- package/dist/utils/helper-10.js +1 -0
- package/dist/utils/helper-11.js +1 -0
- package/dist/utils/helper-12.js +1 -0
- package/dist/utils/helper-13.js +1 -0
- package/dist/utils/helper-14.js +1 -0
- package/dist/utils/helper-15.js +1 -0
- package/dist/utils/helper-16.js +1 -0
- package/dist/utils/helper-17.js +1 -0
- package/dist/utils/helper-18.js +1 -0
- package/dist/utils/helper-19.js +1 -0
- package/dist/utils/helper-2.js +1 -0
- package/dist/utils/helper-20.js +1 -0
- package/dist/utils/helper-21.js +1 -0
- package/dist/utils/helper-22.js +1 -0
- package/dist/utils/helper-23.js +1 -0
- package/dist/utils/helper-24.js +1 -0
- package/dist/utils/helper-25.js +1 -0
- package/dist/utils/helper-26.js +1 -0
- package/dist/utils/helper-27.js +1 -0
- package/dist/utils/helper-28.js +1 -0
- package/dist/utils/helper-29.js +1 -0
- package/dist/utils/helper-3.js +1 -0
- package/dist/utils/helper-30.js +1 -0
- package/dist/utils/helper-4.js +1 -0
- package/dist/utils/helper-5.js +1 -0
- package/dist/utils/helper-6.js +1 -0
- package/dist/utils/helper-7.js +1 -0
- package/dist/utils/helper-8.js +1 -0
- package/dist/utils/helper-9.js +1 -0
- package/dist/utils/index.js +280 -0
- package/dist/utils/insta-mqtt-helper.js +128 -0
- package/examples/listen-to-messages.js +86 -0
- package/package.json +82 -0
|
@@ -0,0 +1,252 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.FbnsClient = void 0;
|
|
4
|
+
const constants_1 = require("../constants");
|
|
5
|
+
const fbns_device_auth_1 = require("./fbns.device-auth");
|
|
6
|
+
const shared_1 = require("../shared");
|
|
7
|
+
const mqttot_1 = require("../mqttot");
|
|
8
|
+
const chance_1 = require("chance");
|
|
9
|
+
const mqtts_1 = require("../mqtt-shim");
|
|
10
|
+
const errors_1 = require("../errors");
|
|
11
|
+
const eventemitter3_1 = require("eventemitter3");
|
|
12
|
+
const fbns_utilities_1 = require("./fbns.utilities");
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* FbnsClient
|
|
16
|
+
*
|
|
17
|
+
* Lightweight wrapper around MQTToTClient to handle FBNS-specific connection
|
|
18
|
+
* payloads, registration, message handling and safe disconnect behavior.
|
|
19
|
+
*
|
|
20
|
+
* NOTE: This file contains a small but important robustness change:
|
|
21
|
+
* when receiving an empty CONNACK payload we no longer force a disconnect.
|
|
22
|
+
* Instagram sometimes returns a successful CONNACK with an empty payload;
|
|
23
|
+
* treating that as a fatal error causes unnecessary disconnect loops.
|
|
24
|
+
*/
|
|
25
|
+
class FbnsClient extends eventemitter3_1.EventEmitter {
|
|
26
|
+
get auth() {
|
|
27
|
+
return this._auth;
|
|
28
|
+
}
|
|
29
|
+
set auth(value) {
|
|
30
|
+
this._auth = value;
|
|
31
|
+
}
|
|
32
|
+
constructor(ig) {
|
|
33
|
+
super();
|
|
34
|
+
this.ig = ig;
|
|
35
|
+
this.fbnsDebug = (0, shared_1.debugChannel)('fbns');
|
|
36
|
+
this.safeDisconnect = false;
|
|
37
|
+
this._auth = new fbns_device_auth_1.FbnsDeviceAuth(this.ig);
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
buildConnection() {
|
|
41
|
+
this.fbnsDebug('Constructing connection');
|
|
42
|
+
this.conn = new mqttot_1.MQTToTConnection({
|
|
43
|
+
clientIdentifier: this._auth.clientId,
|
|
44
|
+
clientInfo: {
|
|
45
|
+
userId: BigInt(this._auth.userId),
|
|
46
|
+
userAgent: (0, shared_1.createFbnsUserAgent)(this.ig),
|
|
47
|
+
clientCapabilities: 183,
|
|
48
|
+
endpointCapabilities: 128,
|
|
49
|
+
publishFormat: 1,
|
|
50
|
+
noAutomaticForeground: true,
|
|
51
|
+
makeUserAvailableInForeground: false,
|
|
52
|
+
deviceId: this._auth.deviceId,
|
|
53
|
+
isInitiallyForeground: false,
|
|
54
|
+
networkType: 1,
|
|
55
|
+
networkSubtype: 0,
|
|
56
|
+
clientMqttSessionId: BigInt(Date.now()) & BigInt(0xffffffff),
|
|
57
|
+
subscribeTopics: [76, 80, 231],
|
|
58
|
+
clientType: 'device_auth',
|
|
59
|
+
appId: BigInt(567310203415052),
|
|
60
|
+
deviceSecret: this._auth.deviceSecret,
|
|
61
|
+
anotherUnknown: BigInt(-1),
|
|
62
|
+
clientStack: 3,
|
|
63
|
+
},
|
|
64
|
+
password: this._auth.password,
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
/**
|
|
69
|
+
* Connect to FBNS (Firebase/FBNS equivalent over Instagram MQTT)
|
|
70
|
+
*
|
|
71
|
+
* Options:
|
|
72
|
+
* - enableTrace
|
|
73
|
+
* - autoReconnect
|
|
74
|
+
* - socksOptions
|
|
75
|
+
* - additionalTlsOptions
|
|
76
|
+
*
|
|
77
|
+
* Important robustness changes:
|
|
78
|
+
* - Do not force disconnect on empty CONNACK payload; log and continue.
|
|
79
|
+
* - Use clean:false to prefer session resume on reconnect (less aggressive).
|
|
80
|
+
*/
|
|
81
|
+
async connect({ enableTrace, autoReconnect, socksOptions, additionalTlsOptions, } = {}) {
|
|
82
|
+
this.fbnsDebug('Connecting to FBNS...');
|
|
83
|
+
// Ensure auth info is up-to-date
|
|
84
|
+
this.auth.update();
|
|
85
|
+
|
|
86
|
+
this.client = new mqttot_1.MQTToTClient({
|
|
87
|
+
url: constants_1.FBNS.HOST_NAME_V6,
|
|
88
|
+
payloadProvider: () => {
|
|
89
|
+
this.buildConnection();
|
|
90
|
+
if (!this.conn) {
|
|
91
|
+
throw new errors_1.InvalidStateError("No connection created - can't build provider");
|
|
92
|
+
}
|
|
93
|
+
return (0, shared_1.compressDeflate)(this.conn.toThrift());
|
|
94
|
+
},
|
|
95
|
+
enableTrace,
|
|
96
|
+
autoReconnect: autoReconnect ?? true,
|
|
97
|
+
requirePayload: false,
|
|
98
|
+
socksOptions,
|
|
99
|
+
additionalOptions: additionalTlsOptions,
|
|
100
|
+
});
|
|
101
|
+
|
|
102
|
+
// Re-emit warnings/errors to outer listeners
|
|
103
|
+
this.client.on('warning', w => this.emit('warning', w));
|
|
104
|
+
this.client.on('error', e => this.emit('error', e));
|
|
105
|
+
|
|
106
|
+
// If disconnect happens and safeDisconnect is false, emit error to upper layer
|
|
107
|
+
this.client.on('disconnect', reason => this.safeDisconnect
|
|
108
|
+
? this.emit('disconnect', reason && JSON.stringify(reason))
|
|
109
|
+
: this.emit('error', new errors_1.ClientDisconnectedError(`MQTToTClient got disconnected. Reason: ${reason && JSON.stringify(reason)}`)));
|
|
110
|
+
|
|
111
|
+
// Listen for FBNS messages and transform them accordingly
|
|
112
|
+
this.client.listen(constants_1.FbnsTopics.FBNS_MESSAGE.id, msg => this.handleMessage(msg));
|
|
113
|
+
this.client.listen({
|
|
114
|
+
topic: constants_1.FbnsTopics.FBNS_EXP_LOGGING.id,
|
|
115
|
+
transformer: async (msg) => JSON.parse((await (0, shared_1.tryUnzipAsync)(msg.payload)).toString()),
|
|
116
|
+
}, msg => this.emit('logging', msg));
|
|
117
|
+
this.client.listen(constants_1.FbnsTopics.PP.id, msg => this.emit('pp', msg.payload.toString()));
|
|
118
|
+
|
|
119
|
+
// Handle connect event from the underlying mqtt client
|
|
120
|
+
this.client.on('connect', async (res) => {
|
|
121
|
+
if (!this.client) {
|
|
122
|
+
throw new mqtts_1.IllegalStateError('No client registered but an event was received');
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
this.fbnsDebug('Connected to MQTT');
|
|
126
|
+
|
|
127
|
+
// IMPORTANT: Instagram sometimes returns a valid CONNACK with an empty payload.
|
|
128
|
+
// Historically this library treated that as an error and disconnected.
|
|
129
|
+
// That behavior causes unnecessary reconnect loops. Instead, log and continue.
|
|
130
|
+
if (!res.payload?.length) {
|
|
131
|
+
this.fbnsDebug(`Received empty connect packet. Reason: ${res.errorName} (continuing without disconnect)`);
|
|
132
|
+
// Emit a warning but do not disconnect.
|
|
133
|
+
this.emit('warning', new errors_1.EmptyPacketError('Received empty connect packet (continuing).'));
|
|
134
|
+
// NOTE: we do not return here because some flows expect the registration step below.
|
|
135
|
+
// If you prefer to skip registration on empty payload, uncomment the next line:
|
|
136
|
+
// return;
|
|
137
|
+
} else {
|
|
138
|
+
// If payload present, read auth as before
|
|
139
|
+
try {
|
|
140
|
+
const payload = res.payload.toString('utf8');
|
|
141
|
+
this.fbnsDebug(`Received auth: ${payload}`);
|
|
142
|
+
this._auth.read(payload);
|
|
143
|
+
this.emit('auth', this.auth);
|
|
144
|
+
} catch (e) {
|
|
145
|
+
this.fbnsDebug(`Failed to parse connect payload: ${e?.message || e}`);
|
|
146
|
+
this.emit('error', e);
|
|
147
|
+
// do not force disconnect here - let reconnect logic handle transient issues
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
// Continue with registration attempt if possible.
|
|
152
|
+
try {
|
|
153
|
+
await this.client.mqttotPublish({
|
|
154
|
+
topic: constants_1.FbnsTopics.FBNS_REG_REQ.id,
|
|
155
|
+
payload: Buffer.from(JSON.stringify({
|
|
156
|
+
pkg_name: constants_1.INSTAGRAM_PACKAGE_NAME,
|
|
157
|
+
appid: this.ig.state.fbAnalyticsApplicationId,
|
|
158
|
+
}), 'utf8'),
|
|
159
|
+
qosLevel: 1,
|
|
160
|
+
});
|
|
161
|
+
} catch (e) {
|
|
162
|
+
// Log registration publish error but don't necessarily abort connection entirely here
|
|
163
|
+
this.fbnsDebug(`FBNS_REG_REQ publish failed: ${e?.message || e}`);
|
|
164
|
+
this.emit('warning', e);
|
|
165
|
+
}
|
|
166
|
+
});
|
|
167
|
+
|
|
168
|
+
// Set up the register response listener BEFORE connecting
|
|
169
|
+
// because the response can arrive before connect() returns
|
|
170
|
+
const regRespPromise = (0, shared_1.listenOnce)(this.client, constants_1.FbnsTopics.FBNS_REG_RESP.id);
|
|
171
|
+
|
|
172
|
+
// Establish connection with conservative options (prefer session resume)
|
|
173
|
+
await this.client
|
|
174
|
+
.connect({
|
|
175
|
+
keepAlive: 60,
|
|
176
|
+
protocolLevel: 3,
|
|
177
|
+
// Use clean: false to allow session resume where the broker supports it.
|
|
178
|
+
// If you have issues with stale state, consider setting clean: true.
|
|
179
|
+
clean: false,
|
|
180
|
+
connectDelay: 60 * 1000,
|
|
181
|
+
})
|
|
182
|
+
.catch(e => {
|
|
183
|
+
this.fbnsDebug(`Connection failed: ${e}`);
|
|
184
|
+
throw e;
|
|
185
|
+
});
|
|
186
|
+
|
|
187
|
+
// Subscribe to FBNS message topic
|
|
188
|
+
await this.client.subscribe({ topic: constants_1.FbnsTopics.FBNS_MESSAGE.id });
|
|
189
|
+
|
|
190
|
+
// Wait for the register response (listener was set up before connect)
|
|
191
|
+
const msg = await regRespPromise;
|
|
192
|
+
const data = await (0, shared_1.tryUnzipAsync)(msg.payload);
|
|
193
|
+
const payload = data.toString('utf8');
|
|
194
|
+
this.fbnsDebug(`Received register response: ${payload}`);
|
|
195
|
+
const { token, error } = JSON.parse(payload);
|
|
196
|
+
if (error) {
|
|
197
|
+
this.emit('error', error);
|
|
198
|
+
throw error;
|
|
199
|
+
}
|
|
200
|
+
try {
|
|
201
|
+
await this.sendPushRegister(token);
|
|
202
|
+
}
|
|
203
|
+
catch (e) {
|
|
204
|
+
if (e instanceof Error) {
|
|
205
|
+
this.emit('error', e);
|
|
206
|
+
}
|
|
207
|
+
throw e;
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
|
|
211
|
+
disconnect() {
|
|
212
|
+
this.safeDisconnect = true;
|
|
213
|
+
if (!this.client) {
|
|
214
|
+
return Promise.resolve();
|
|
215
|
+
}
|
|
216
|
+
return this.client.disconnect();
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
async handleMessage(msg) {
|
|
220
|
+
const payload = JSON.parse((await (0, shared_1.tryUnzipAsync)(msg.payload)).toString('utf8'));
|
|
221
|
+
if ((0, shared_1.notUndefined)(payload.fbpushnotif)) {
|
|
222
|
+
const notification = (0, fbns_utilities_1.createNotificationFromJson)(payload.fbpushnotif);
|
|
223
|
+
this.emit('push', notification);
|
|
224
|
+
if (notification.collapseKey)
|
|
225
|
+
this.emit(notification.collapseKey, notification);
|
|
226
|
+
}
|
|
227
|
+
else {
|
|
228
|
+
this.fbnsDebug(`Received a message without 'fbpushnotif': ${JSON.stringify(payload)}`);
|
|
229
|
+
this.emit('message', payload);
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
|
|
233
|
+
async sendPushRegister(token) {
|
|
234
|
+
const { body } = await this.ig.request.send({
|
|
235
|
+
url: `/api/v1/push/register/`,
|
|
236
|
+
method: 'POST',
|
|
237
|
+
form: {
|
|
238
|
+
device_type: 'android_mqtt',
|
|
239
|
+
is_main_push_channel: true,
|
|
240
|
+
device_sub_type: 2,
|
|
241
|
+
device_token: token,
|
|
242
|
+
guid: this.ig.state.uuid,
|
|
243
|
+
uuid: this.ig.state.uuid,
|
|
244
|
+
users: this.ig.state.cookieUserId,
|
|
245
|
+
family_device_id: new chance_1.Chance().guid({ version: 4 }),
|
|
246
|
+
},
|
|
247
|
+
});
|
|
248
|
+
return body;
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
exports.FbnsClient = FbnsClient;
|
|
252
|
+
//# sourceMappingURL=fbns.client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fbns.client.js","sourceRoot":"","sources":["../../src/fbns/fbns.client.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { IgApiClient } from 'instagram-private-api';
|
|
2
|
+
export declare class FbnsDeviceAuth {
|
|
3
|
+
private authLog;
|
|
4
|
+
clientId: string;
|
|
5
|
+
userId: number;
|
|
6
|
+
password: string;
|
|
7
|
+
deviceId: string;
|
|
8
|
+
deviceSecret: string;
|
|
9
|
+
sr?: string;
|
|
10
|
+
rc?: string;
|
|
11
|
+
private json?;
|
|
12
|
+
private ig;
|
|
13
|
+
constructor(ig: IgApiClient);
|
|
14
|
+
update(): void;
|
|
15
|
+
read(jsonStr: string): void;
|
|
16
|
+
toString(): string;
|
|
17
|
+
}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
+
exports.FbnsDeviceAuth = void 0;
|
|
10
|
+
const decorators_1 = require("instagram-private-api/dist/decorators");
|
|
11
|
+
const shared_1 = require("../shared");
|
|
12
|
+
class FbnsDeviceAuth {
|
|
13
|
+
constructor(ig) {
|
|
14
|
+
this.authLog = (0, shared_1.debugChannel)('fbns', 'device-auth');
|
|
15
|
+
this.ig = ig;
|
|
16
|
+
this.clientId = this.ig.state.phoneId?.substr(0, 20) || '';
|
|
17
|
+
this.deviceId = '';
|
|
18
|
+
this.userId = 0;
|
|
19
|
+
this.deviceSecret = '';
|
|
20
|
+
this.password = '';
|
|
21
|
+
}
|
|
22
|
+
update() {
|
|
23
|
+
if (this.clientId === '') {
|
|
24
|
+
this.clientId = this.ig.state.phoneId?.substr(0, 20) || '';
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
read(jsonStr) {
|
|
28
|
+
this.authLog(`Reading auth json ${jsonStr ?? 'empty'}`);
|
|
29
|
+
if (!jsonStr)
|
|
30
|
+
return;
|
|
31
|
+
this.json = jsonStr;
|
|
32
|
+
const { ck, cs, di, ds, sr, rc } = JSON.parse(jsonStr);
|
|
33
|
+
this.userId = ck || this.userId;
|
|
34
|
+
this.password = cs || this.password;
|
|
35
|
+
if (di) {
|
|
36
|
+
this.deviceId = di;
|
|
37
|
+
this.clientId = this.deviceId.substr(0, 20);
|
|
38
|
+
}
|
|
39
|
+
else {
|
|
40
|
+
this.deviceId = '';
|
|
41
|
+
}
|
|
42
|
+
this.deviceSecret = ds || this.deviceSecret;
|
|
43
|
+
this.sr = sr || this.sr;
|
|
44
|
+
this.rc = rc || this.rc;
|
|
45
|
+
}
|
|
46
|
+
toString() {
|
|
47
|
+
return this.json || '';
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
exports.FbnsDeviceAuth = FbnsDeviceAuth;
|
|
51
|
+
__decorate([
|
|
52
|
+
(0, decorators_1.Enumerable)(false)
|
|
53
|
+
], FbnsDeviceAuth.prototype, "ig", void 0);
|
|
54
|
+
//# sourceMappingURL=fbns.device-auth.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fbns.device-auth.js","sourceRoot":"","sources":["../../src/fbns/fbns.device-auth.ts"],"names":[],"mappings":";;;;;;;;;AACA,sEAAmE;AACnE,sCAAyC;AAEzC,MAAa,cAAc;IAgBxB,YAAmB,EAAe;QAf1B,YAAO,GAAG,IAAA,qBAAY,EAAC,MAAM,EAAE,aAAa,CAAC,CAAC;QAgBnD,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC;QACb,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,EAAE,CAAC;QAC3D,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAC;QACnB,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;QAChB,IAAI,CAAC,YAAY,GAAG,EAAE,CAAC;QACvB,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAC;IACtB,CAAC;IAEM,MAAM;QACV,IAAI,IAAI,CAAC,QAAQ,KAAK,EAAE,EAAE,CAAC;YACxB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,EAAE,CAAC;QAC9D,CAAC;IACJ,CAAC;IAEM,IAAI,CAAC,OAAe;QACxB,IAAI,CAAC,OAAO,CAAC,qBAAqB,OAAO,IAAI,OAAO,EAAE,CAAC,CAAC;QACxD,IAAI,CAAC,OAAO;YAAE,OAAO;QACrB,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC;QACpB,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QACvD,IAAI,CAAC,MAAM,GAAG,EAAE,IAAI,IAAI,CAAC,MAAM,CAAC;QAChC,IAAI,CAAC,QAAQ,GAAG,EAAE,IAAI,IAAI,CAAC,QAAQ,CAAC;QACpC,IAAI,EAAE,EAAE,CAAC;YACN,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAC;YACnB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QAC/C,CAAC;aAAM,CAAC;YACL,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAC;QACtB,CAAC;QACD,IAAI,CAAC,YAAY,GAAG,EAAE,IAAI,IAAI,CAAC,YAAY,CAAC;QAC5C,IAAI,CAAC,EAAE,GAAG,EAAE,IAAI,IAAI,CAAC,EAAE,CAAC;QACxB,IAAI,CAAC,EAAE,GAAG,EAAE,IAAI,IAAI,CAAC,EAAE,CAAC;IAC3B,CAAC;IAEM,QAAQ;QACZ,OAAO,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC;IAC1B,CAAC;CACH;AApDD,wCAoDC;AAtCU;IADP,IAAA,uBAAU,EAAC,KAAK,CAAC;0CACM"}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
import { FbnsDeviceAuth } from './fbns.device-auth';
|
|
2
|
+
export interface FbnsMessageData {
|
|
3
|
+
token?: string;
|
|
4
|
+
pn?: string;
|
|
5
|
+
nid?: string;
|
|
6
|
+
ck?: string;
|
|
7
|
+
fbpushnotif?: string;
|
|
8
|
+
num_endpoints?: string;
|
|
9
|
+
}
|
|
10
|
+
export interface FbPushNotif {
|
|
11
|
+
t?: string;
|
|
12
|
+
m?: string;
|
|
13
|
+
tt?: string;
|
|
14
|
+
ig?: string;
|
|
15
|
+
collapse_key?: string;
|
|
16
|
+
i?: string;
|
|
17
|
+
a?: string;
|
|
18
|
+
sound?: string;
|
|
19
|
+
pi?: string;
|
|
20
|
+
c?: string;
|
|
21
|
+
u?: string;
|
|
22
|
+
s?: string;
|
|
23
|
+
igo?: string;
|
|
24
|
+
bc?: string;
|
|
25
|
+
ia?: string;
|
|
26
|
+
it?: string;
|
|
27
|
+
si?: string;
|
|
28
|
+
PushNotifID?: string;
|
|
29
|
+
}
|
|
30
|
+
export interface FbnsBadgeCount {
|
|
31
|
+
direct?: number;
|
|
32
|
+
ds?: number;
|
|
33
|
+
activities?: number;
|
|
34
|
+
}
|
|
35
|
+
export type FbnsNotificationUnknown = FbnsNotification<unknown>;
|
|
36
|
+
export interface FbnsNotification<T> {
|
|
37
|
+
original: FbPushNotif;
|
|
38
|
+
title?: string;
|
|
39
|
+
message?: string;
|
|
40
|
+
tickerText?: string;
|
|
41
|
+
igAction?: string;
|
|
42
|
+
igActionOverride?: string;
|
|
43
|
+
optionalImage?: string;
|
|
44
|
+
optionalAvatarUrl?: string;
|
|
45
|
+
collapseKey?: string;
|
|
46
|
+
sound?: string;
|
|
47
|
+
pushId?: string;
|
|
48
|
+
pushCategory?: string;
|
|
49
|
+
intendedRecipientUserId?: string;
|
|
50
|
+
sourceUserId?: string;
|
|
51
|
+
badgeCount?: FbnsBadgeCount;
|
|
52
|
+
inAppActors?: string;
|
|
53
|
+
actionPath?: string;
|
|
54
|
+
actionParams?: T;
|
|
55
|
+
higherPriorityApps?: string;
|
|
56
|
+
}
|
|
57
|
+
export type NotificationCallback<N, A> = FuncArg<N, FbnsNotification<A>>;
|
|
58
|
+
export type FuncArg<E, T> = [E, (e: T) => void];
|
|
59
|
+
/**
|
|
60
|
+
* See: https://github.com/mgp25/Instagram-API/blob/master/src/Push.php
|
|
61
|
+
* TODO: inspect
|
|
62
|
+
* TODO: add regex?
|
|
63
|
+
* The following events are emitted:
|
|
64
|
+
*/
|
|
65
|
+
export type NotificationEventCallback = FuncArg<'warning' | 'error', Error | Record<string, any>> | FuncArg<'auth', FbnsDeviceAuth> | FuncArg<'push' | 'silent_push', FbnsNotificationUnknown> | FuncArg<'exp_logging', {
|
|
66
|
+
beacon_id: number;
|
|
67
|
+
}> | FuncArg<'pp', string> | FuncArg<'message', FbnsMessageData> | NotificationCallback<'post', {
|
|
68
|
+
id: string;
|
|
69
|
+
}> | NotificationCallback<'first_post', {
|
|
70
|
+
username: string;
|
|
71
|
+
}> | NotificationCallback<'resurrected_user_post', {
|
|
72
|
+
id: string;
|
|
73
|
+
}> | NotificationCallback<'recent_follow_post', {
|
|
74
|
+
id: string;
|
|
75
|
+
}> | NotificationCallback<'fb_first_post', {
|
|
76
|
+
username: string;
|
|
77
|
+
}> | NotificationCallback<'first_bestie_post', {
|
|
78
|
+
username: string;
|
|
79
|
+
launch_reel?: string;
|
|
80
|
+
}> | NotificationCallback<'first_reel_post', {
|
|
81
|
+
username: string;
|
|
82
|
+
launch_reel?: string;
|
|
83
|
+
}> | NotificationCallback<'resurrected_reel_post' | 'story_poll_vote' | 'story_poll_close' | 'story_producer_expire_media' | 'story_poll_result_share' | 'story_daily_digest' | 'new_follower' | 'private_user_follow_request' | 'follow_request_approved' | 'contactjoined' | 'contact_joined_email' | 'fb_friend_connected' | 'follower_follow' | 'follower_activity_reminders' | 'comment' | 'mentioned_comment' | 'comment_on_tag' | 'comment_subscribed' | 'comment_subscribed_on_like' | 'reply_to_comment_with_threading' | 'like' | 'like_on_tag' | 'comment_like' | 'direct_v2_message' | 'live_broadcast' | 'live_with_broadcast' | 'live_broadcast_revoke' | 'aymt' | 'ad_preview' | 'branded_content_tagged' | 'business_profile' | 'usertag' | 'video_view_count' | 'copyright_video' | 'report_updated' | 'promote_account' | 'unseen_notification_reminders', unknown> | FuncArg<string, any> | [string, (...args: string[]) => void];
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fbns.types.js","sourceRoot":"","sources":["../../src/fbns/fbns.types.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.createNotificationFromJson = void 0;
|
|
4
|
+
const shared_1 = require("../shared");
|
|
5
|
+
const querystring = require("querystring");
|
|
6
|
+
const URL = require("url");
|
|
7
|
+
function createNotificationFromJson(json) {
|
|
8
|
+
const data = JSON.parse(json);
|
|
9
|
+
const notification = Object.defineProperty({}, 'description', {
|
|
10
|
+
enumerable: false,
|
|
11
|
+
value: data,
|
|
12
|
+
});
|
|
13
|
+
if ((0, shared_1.notUndefined)(data.t)) {
|
|
14
|
+
notification.title = data.t;
|
|
15
|
+
}
|
|
16
|
+
if ((0, shared_1.notUndefined)(data.m)) {
|
|
17
|
+
notification.message = data.m;
|
|
18
|
+
}
|
|
19
|
+
if ((0, shared_1.notUndefined)(data.tt)) {
|
|
20
|
+
notification.tickerText = data.tt;
|
|
21
|
+
}
|
|
22
|
+
if ((0, shared_1.notUndefined)(data.ig)) {
|
|
23
|
+
notification.igAction = data.ig;
|
|
24
|
+
const url = URL.parse(data.ig);
|
|
25
|
+
if (url.pathname) {
|
|
26
|
+
notification.actionPath = url.pathname;
|
|
27
|
+
}
|
|
28
|
+
if (url.query) {
|
|
29
|
+
notification.actionParams = querystring.decode(url.query);
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
if ((0, shared_1.notUndefined)(data.collapse_key)) {
|
|
33
|
+
notification.collapseKey = data.collapse_key;
|
|
34
|
+
}
|
|
35
|
+
if ((0, shared_1.notUndefined)(data.i)) {
|
|
36
|
+
notification.optionalImage = data.i;
|
|
37
|
+
}
|
|
38
|
+
if ((0, shared_1.notUndefined)(data.a)) {
|
|
39
|
+
notification.optionalAvatarUrl = data.a;
|
|
40
|
+
}
|
|
41
|
+
if ((0, shared_1.notUndefined)(data.sound)) {
|
|
42
|
+
notification.sound = data.sound;
|
|
43
|
+
}
|
|
44
|
+
if ((0, shared_1.notUndefined)(data.pi)) {
|
|
45
|
+
notification.pushId = data.pi;
|
|
46
|
+
}
|
|
47
|
+
if ((0, shared_1.notUndefined)(data.c)) {
|
|
48
|
+
notification.pushCategory = data.c;
|
|
49
|
+
}
|
|
50
|
+
if ((0, shared_1.notUndefined)(data.u)) {
|
|
51
|
+
notification.intendedRecipientUserId = data.u;
|
|
52
|
+
}
|
|
53
|
+
if ((0, shared_1.notUndefined)(data.s) && data.s !== 'None') {
|
|
54
|
+
notification.sourceUserId = data.s;
|
|
55
|
+
}
|
|
56
|
+
if ((0, shared_1.notUndefined)(data.igo)) {
|
|
57
|
+
notification.igActionOverride = data.igo;
|
|
58
|
+
}
|
|
59
|
+
if ((0, shared_1.notUndefined)(data.bc)) {
|
|
60
|
+
const badgeCount = {};
|
|
61
|
+
const parsed = JSON.parse(data.bc);
|
|
62
|
+
if ((0, shared_1.notUndefined)(parsed.di)) {
|
|
63
|
+
badgeCount.direct = parsed.di;
|
|
64
|
+
}
|
|
65
|
+
if ((0, shared_1.notUndefined)(parsed.ds)) {
|
|
66
|
+
badgeCount.ds = parsed.ds;
|
|
67
|
+
}
|
|
68
|
+
if ((0, shared_1.notUndefined)(parsed.ac)) {
|
|
69
|
+
badgeCount.activities = parsed.ac;
|
|
70
|
+
}
|
|
71
|
+
notification.badgeCount = badgeCount;
|
|
72
|
+
}
|
|
73
|
+
if ((0, shared_1.notUndefined)(data.ia)) {
|
|
74
|
+
notification.inAppActors = data.ia;
|
|
75
|
+
}
|
|
76
|
+
return notification;
|
|
77
|
+
}
|
|
78
|
+
exports.createNotificationFromJson = createNotificationFromJson;
|
|
79
|
+
//# sourceMappingURL=fbns.utilities.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fbns.utilities.js","sourceRoot":"","sources":["../../src/fbns/fbns.utilities.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
__exportStar(require("./fbns.client"), exports);
|
|
18
|
+
__exportStar(require("./fbns.device-auth"), exports);
|
|
19
|
+
__exportStar(require("./fbns.types"), exports);
|
|
20
|
+
__exportStar(require("./fbns.utilities"), exports);
|
|
21
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/fbns/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,gDAA8B;AAC9B,qDAAmC;AACnC,+CAA6B;AAC7B,mDAAiC"}
|