Skip to content

Commit e2672c1

Browse files
committed
ParsePushAdapter integration
1 parent 6cd5f43 commit e2672c1

3 files changed

Lines changed: 36 additions & 2 deletions

File tree

spec/ParsePushAdapter.spec.js

Lines changed: 31 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,12 @@
11
import { join } from 'path';
22
import log from 'npmlog';
33
import apn from '@parse/node-apn';
4-
import ParsePushAdapterPackage, { ParsePushAdapter as _ParsePushAdapter, FCM as _FCM, APNS as _APNS, WEB as _WEB, EXPO as _EXPO, utils } from '../src/index.js';
4+
import ParsePushAdapterPackage, { ParsePushAdapter as _ParsePushAdapter, FCM as _FCM, APNS as _APNS, APNSNative as _APNSNative, WEB as _WEB, EXPO as _EXPO, utils } from '../src/index.js';
55
const ParsePushAdapter = _ParsePushAdapter;
66
import { randomString } from '../src/PushAdapterUtils.js';
77
import MockAPNProvider from './MockAPNProvider.js';
88
import APNS from '../src/APNS.js';
9+
import APNSNative from '../src/APNSNative.js';
910
import WEB from '../src/WEB.js';
1011
import FCM from '../src/FCM.js';
1112
import EXPO from '../src/EXPO.js';
@@ -20,6 +21,7 @@ describe('ParsePushAdapter', () => {
2021
expect(typeof ParsePushAdapterPackage).toBe('function');
2122
expect(typeof _ParsePushAdapter).toBe('function');
2223
expect(typeof _APNS).toBe('function');
24+
expect(typeof _APNSNative).toBe('function');
2325
expect(typeof _FCM).toBe('function');
2426
expect(typeof _WEB).toBe('function');
2527
expect(typeof _EXPO).toBe('function');
@@ -121,6 +123,34 @@ describe('ParsePushAdapter', () => {
121123
done();
122124
});
123125

126+
it("can be initialized with APNSNative when useNativeAPNs is true", async () => {
127+
const { generateKeyPairSync } = await import('node:crypto');
128+
const { privateKey } = generateKeyPairSync('ec', { namedCurve: 'prime256v1' });
129+
const testKeyPEM = privateKey.export({ type: 'pkcs8', format: 'pem' });
130+
131+
const pushConfig = {
132+
android: {
133+
firebaseServiceAccount: join(__dirname, '..', 'spec', 'support', 'fakeServiceAccount.json')
134+
},
135+
ios: {
136+
useNativeAPNs: true,
137+
token: { key: testKeyPEM, keyId: 'KEYID12345', teamId: 'TEAMID1234' },
138+
production: false,
139+
topic: 'com.example.app',
140+
},
141+
};
142+
143+
const parsePushAdapter = new ParsePushAdapter(pushConfig);
144+
const iosSender = parsePushAdapter.senderMap['ios'];
145+
expect(iosSender instanceof APNS).toBe(false);
146+
expect(iosSender instanceof APNSNative).toBe(true);
147+
expect(Array.isArray(iosSender.providers)).toBe(true);
148+
expect(iosSender.providers.length).toBe(1);
149+
expect(iosSender.providers[0].topic).toBe('com.example.app');
150+
const androidSender = parsePushAdapter.senderMap['android'];
151+
expect(androidSender instanceof FCM).toBe(true);
152+
});
153+
124154
it("can be initialized with FCM for apple and FCM for android", (done) => {
125155
const pushConfig = {
126156
android: {

src/ParsePushAdapter.js

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
import Parse from 'parse/node';
33
import log from 'npmlog';
44
import APNS from './APNS.js';
5+
import APNSNative from './APNSNative.js';
56
import FCM from './FCM.js';
67
import WEB from './WEB.js';
78
import EXPO from './EXPO.js';
@@ -35,6 +36,8 @@ export default class ParsePushAdapter {
3536
case 'osx':
3637
if (pushConfig[pushType].hasOwnProperty('firebaseServiceAccount')) {
3738
this.senderMap[pushType] = new FCM(pushConfig[pushType], 'apple');
39+
} else if (pushConfig[pushType].useNativeAPNs === true) {
40+
this.senderMap[pushType] = new APNSNative(pushConfig[pushType]);
3841
} else {
3942
this.senderMap[pushType] = new APNS(pushConfig[pushType]);
4043
}

src/index.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,10 +13,11 @@ if (booleanParser(process.env.VERBOSE || process.env.VERBOSE_PARSE_SERVER_PUSH_A
1313

1414
import ParsePushAdapter from './ParsePushAdapter.js';
1515
import APNS from './APNS.js';
16+
import APNSNative from './APNSNative.js';
1617
import WEB from './WEB.js';
1718
import FCM from './FCM.js';
1819
import EXPO from './EXPO.js';
1920
import * as utils from './PushAdapterUtils.js';
2021

2122
export default ParsePushAdapter;
22-
export { ParsePushAdapter, APNS, WEB, EXPO, FCM, utils };
23+
export { ParsePushAdapter, APNS, APNSNative, WEB, EXPO, FCM, utils };

0 commit comments

Comments
 (0)