@flink-app/firebase-messaging-plugin 0.11.0 → 0.11.2
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/.flink/generatedHandlers.ts +1 -1
- package/.flink/generatedJobs.ts +1 -1
- package/.flink/generatedRepos.ts +1 -1
- package/.flink/schemas/schemas.ts +1 -1
- package/.flink/start.ts +1 -1
- package/dist/.flink/generatedHandlers.js +1 -1
- package/dist/.flink/generatedJobs.js +1 -1
- package/dist/.flink/generatedRepos.js +1 -1
- package/dist/.flink/schemas.json +57 -0
- package/dist/.flink/start.js +1 -1
- package/dist/src/firebaseMessagingPlugin.js +54 -11
- package/package.json +2 -2
- package/src/firebaseMessagingPlugin.ts +54 -56
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
// Generated
|
|
1
|
+
// Generated Wed Aug 07 2024 11:18:50 GMT+0200 (Central European Summer Time)
|
|
2
2
|
import { autoRegisteredHandlers, HttpMethod } from "@flink-app/flink";
|
|
3
3
|
import * as PostMessage_0 from "../src/handlers/PostMessage";
|
|
4
4
|
|
package/.flink/generatedJobs.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
// Generated
|
|
1
|
+
// Generated Wed Aug 07 2024 11:18:50 GMT+0200 (Central European Summer Time)
|
|
2
2
|
import { autoRegisteredJobs } from "@flink-app/flink";
|
|
3
3
|
export const jobs = [];
|
|
4
4
|
autoRegisteredJobs.push(...jobs);
|
package/.flink/generatedRepos.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
// Generated
|
|
1
|
+
// Generated Wed Aug 07 2024 11:18:50 GMT+0200 (Central European Summer Time)
|
|
2
2
|
import { autoRegisteredRepos } from "@flink-app/flink";
|
|
3
3
|
export const repos = [];
|
|
4
4
|
autoRegisteredRepos.push(...repos);
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import Message from "../../src/schemas/Message";
|
|
2
2
|
import SendResult from "../../src/schemas/SendResult";
|
|
3
3
|
|
|
4
|
-
// Generated
|
|
4
|
+
// Generated Wed Aug 07 2024 11:18:50 GMT+0200 (Central European Summer Time)
|
|
5
5
|
export interface PostMessage_12_ReqSchema extends Message {}
|
|
6
6
|
|
|
7
7
|
export interface PostMessage_12_ResSchema extends SendResult {}
|
package/.flink/start.ts
CHANGED
|
@@ -20,7 +20,7 @@ var __importStar = (this && this.__importStar) || function (mod) {
|
|
|
20
20
|
};
|
|
21
21
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
22
22
|
exports.handlers = void 0;
|
|
23
|
-
// Generated
|
|
23
|
+
// Generated Wed Aug 07 2024 11:18:50 GMT+0200 (Central European Summer Time)
|
|
24
24
|
var flink_1 = require("@flink-app/flink");
|
|
25
25
|
var PostMessage_0 = __importStar(require("../src/handlers/PostMessage"));
|
|
26
26
|
exports.handlers = [{ handler: PostMessage_0, assumedHttpMethod: flink_1.HttpMethod.post }];
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.jobs = void 0;
|
|
4
|
-
// Generated
|
|
4
|
+
// Generated Wed Aug 07 2024 11:18:50 GMT+0200 (Central European Summer Time)
|
|
5
5
|
var flink_1 = require("@flink-app/flink");
|
|
6
6
|
exports.jobs = [];
|
|
7
7
|
flink_1.autoRegisteredJobs.push.apply(flink_1.autoRegisteredJobs, exports.jobs);
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.repos = void 0;
|
|
4
|
-
// Generated
|
|
4
|
+
// Generated Wed Aug 07 2024 11:18:50 GMT+0200 (Central European Summer Time)
|
|
5
5
|
var flink_1 = require("@flink-app/flink");
|
|
6
6
|
exports.repos = [];
|
|
7
7
|
flink_1.autoRegisteredRepos.push.apply(flink_1.autoRegisteredRepos, exports.repos);
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
{
|
|
2
|
+
"Message": {
|
|
3
|
+
"type": "object",
|
|
4
|
+
"properties": {
|
|
5
|
+
"to": {
|
|
6
|
+
"description": "Devices to send to",
|
|
7
|
+
"type": "array",
|
|
8
|
+
"items": {
|
|
9
|
+
"type": "string"
|
|
10
|
+
}
|
|
11
|
+
},
|
|
12
|
+
"notification": {
|
|
13
|
+
"description": "Use `notification` if sending a standard push notification\nhttps://firebase.google.com/docs/cloud-messaging/concept-options#notifications",
|
|
14
|
+
"type": "object",
|
|
15
|
+
"properties": {
|
|
16
|
+
"title": {
|
|
17
|
+
"description": "Optional push notification title",
|
|
18
|
+
"type": "string"
|
|
19
|
+
},
|
|
20
|
+
"body": {
|
|
21
|
+
"description": "Optional body",
|
|
22
|
+
"type": "string"
|
|
23
|
+
}
|
|
24
|
+
},
|
|
25
|
+
"additionalProperties": false
|
|
26
|
+
},
|
|
27
|
+
"data": {
|
|
28
|
+
"description": "Use `data` to send data messages.\nhttps://firebase.google.com/docs/cloud-messaging/concept-options#data_messages",
|
|
29
|
+
"type": "object",
|
|
30
|
+
"additionalProperties": {
|
|
31
|
+
"type": "string"
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
},
|
|
35
|
+
"additionalProperties": false,
|
|
36
|
+
"required": [
|
|
37
|
+
"data",
|
|
38
|
+
"to"
|
|
39
|
+
]
|
|
40
|
+
},
|
|
41
|
+
"SendResult": {
|
|
42
|
+
"type": "object",
|
|
43
|
+
"properties": {
|
|
44
|
+
"failedDevices": {
|
|
45
|
+
"description": "Devices to which delivery failed",
|
|
46
|
+
"type": "array",
|
|
47
|
+
"items": {
|
|
48
|
+
"type": "string"
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
},
|
|
52
|
+
"additionalProperties": false,
|
|
53
|
+
"required": [
|
|
54
|
+
"failedDevices"
|
|
55
|
+
]
|
|
56
|
+
}
|
|
57
|
+
}
|
package/dist/.flink/start.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
// Generated
|
|
3
|
+
// Generated Wed Aug 07 2024 11:18:50 GMT+0200 (Central European Summer Time)
|
|
4
4
|
require("./generatedHandlers");
|
|
5
5
|
require("./generatedRepos");
|
|
6
6
|
require("./generatedJobs");
|
|
@@ -87,7 +87,7 @@ var firebase_admin_1 = __importDefault(require("firebase-admin"));
|
|
|
87
87
|
var firebaseMessagingPlugin = function (options) {
|
|
88
88
|
var decodedKey = Buffer.from(options.serviceAccountKey, "base64").toString("utf-8");
|
|
89
89
|
var adminAdpp = firebase_admin_1.default.initializeApp({
|
|
90
|
-
credential: firebase_admin_1.default.credential.cert(JSON.parse(decodedKey))
|
|
90
|
+
credential: firebase_admin_1.default.credential.cert(JSON.parse(decodedKey)),
|
|
91
91
|
});
|
|
92
92
|
return {
|
|
93
93
|
id: "firebaseMessaging",
|
|
@@ -110,15 +110,58 @@ exports.firebaseMessagingPlugin = firebaseMessagingPlugin;
|
|
|
110
110
|
* Send push notification.
|
|
111
111
|
*/
|
|
112
112
|
function send(message, adminApp) {
|
|
113
|
-
|
|
114
|
-
var
|
|
115
|
-
return
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
113
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
114
|
+
var messages, batchSize, _loop_1, i;
|
|
115
|
+
return __generator(this, function (_a) {
|
|
116
|
+
switch (_a.label) {
|
|
117
|
+
case 0:
|
|
118
|
+
messages = message.to.map(function (to) {
|
|
119
|
+
var toArray = message.to, rest = __rest(message, ["to"]);
|
|
120
|
+
return __assign(__assign({}, rest), { token: to });
|
|
121
|
+
});
|
|
122
|
+
batchSize = 500;
|
|
123
|
+
_loop_1 = function (i) {
|
|
124
|
+
var batch, response, err_1;
|
|
125
|
+
return __generator(this, function (_b) {
|
|
126
|
+
switch (_b.label) {
|
|
127
|
+
case 0:
|
|
128
|
+
batch = messages.slice(i, i + batchSize);
|
|
129
|
+
_b.label = 1;
|
|
130
|
+
case 1:
|
|
131
|
+
_b.trys.push([1, 3, , 4]);
|
|
132
|
+
return [4 /*yield*/, adminApp.messaging().sendEach(batch)];
|
|
133
|
+
case 2:
|
|
134
|
+
response = _b.sent();
|
|
135
|
+
response.responses.forEach(function (res, idx) {
|
|
136
|
+
if (res.success) {
|
|
137
|
+
flink_1.log.debug("[firebaseMessaging] Successfully sent to device " + batch[idx].token);
|
|
138
|
+
}
|
|
139
|
+
else {
|
|
140
|
+
flink_1.log.debug("[firebaseMessaging] Failed sending to device " + batch[idx].token + ": " + res.error);
|
|
141
|
+
}
|
|
142
|
+
});
|
|
143
|
+
return [3 /*break*/, 4];
|
|
144
|
+
case 3:
|
|
145
|
+
err_1 = _b.sent();
|
|
146
|
+
flink_1.log.debug("[firebaseMessaging] Failed sending batch: " + err_1);
|
|
147
|
+
return [3 /*break*/, 4];
|
|
148
|
+
case 4: return [2 /*return*/];
|
|
149
|
+
}
|
|
150
|
+
});
|
|
151
|
+
};
|
|
152
|
+
i = 0;
|
|
153
|
+
_a.label = 1;
|
|
154
|
+
case 1:
|
|
155
|
+
if (!(i < messages.length)) return [3 /*break*/, 4];
|
|
156
|
+
return [5 /*yield**/, _loop_1(i)];
|
|
157
|
+
case 2:
|
|
158
|
+
_a.sent();
|
|
159
|
+
_a.label = 3;
|
|
160
|
+
case 3:
|
|
161
|
+
i += batchSize;
|
|
162
|
+
return [3 /*break*/, 1];
|
|
163
|
+
case 4: return [2 /*return*/];
|
|
164
|
+
}
|
|
122
165
|
});
|
|
123
|
-
})
|
|
166
|
+
});
|
|
124
167
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@flink-app/firebase-messaging-plugin",
|
|
3
|
-
"version": "0.11.
|
|
3
|
+
"version": "0.11.2",
|
|
4
4
|
"description": "Flink plugin to send Firebase cloud messages",
|
|
5
5
|
"scripts": {
|
|
6
6
|
"test": "echo \"Error: no test specified\"",
|
|
@@ -28,5 +28,5 @@
|
|
|
28
28
|
"tsc-watch": "^4.2.9",
|
|
29
29
|
"typescript": "^4.2.4"
|
|
30
30
|
},
|
|
31
|
-
"gitHead": "
|
|
31
|
+
"gitHead": "4adbc3dfa43aef1a9a4c0165a0e76a89f4c51429"
|
|
32
32
|
}
|
|
@@ -2,72 +2,70 @@ import { FlinkPlugin, log } from "@flink-app/flink";
|
|
|
2
2
|
|
|
3
3
|
import * as PostMessage from "./handlers/PostMessage";
|
|
4
4
|
import Message from "./schemas/Message";
|
|
5
|
-
import admin from "firebase-admin"
|
|
5
|
+
import admin from "firebase-admin";
|
|
6
6
|
|
|
7
7
|
export type FirebaseMessagingPluginOptions = {
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
8
|
+
/**
|
|
9
|
+
* Firebase server key
|
|
10
|
+
*/
|
|
11
11
|
|
|
12
|
-
|
|
12
|
+
serviceAccountKey: string;
|
|
13
13
|
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
14
|
+
/**
|
|
15
|
+
* If to expose endpoints for sending push notification.
|
|
16
|
+
*/
|
|
17
|
+
exposeEndpoints?: boolean;
|
|
18
18
|
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
19
|
+
permissions?: {
|
|
20
|
+
send: string;
|
|
21
|
+
};
|
|
22
22
|
};
|
|
23
23
|
|
|
24
|
-
export const firebaseMessagingPlugin = (
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
permissions: [options.permissions?.send || "firebase-messaging:send"],
|
|
43
|
-
});
|
|
44
|
-
},
|
|
45
|
-
};
|
|
24
|
+
export const firebaseMessagingPlugin = (options: FirebaseMessagingPluginOptions): FlinkPlugin => {
|
|
25
|
+
const decodedKey = Buffer.from(options.serviceAccountKey, "base64").toString("utf-8");
|
|
26
|
+
|
|
27
|
+
const adminAdpp = admin.initializeApp({
|
|
28
|
+
credential: admin.credential.cert(JSON.parse(decodedKey)),
|
|
29
|
+
});
|
|
30
|
+
|
|
31
|
+
return {
|
|
32
|
+
id: "firebaseMessaging",
|
|
33
|
+
ctx: {
|
|
34
|
+
send: (message: Message) => send(message, adminAdpp),
|
|
35
|
+
},
|
|
36
|
+
init: async (app) => {
|
|
37
|
+
app.addHandler(PostMessage, {
|
|
38
|
+
permissions: [options.permissions?.send || "firebase-messaging:send"],
|
|
39
|
+
});
|
|
40
|
+
},
|
|
41
|
+
};
|
|
46
42
|
};
|
|
47
43
|
|
|
48
44
|
/**
|
|
49
45
|
* Send push notification.
|
|
50
46
|
*/
|
|
51
|
-
function send(message: Message, adminApp: admin.app.App) {
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
47
|
+
async function send(message: Message, adminApp: admin.app.App) {
|
|
48
|
+
const messages = message.to.map((to) => {
|
|
49
|
+
const { to: toArray, ...rest } = message;
|
|
50
|
+
return { ...rest, token: to };
|
|
51
|
+
});
|
|
52
|
+
|
|
53
|
+
// Split messages into batches of 500
|
|
54
|
+
const batchSize = 500;
|
|
55
|
+
for (let i = 0; i < messages.length; i += batchSize) {
|
|
56
|
+
const batch = messages.slice(i, i + batchSize);
|
|
57
|
+
|
|
58
|
+
try {
|
|
59
|
+
const response = await adminApp.messaging().sendEach(batch);
|
|
60
|
+
response.responses.forEach((res, idx) => {
|
|
61
|
+
if (res.success) {
|
|
62
|
+
log.debug(`[firebaseMessaging] Successfully sent to device ${batch[idx].token}`);
|
|
63
|
+
} else {
|
|
64
|
+
log.debug(`[firebaseMessaging] Failed sending to device ${batch[idx].token}: ${res.error}`);
|
|
65
|
+
}
|
|
66
|
+
});
|
|
67
|
+
} catch (err: any) {
|
|
68
|
+
log.debug(`[firebaseMessaging] Failed sending batch: ${err}`);
|
|
69
|
+
}
|
|
70
|
+
}
|
|
73
71
|
}
|