@flink-app/firebase-messaging-plugin 0.7.0-alpha.1 → 0.11.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.
@@ -1,4 +1,4 @@
1
- // Generated Wed Feb 07 2024 09:08:53 GMT+0100 (Central European Standard Time)
1
+ // Generated Wed Aug 07 2024 10:39:19 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
 
@@ -1,4 +1,4 @@
1
- // Generated Wed Feb 07 2024 09:08:53 GMT+0100 (Central European Standard Time)
1
+ // Generated Wed Aug 07 2024 10:39:19 GMT+0200 (Central European Summer Time)
2
2
  import { autoRegisteredJobs } from "@flink-app/flink";
3
3
  export const jobs = [];
4
4
  autoRegisteredJobs.push(...jobs);
@@ -1,4 +1,4 @@
1
- // Generated Wed Feb 07 2024 09:08:53 GMT+0100 (Central European Standard Time)
1
+ // Generated Wed Aug 07 2024 10:39:19 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 Wed Feb 07 2024 09:08:53 GMT+0100 (Central European Standard Time)
4
+ // Generated Wed Aug 07 2024 10:39:20 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
@@ -1,4 +1,4 @@
1
- // Generated Wed Feb 07 2024 09:08:53 GMT+0100 (Central European Standard Time)
1
+ // Generated Wed Aug 07 2024 10:39:19 GMT+0200 (Central European Summer Time)
2
2
  import "./generatedHandlers";
3
3
  import "./generatedRepos";
4
4
  import "./generatedJobs";
@@ -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 Wed Feb 07 2024 09:08:53 GMT+0100 (Central European Standard Time)
23
+ // Generated Wed Aug 07 2024 10:39:19 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 Wed Feb 07 2024 09:08:53 GMT+0100 (Central European Standard Time)
4
+ // Generated Wed Aug 07 2024 10:39:19 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 Wed Feb 07 2024 09:08:53 GMT+0100 (Central European Standard Time)
4
+ // Generated Wed Aug 07 2024 10:39:19 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);
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- // Generated Wed Feb 07 2024 09:08:53 GMT+0100 (Central European Standard Time)
3
+ // Generated Wed Aug 07 2024 10:39:19 GMT+0200 (Central European Summer Time)
4
4
  require("./generatedHandlers");
5
5
  require("./generatedRepos");
6
6
  require("./generatedJobs");
@@ -3,7 +3,7 @@ export declare type FirebaseMessagingPluginOptions = {
3
3
  /**
4
4
  * Firebase server key
5
5
  */
6
- serverKey: string;
6
+ serviceAccountKey: string;
7
7
  /**
8
8
  * If to expose endpoints for sending push notification.
9
9
  */
@@ -65,21 +65,34 @@ var __generator = (this && this.__generator) || function (thisArg, body) {
65
65
  if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
66
66
  }
67
67
  };
68
+ var __rest = (this && this.__rest) || function (s, e) {
69
+ var t = {};
70
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
71
+ t[p] = s[p];
72
+ if (s != null && typeof Object.getOwnPropertySymbols === "function")
73
+ for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
74
+ if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
75
+ t[p[i]] = s[p[i]];
76
+ }
77
+ return t;
78
+ };
68
79
  var __importDefault = (this && this.__importDefault) || function (mod) {
69
80
  return (mod && mod.__esModule) ? mod : { "default": mod };
70
81
  };
71
82
  Object.defineProperty(exports, "__esModule", { value: true });
72
83
  exports.firebaseMessagingPlugin = void 0;
73
84
  var flink_1 = require("@flink-app/flink");
74
- var fcm_push_1 = __importDefault(require("fcm-push"));
75
85
  var PostMessage = __importStar(require("./handlers/PostMessage"));
