Skip to content

Commit 909dc4a

Browse files
committed
Add pusher.js polling for phone updated events
1 parent e3cac34 commit 909dc4a

File tree

9 files changed

+9393
-3267
lines changed

9 files changed

+9393
-3267
lines changed

api/pkg/handlers/billing_handler.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -38,8 +38,8 @@ func NewBillingHandler(
3838

3939
// RegisterRoutes registers the routes for the MessageHandler
4040
func (h *BillingHandler) RegisterRoutes(router fiber.Router, middlewares ...fiber.Handler) {
41-
router.Get("/billing/usage-history", h.computeRoute(middlewares, h.UsageHistory)...)
42-
router.Get("/billing/usage", h.computeRoute(middlewares, h.Usage)...)
41+
router.Get("/v1/billing/usage-history", h.computeRoute(middlewares, h.UsageHistory)...)
42+
router.Get("/v1/billing/usage", h.computeRoute(middlewares, h.Usage)...)
4343
}
4444

4545
// UsageHistory returns the usage history of a user

api/pkg/handlers/heartbeat_handler.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -41,12 +41,12 @@ func NewHeartbeatHandler(
4141

4242
// RegisterRoutes registers the routes for the HeartbeatHandler
4343
func (h *HeartbeatHandler) RegisterRoutes(router fiber.Router, middlewares ...fiber.Handler) {
44-
router.Get("/heartbeats", h.computeRoute(middlewares, h.Index)...)
44+
router.Get("/v1/heartbeats", h.computeRoute(middlewares, h.Index)...)
4545
}
4646

4747
// RegisterPhoneAPIKeyRoutes registers the routes for the HeartbeatHandler
4848
func (h *HeartbeatHandler) RegisterPhoneAPIKeyRoutes(router fiber.Router, middlewares ...fiber.Handler) {
49-
router.Post("/heartbeats", h.computeRoute(middlewares, h.Store)...)
49+
router.Post("/v1/heartbeats", h.computeRoute(middlewares, h.Store)...)
5050
}
5151

5252
// Index returns the heartbeats of a phone number

api/pkg/handlers/message_thread_handler.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -41,9 +41,9 @@ func NewMessageThreadHandler(
4141

4242
// RegisterRoutes registers the routes for the MessageHandler
4343
func (h *MessageThreadHandler) RegisterRoutes(router fiber.Router, middlewares ...fiber.Handler) {
44-
router.Get("/message-threads", h.Index)
45-
router.Put("/message-threads/:messageThreadID", h.Update)
46-
router.Delete("/message-threads/:messageThreadID", h.Delete)
44+
router.Get("/v1/message-threads", h.computeRoute(middlewares, h.Index)...)
45+
router.Put("/v1/message-threads/:messageThreadID", h.computeRoute(middlewares, h.Update)...)
46+
router.Delete("/v1/message-threads/:messageThreadID", h.computeRoute(middlewares, h.Delete)...)
4747
}
4848

4949
// Index returns message threads for a phone number

web/.env.production

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,3 +19,6 @@ FIREBASE_APP_ID=1:877524083399:web:430d6a29a0d808946514e2
1919
FIREBASE_MEASUREMENT_ID=G-EZ5W9DVK8T
2020

2121
CLOUDFLARE_TURNSTILE_SITE_KEY=0x4AAAAAAA6Hpp8SDyMMPhWg
22+
23+
PUSHER_KEY=a4809008d8f03aaab022
24+
PUSHER_CLUSTER=mt1

web/layouts/default.vue

Lines changed: 25 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@
2929
<script lang="ts">
3030
import { Vue, Component } from 'vue-property-decorator'
3131
import { mdiBullhorn } from '@mdi/js'
32+
import Pusher from 'pusher-js'
3233
import { setAuthHeader } from '~/plugins/axios'
3334
3435
@Component
@@ -41,15 +42,18 @@ export default class DefaultLayout extends Vue {
4142
}
4243
4344
mounted() {
44-
// this.startPoller()
45-
setTimeout(
46-
() => {
47-
if (this.poller) {
48-
clearInterval(this.poller)
49-
}
50-
},
51-
60 * 1000 * 60,
52-
)
45+
setTimeout(() => {
46+
const pusher = new Pusher(this.$config.pusherKey, {
47+
cluster: this.$config.pusherCluster,
48+
})
49+
50+
const channel = pusher.subscribe(this.$store.getters.getAuthUser.id)
51+
channel.bind('phone.updated', () => {
52+
this.$store.dispatch('setCanPoll', true)
53+
})
54+
55+
this.startPoller()
56+
}, 5000) // delay so that the auth user is present
5357
}
5458
5559
beforeDestroy(): void {
@@ -60,6 +64,13 @@ export default class DefaultLayout extends Vue {
6064
6165
startPoller() {
6266
this.poller = window.setInterval(async () => {
67+
if (
68+
!this.$store.getters.getCanPoll ||
69+
this.$store.getters.getAuthUser == null
70+
) {
71+
return
72+
}
73+
6374
await this.$store.dispatch('setPolling', true)
6475
6576
const promises = []
@@ -70,12 +81,12 @@ export default class DefaultLayout extends Vue {
7081
this.$store.dispatch('getHeartbeat'),
7182
)
7283
}
84+
promises.push(
85+
this.$store.dispatch('loadPhones', true),
86+
this.$store.dispatch('setCanPoll', false),
87+
)
7388
74-
if (this.$store.getters.getAuthUser) {
75-
promises.push(this.$store.dispatch('loadPhones', true))
76-
}
77-
78-
if (this.$store.getters.hasThread && this.$store.getters.getUser) {
89+
if (this.$store.getters.hasThread) {
7990
promises.push(
8091
this.$store.dispatch(
8192
'loadThreadMessages',

web/nuxt.config.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -155,6 +155,8 @@ export default {
155155
checkoutURL: process.env.CHECKOUT_URL,
156156
enterpriseCheckoutURL: process.env.ENTERPRISE_CHECKOUT_URL,
157157
cloudflareTurnstileSiteKey: process.env.CLOUDFLARE_TURNSTILE_SITE_KEY,
158+
pusherKey: process.env.PUSHER_KEY,
159+
pusherCluster: process.env.PUSHER_CLUSTER,
158160
},
159161

160162
// Build Configuration: https://go.nuxtjs.dev/config-build

web/package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@
3838
"moment": "^2.30.1",
3939
"nuxt": "^2.18.1",
4040
"nuxt-highlightjs": "^1.0.3",
41+
"pusher-js": "^8.4.0",
4142
"qrcode": "^1.5.0",
4243
"ufo": "^1.5.4",
4344
"vue": "^2.7.16",

0 commit comments

Comments
 (0)