Skip to content
This repository was archived by the owner on Jul 9, 2024. It is now read-only.

Commit c675f51

Browse files
committed
feat: convert functions to v4
Migrate to programming model v4. Ref: https://learn.microsoft.com/en-us/azure/azure-functions/functions-node-upgrade-v4?tabs=v4
1 parent 7fa0073 commit c675f51

84 files changed

Lines changed: 1565 additions & 3023 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

agnssDeviceRequestsHandler/agnssDeviceRequestsHandler.ts

Lines changed: 22 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { AzureFunction, Context } from '@azure/functions'
1+
import type { EventHubHandler } from '@azure/functions'
22
import {
33
QueueClient,
44
QueueServiceClient,
@@ -29,21 +29,14 @@ const config = () =>
2929
*
3030
* The requests are put in a queue for resolving.
3131
*/
32-
const agnssDeviceRequestsHandler: AzureFunction = async (
33-
context: Context,
34-
requests: (
35-
| {
36-
mcc: number
37-
mnc: number
38-
cell: number
39-
area: number
40-
types: number[]
41-
}
42-
| Record<string, any>
43-
)[],
44-
): Promise<void> => {
32+
const agnssDeviceRequestsHandler: EventHubHandler = async (
33+
requests,
34+
context,
35+
) => {
4536
log(context)({ context, requests })
4637

38+
if (!Array.isArray(requests)) return
39+
4740
const timestamp = new Date()
4841
let queueClient: QueueClient
4942

@@ -63,17 +56,21 @@ const agnssDeviceRequestsHandler: AzureFunction = async (
6356

6457
// Find A-GNSS requests
6558
const agnssRequests = requests
66-
.map((request, i) => ({
67-
request,
68-
deviceId:
69-
context.bindingData.systemPropertiesArray[i][
70-
'iothub-connection-device-id'
71-
],
72-
properties: context.bindingData.propertiesArray[i] as Record<
73-
string,
74-
string
75-
>,
76-
}))
59+
.map((request, i) => {
60+
const systemPropertiesArray = Array.isArray(
61+
context.triggerMetadata?.systemPropertiesArray,
62+
)
63+
? context.triggerMetadata?.systemPropertiesArray
64+
: []
65+
const properties = Array.isArray(context.triggerMetadata?.propertiesArray)
66+
? context.triggerMetadata?.propertiesArray
67+
: []
68+
return {
69+
request,
70+
deviceId: systemPropertiesArray?.[i]['iothub-connection-device-id'],
71+
properties: properties?.[i] as Record<string, string>,
72+
}
73+
})
7774
.filter(({ properties }) => properties.agnss === 'get')
7875

7976
if (agnssRequests.length === 0) {

agnssDeviceRequestsHandler/function.json

Lines changed: 0 additions & 14 deletions
This file was deleted.

agnssDeviceRequestsHandler/handler.mjs

Lines changed: 0 additions & 2 deletions
This file was deleted.
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
import { app } from '@azure/functions'
2+
import handler from './agnssDeviceRequestsHandler.js'
3+
4+
app.eventHub('agnssDeviceRequestsHandler', {
5+
eventHubName: '%IOTHUB_EVENTS_EVENT_HUB_NAME%',
6+
connection: 'IOTHUB_EVENTS_CONNECTION_STRING',
7+
cardinality: 'many',
8+
consumerGroup: '%AGNSS_REQUESTS_IOT_EVENTS_CONSUMER_GROUP_NAME%',
9+
handler,
10+
})

agnssQueuedDeviceRequestsHandler/agnssQueuedDeviceRequestsHandler.ts

Lines changed: 11 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { Container, CosmosClient } from '@azure/cosmos'
2-
import { AzureFunction, Context } from '@azure/functions'
2+
import type { StorageQueueHandler } from '@azure/functions'
33
import {
44
QueueClient,
55
QueueServiceClient,
@@ -57,10 +57,12 @@ type QueuedAGNSSRequest = {
5757
* a DB or kicking off the resoluting via a third-party API (currently only
5858
* nRF Cloud Assisted GPS Location Service is implemented.)
5959
*/
60-
const agnssQueuedDeviceRequestsHandler: AzureFunction = async (
61-
context: Context,
62-
{ deviceId, request, delayInSeconds, timestamp }: QueuedAGNSSRequest,
63-
): Promise<void> => {
60+
const agnssQueuedDeviceRequestsHandler: StorageQueueHandler = async (
61+
queueEntry,
62+
context,
63+
) => {
64+
const { deviceId, request, delayInSeconds, timestamp } =
65+
queueEntry as QueuedAGNSSRequest
6466
log(context)({ request, deviceId, delayInSeconds, timestamp, context })
6567

6668
let binHours: number
@@ -205,16 +207,10 @@ const agnssQueuedDeviceRequestsHandler: AzureFunction = async (
205207
logError(context)(
206208
`Cancelling request because of resolution timeout after ${ageInSeconds} seconds.`,
207209
)
208-
logError(context)(
209-
JSON.stringify(
210-
{
211-
cancelled: request,
212-
maxResolutionTimeInSeconds,
213-
},
214-
null,
215-
2,
216-
),
217-
)
210+
logError(context)({
211+
cancelled: request,
212+
maxResolutionTimeInSeconds,
213+
})
218214
return
219215
}
220216

agnssQueuedDeviceRequestsHandler/function.json

Lines changed: 0 additions & 11 deletions
This file was deleted.

agnssQueuedDeviceRequestsHandler/handler.mjs

Lines changed: 0 additions & 2 deletions
This file was deleted.
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
import { app } from '@azure/functions'
2+
import handler from './agnssQueuedDeviceRequestsHandler.js'
3+
4+
app.storageQueue('agnssQueuedDeviceRequestsHandler', {
5+
queueName: '%AGNSS_REQUESTS_QUEUE_NAME%',
6+
connection: '',
7+
handler,
8+
})

agnssResolveRequestFromNrfCloud/agnssResolveRequestFromNrfCloud.ts

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { Container, CosmosClient } from '@azure/cosmos'
2-
import { AzureFunction, Context } from '@azure/functions'
2+
import type { StorageQueueHandler } from '@azure/functions'
33
import { Static } from '@sinclair/typebox'
44
import { URL } from 'url'
55
import { cacheKey } from '../agnss/cacheKey.js'
@@ -39,10 +39,11 @@ let nrfCloudServiceKeyPromise: Promise<string>
3939
/**
4040
* Resolve A-GNSS requests from nRF Cloud
4141
*/
42-
const agnssResolveRequestFromNrfCloud: AzureFunction = async (
43-
context: Context,
44-
request: Static<typeof agnssRequestSchema>,
45-
): Promise<void> => {
42+
const agnssResolveRequestFromNrfCloud: StorageQueueHandler = async (
43+
queueEntry,
44+
context,
45+
) => {
46+
const request = queueEntry as Static<typeof agnssRequestSchema>
4647
log(context)({ context, request })
4748

4849
let resolver: ReturnType<typeof resolveAgnssRequest>

agnssResolveRequestFromNrfCloud/function.json

Lines changed: 0 additions & 11 deletions
This file was deleted.

0 commit comments

Comments
 (0)