86
+ var firebase_admin_1 = __importDefault(require("firebase-admin"));
76
87
  var firebaseMessagingPlugin = function (options) {
77
- var fcmClient = new fcm_push_1.default(options.serverKey);
88
+ var decodedKey = Buffer.from(options.serviceAccountKey, "base64").toString("utf-8");
89
+ var adminAdpp = firebase_admin_1.default.initializeApp({
90
+ credential: firebase_admin_1.default.credential.cert(JSON.parse(decodedKey)),
91
+ });
78
92
  return {
79
93
  id: "firebaseMessaging",
80
94
  ctx: {
81
- fcmClient: fcmClient,
82
- send: function (message) { return send(message, fcmClient); },
95
+ send: function (message) { return send(message, adminAdpp); },
83
96
  },
84
97
  init: function (app) { return __awaiter(void 0, void 0, void 0, function () {
85
98
  var _a;
@@ -96,15 +109,37 @@ exports.firebaseMessagingPlugin = firebaseMessagingPlugin;
96
109
  /**
97
110
  * Send push notification.
98
111
  */
99
- function send(message, fcmClient) {
100
- var messages = message.to.map(function (to) {
101
- return __assign(__assign({}, message), { to: to });
102
- });
103
- return Promise.all(messages.map(function (m) {
104
- return fcmClient
105
- .send(m)
106
- .catch(function (err) {
107
- return flink_1.log.debug("[firebaseMessaging] Failed sending to device " + m.to + ": " + err);
112
+ function send(message, adminApp) {
113
+ return __awaiter(this, void 0, void 0, function () {
114
+ var messages, _i, messages_1, message_1, err_1;
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
+ _i = 0, messages_1 = messages;
123
+ _a.label = 1;
124
+ case 1:
125
+ if (!(_i < messages_1.length)) return [3 /*break*/, 6];
126
+ message_1 = messages_1[_i];
127
+ _a.label = 2;
128
+ case 2:
129
+ _a.trys.push([2, 4, , 5]);
130
+ return [4 /*yield*/, adminApp.messaging().send(message_1)];
131
+ case 3:
132
+ _a.sent();
133
+ return [3 /*break*/, 5];
134
+ case 4:
135
+ err_1 = _a.sent();
136
+ flink_1.log.debug("[firebaseMessaging] Failed sending to device " + message_1.token + ": " + err_1);
137
+ return [3 /*break*/, 5];
138
+ case 5:
139
+ _i++;
140
+ return [3 /*break*/, 1];
141
+ case 6: return [2 /*return*/];
142
+ }
108
143
  });
109
- }));
144
+ });
110
145
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@flink-app/firebase-messaging-plugin",
3
- "version": "0.7.0-alpha.1",
3
+ "version": "0.11.1",
4
4
  "description": "Flink plugin to send Firebase cloud messages",
5
5
  "scripts": {
6
6
  "test": "echo \"Error: no test specified\"",
@@ -16,11 +16,11 @@
16
16
  "access": "public"
17
17
  },
18
18
  "dependencies": {
19
- "@flink-app/management-api-plugin": "^0.7.0-alpha.1",
20
- "fcm-push": "^1.1.3"
19
+ "@flink-app/management-api-plugin": "^0.11.0",
20
+ "firebase-admin": "^12.1.1"
21
21
  },
22
22
  "devDependencies": {
23
- "@flink-app/flink": "^0.7.0-alpha.1",
23
+ "@flink-app/flink": "^0.11.0",
24
24
  "@types/express": "^4.17.12",
25
25
  "@types/node": "^15.6.2",
26
26
  "nodemon": "^2.0.7",
@@ -28,5 +28,5 @@
28
28
  "tsc-watch": "^4.2.9",
29
29
  "typescript": "^4.2.4"
30
30
  },
31
- "gitHead": "2ae3b415967bb4e4b41550ac1978e4c9fed47327"
31
+ "gitHead": "4d356de156b5f55e8206b17d6ad97875dee559e6"
32
32
  }
package/readme.md CHANGED
@@ -75,3 +75,5 @@ const notificationManagementModule = GetNotificationManagementModule({
75
75
 
76
76
 
77
77
 
78
+
79
+
@@ -1,60 +1,60 @@
1
1
  import { FlinkPlugin, log } from "@flink-app/flink";
2
- import FCM from "fcm-push";
2
+
3
3
  import * as PostMessage from "./handlers/PostMessage";
4
4
  import Message from "./schemas/Message";
5
+ import admin from "firebase-admin";
5
6
 
6
7
  export type FirebaseMessagingPluginOptions = {
7
- /**
8
- * Firebase server key
9
- */
10
- serverKey: string;
11
-
12
- /**
13
- * If to expose endpoints for sending push notification.
14
- */
15
- exposeEndpoints?: boolean;
16
-
17
- permissions?: {
18
- send: string;
19
- };
8
+ /**
9
+ * Firebase server key
10
+ */
11
+
12
+ serviceAccountKey: string;
13
+
14
+ /**
15
+ * If to expose endpoints for sending push notification.
16
+ */
17
+ exposeEndpoints?: boolean;
18
+
19
+ permissions?: {
20
+ send: string;
21
+ };
20
22
  };
21
23
 
22
- export const firebaseMessagingPlugin = (
23
- options: FirebaseMessagingPluginOptions
24
- ): FlinkPlugin => {
25
- const fcmClient = new FCM(options.serverKey);
26
-
27
- return {
28
- id: "firebaseMessaging",
29
- ctx: {
30
- fcmClient,
31
- send: (message: Message) => send(message, fcmClient),
32
- },
33
- init: async (app) => {
34
- app.addHandler(PostMessage, {
35
- permissions: [options.permissions?.send || "firebase-messaging:send"],
36
- });
37
- },
38
- };
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
+ };
39
42
  };
40
43
 
41
44
  /**
42
45
  * Send push notification.
43
46
  */
44
- function send(message: Message, fcmClient: any) {
45
- const messages = message.to.map((to) => {
46
- return { ...message, to };
47
- });
48
-
49
- return Promise.all(
50
- messages.map((m) =>
51
- fcmClient
52
- .send(m)
53
- .catch((err: any) =>
54
- log.debug(
55
- `[firebaseMessaging] Failed sending to device ${m.to}: ${err}`
56
- )
57
- )
58
- )
59
- );
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
+ for (const message of messages) {
54
+ try {
55
+ await adminApp.messaging().send(message);
56
+ } catch (err: any) {
57
+ log.debug(`[firebaseMessaging] Failed sending to device ${message.token}: ${err}`);
58
+ }
59
+ }
60
60
  }