Skip to content

Commit bc96f0b

Browse files
committed
Adds X-Parse-Push-Status-Id header (#1412)
* Adds X-Parse-Push-Status-Id header * Waits for _PushStatus to be stored
1 parent cedac3f commit bc96f0b

File tree

5 files changed

+29
-10
lines changed

5 files changed

+29
-10
lines changed

spec/PushRouter.spec.js

+5-2
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@ describe('PushRouter', () => {
6767
}).toThrow();
6868
done();
6969
});
70-
70+
7171
it('sends a push through REST', (done) => {
7272
request.post({
7373
url: Parse.serverURL+"/push",
@@ -82,8 +82,11 @@ describe('PushRouter', () => {
8282
'X-Parse-Master-Key': Parse.masterKey
8383
}
8484
}, function(err, res, body){
85+
expect(res.headers['x-parse-push-status-id']).not.toBe(undefined);
86+
expect(res.headers['x-parse-push-status-id'].length).toBe(10);
87+
expect(res.headers[''])
8588
expect(body.result).toBe(true);
8689
done();
8790
});
8891
});
89-
});
92+
});

src/Controllers/PushController.js

+2-1
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ export class PushController extends AdaptableController {
3838
return !!this.adapter;
3939
}
4040

41-
sendPush(body = {}, where = {}, config, auth, wait) {
41+
sendPush(body = {}, where = {}, config, auth, onPushStatusSaved = () => {}) {
4242
var pushAdapter = this.adapter;
4343
if (!this.pushIsAvailable) {
4444
throw new Parse.Error(Parse.Error.PUSH_MISCONFIGURED,
@@ -84,6 +84,7 @@ export class PushController extends AdaptableController {
8484
return Promise.resolve().then(() => {
8585
return pushStatus.setInitial(body, where);
8686
}).then(() => {
87+
onPushStatusSaved(pushStatus.objectId);
8788
return badgeUpdate();
8889
}).then(() => {
8990
return rest.find(config, auth, '_Installation', where);

src/PromiseRouter.js

+5
Original file line numberDiff line numberDiff line change
@@ -178,6 +178,11 @@ function makeExpressHandler(promiseHandler) {
178178
return res.send('Found. Redirecting to '+result.location);
179179
}
180180
}
181+
if (result.headers) {
182+
Object.keys(result.headers).forEach((header) => {
183+
res.set(header, result.headers[header]);
184+
})
185+
}
181186
res.json(result.response);
182187
}, (e) => {
183188
log.verbose('error:', e);

src/Routers/PushRouter.js

+14-5
Original file line numberDiff line numberDiff line change
@@ -15,12 +15,21 @@ export class PushRouter extends PromiseRouter {
1515
}
1616

1717
let where = PushRouter.getQueryCondition(req);
18-
pushController.sendPush(req.body, where, req.config, req.auth);
19-
return Promise.resolve({
20-
response: {
21-
'result': true
22-
}
18+
let resolve;
19+
let promise = new Promise((_resolve) => {
20+
resolve = _resolve;
21+
});
22+
pushController.sendPush(req.body, where, req.config, req.auth, (pushStatusId) => {
23+
resolve({
24+
headers: {
25+
'X-Parse-Push-Status-Id': pushStatusId
26+
},
27+
response: {
28+
result: true
29+
}
30+
});
2331
});
32+
return promise;
2433
}
2534

2635
/**

src/pushStatusHandler.js

+3-2
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ export default function pushStatusHandler(config) {
1616

1717
let initialPromise;
1818
let pushStatus;
19-
19+
let objectId = newObjectId();
2020
let collection = function() {
2121
return config.database.adaptiveCollection('_PushStatus');
2222
}
@@ -25,7 +25,7 @@ export default function pushStatusHandler(config) {
2525
let now = new Date();
2626
let data = body.data || {};
2727
let object = {
28-
objectId: newObjectId(),
28+
objectId,
2929
pushTime: now.toISOString(),
3030
_created_at: now,
3131
query: JSON.stringify(where),
@@ -111,6 +111,7 @@ export default function pushStatusHandler(config) {
111111
}
112112

113113
return Object.freeze({
114+
objectId,
114115
setInitial,
115116
setRunning,
116117
complete,

0 commit comments

Comments
 (0)