Call Method in Service does not recognize Class working with Stripe Webhooks and Rails 7 - stripe-payments

I successfully added the Stripe API to my application by creating a Checkout Session object. I can therefore process payments. The next step is to set up the Webhook which will then change my payment_status to paid. I am working with a Booking class.
I set up a service with a call method in app/services which is the following:
class StripeCheckoutSessionService
def call(event)
booking = Booking.find_by(checkout_session_id: event.data.object.id)
booking.update(payment_status: 1)
render json: { state: "processed" }, status: :ok
end
end
Testing the Webhoook locally through Stripes CLI throws me the following error:
Booking Load (0.3ms) SELECT "bookings".* FROM "bookings" WHERE "bookings"."checkout_session_id" = $1 LIMIT $2 [["checkout_session_id", "cs_test_a1bcREeeCzBEtGQJPUyr5YqCiPtVJYXBItvHEeayYgKP2Rtr1qOih3SJRI"], ["LIMIT", 1]]
↳ app/services/stripe_checkout_session_service.rb:3:in `call'
Completed 500 Internal Server Error in 27ms (ActiveRecord: 5.8ms | Allocations: 13382)
NoMethodError (undefined method `update' for nil:NilClass):
It apparently doesn't recognize my Class Booking. All the other requests return 200:
2022-12-21 18:21:49 --> product.created [evt_1MHVzEKr4qTfokMbZmt0oXj6]
2022-12-21 18:21:49 <-- [200] POST http://localhost:3000/update-payment [evt_1MHVzEKr4qTfokMbZmt0oXj6]
2022-12-21 18:21:49 --> price.created [evt_1MHVzFKr4qTfokMbi5lDKURc]
2022-12-21 18:21:49 <-- [200] POST http://localhost:3000/update-payment [evt_1MHVzFKr4qTfokMbi5lDKURc]
2022-12-21 18:21:53 --> checkout.session.completed [evt_1MHVzJKr4qTfokMbQPa7g9Cz]
2022-12-21 18:21:53 <-- [500] POST http://localhost:3000/update-payment [evt_1MHVzJKr4qTfokMbQPa7g9Cz]
2022-12-21 18:21:53 --> charge.succeeded [evt_3MHVzHKr4qTfokMb0CfRjM3Y]
2022-12-21 18:21:53 <-- [200] POST http://localhost:3000/update-payment [evt_3MHVzHKr4qTfokMb0CfRjM3Y]
2022-12-21 18:21:53 --> payment_intent.succeeded [evt_3MHVzHKr4qTfokMb0O5Ivb3a]
2022-12-21 18:21:53 <-- [200] POST http://localhost:3000/update-payment [evt_3MHVzHKr4qTfokMb0O5Ivb3a]
2022-12-21 18:21:53 --> payment_intent.created [evt_3MHVzHKr4qTfokMb04ftdUAI]
2022-12-21 18:21:53 <-- [200] POST http://localhost:3000/update-payment [evt_3MHVzHKr4qTfokMb04ftdUAI]
Honestly, I don't know what to try. A require_relative of the model is not going to work. I am pretty new to services, so I literally can't understand why it wouldn't recognize my class.

I think your Booking class is being imported correctly. However, it looks like this line is returning nil:
booking = Booking.find_by(checkout_session_id: event.data.object.id)
Try logging out the value of "booking" and dig into what exactly the find_by method is doing. The error thrown means that "booking" is being set to Nil, so attempting to run the "update" method on "booking" returns an error.

Related

ExpressJs retry query after long time processing

We are having a weird problem with our Nodejs-Expressjs server. We are trying to perform a heavy query that takes 5-10 minutes to finish. The query works well, but for some reason after 2-4 minutes the server retry the query again.
We have traceability logging implanted and we see the query is performed twice with the same requested.
Does anyone have an idea of the possible reasons for this behavior?
,Request Morgan --> ,77e53abf-272c-420d-9e82-**d59736a2f169,POST,undefined,/admin/cars/feed,undefined ms,# Thu, 29 Apr 2021 07:02:25 GMT,127.0.0.1,from http://localhost:8085/,Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.93 Mobile Safari/537.36, Size= ,undefined,bytes,**
undefined
[LOGGER] 21-04-29 09:04:30 info : Receiving JWT payload {"sub":{"userId":"fc32df37-ee2b-44e3-a864-8b73ea31d1aa","roleId":2},"tokenId":"RReUCy7UD","type":0,"iat":1619675641}
77e53abf-272c-420d-9e82-d59736a2f169
Your token is VALID
[LOGGER] 21-04-29 09:04:31 info : User data found in cache
77e53abf-272c-420d-9e82-d59736a2f169
[LOGGER] 21-04-29 09:04:32 debug : User "baaldev" authenticated
77e53abf-272c-420d-9e82-d59736a2f169
[LOGGER] 21-04-29 09:04:32 info : Validating POST:/cars/feed
undefined
[LOGGER] 21-04-29 09:04:32 info : /admin/cars/feed request with data
filters=[{"carOwnerType":{"value":[{"value":"hideScrapped","label":"SEARCHCAR.FROM_SCRAPPED"}]}}]
name=t
platform=trovit
undefined
[LOGGER] 21-04-29 09:04:33 info : User is authenticated to request
undefined
[LOGGER] 21-04-29 09:04:62 debug : Getting cars
77e53abf-272c-420d-9e82-d59736a2f169
[LOGGER] 21-04-29 09:04:87 info : Executing (default): SELECT count(`CarsForSelling`.`carId`) AS `count` FROM `CarsForSelling` AS `CarsForSelling` LEFT OUTER JOIN `UserInformation` AS `OwnedCars` ON `CarsForSelling`.`userId` = `OwnedCars`.`userId` LEFT OUTER JOIN `BusinessInformation` AS `OwnedCars->BusinessInformation` ON `OwnedCars`.`userId` = `OwnedCars->BusinessInformation`.`userId` WHERE `CarsForSelling`.`status` > 0 AND `CarsForSelling`.`lockStatus` = '0' AND `CarsForSelling`.`validUntil` >= '2021-04-29 07:02:32';
undefined
[LOGGER] 21-04-29 09:04:29 http : HTTP log
77e53abf-272c-420d-9e82-d59736a2f169
[LOGGER] 21-04-29 09:04:29 info :
**,Request Morgan --> ,77e53abf-272c-420d-9e82-d59736a2f169,POST,undefined,/admin/cars/feed,undefined ms,# Thu, 29 Apr 2021 07:04:26 GMT,127.0.0.1,from http://localhost:8085/,Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.93 Mobile Safari/537.36, Size= ,undefined,bytes,**
undefined
[LOGGER] 21-04-29 09:04:78 info : Executing (default): SELECT `CarsForSelling`.*, `CarImages`.`imageId` AS `CarImages.imageId`, `CarImages`.`carId` AS `CarImages.carId`, `CarImages`.`imageName` AS `CarImages.imageName`, `CarImages`.`imageUrl` AS `CarImages.imageUrl`, `CarImages`.`order` AS `CarImages.order`, `CarImages`.`imageSourceUrl` AS `CarImages.imageSourceUrl`, `CarImages`.`createdAt` AS
It is why we have status code 202
function endPoint (req, res) {
// code
//Do not put a `return`
res.sendStatus(202);
// exec query
const result = runQuery()
return;
}
The HyperText Transfer Protocol (HTTP) 202 Accepted response status
code indicates that the request has been accepted for processing, but
the processing has not been completed; in fact, processing may not
have started yet. The request might or might not eventually be acted
upon, as it might be disallowed when processing actually takes place.
202 is non-committal, meaning that there is no way for the HTTP to
later send an asynchronous response indicating the outcome of
processing the request. It is intended for cases where another process
or server handles the request, or for batch processing.
https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/202

Web Push Notifications not working for Firefox, but are for Chrome and Edge

I'm writing an app in Heroku that sends push notifications to the web browser. I have this working 100%, except that Firefox is not receiving any push notifications. Chrome and Edge are, but Firefox isn't. I've made sure that Firefox allows notifications. So, my question isn't really around the coding part of it, since that appears to be working, but it's more of "is there anything with Firefox that I need to be aware of when developing a web push notification app for it"? I know that each major browser treats push notifications a bit differently, and that's what I suspect the issue is.
Here's the console output for Firefox on the site I subscribed to push notifications for. I get the same JSON syntax error in all browsers, by the way - but the JSON does parse correctly:
Service worker successfully registered. subscribeUser.js:22:13
email catpured = qaz#qaz.com test.html:33:17
Received PushSubscription: {"endpoint":"https://updates.push.services.mozilla.com/wpush/v2/gAAAAABesF3MuanJl_xHII9ya_KSkLSe0CmR4ZZqnlT5HNv4qwV24Zv1hkCe7eGuPsh3HLRm2g0u_vbw_-f6Nw4Gk_SpFW9QcGX3DQMSqX5z_bJUfV_Ws5oHY-A8Q_Nfqcv7iji-_89BtaM0wmde3gx2exJsXbE_uxfr6daFInUKgWLkb3BtmhI","keys":{"auth":"n8yCVyUqhYkOGamajx03Pg","p256dh":"BDgmGLotx4N2BQdqdsIkFjRhycZW1NisTktz-Lyvg094LbDDjMiZEQlLpeuDQCD030Lzx-FleNPewDglpnYS2Wo"}} subscribeUser.js:62:15
SyntaxError: JSON.parse: unexpected character at line 1 column 1 of the JSON data
notificationText Object Stringified: {"notification":{"body":"this is coolfgsdfsfdsfdsdfsdfsfds","title":"Whoa","actions":[{"action":"Yes","title":"Yes","icon":"./images/notification_icon.png"},{"action":"No","title":"No","icon":"./images/notification_icon.png"}],"data":{"url":"http://www.yahoo.com"},"requireInteraction":true}} service-worker.js:9:11
NotificationText Object Not Stringified:
Object { notification: {…} }
service-worker.js:10:11
NotificationText.Notification Object:
Object { body: "this is coolfgsdfsfdsfdsdfsdfsfds", title: "Whoa", actions: (2) […], data: {…}, requireInteraction: true }
service-worker.js:11:11
TypeOf notificationText: object service-worker.js:12:11
Notification: Whoa
Here's the console output for Chrome:
email catpured = 4444#4444.com
subscribeUser.js:62 Received PushSubscription: {"endpoint":"https://fcm.googleapis.com/fcm/send/ekyiCymm_cE:APA91bGTjb4ccnWyiLZ5JIi99rIllciNnnVWt0DvL7emfgpP9Ft_CppxakL_xbB2lH-Xacu1rhov8LXbGCfes4ym0tvObNUSUvwDLA6cr9-0ANSUpUfmLBUq_WxV2DGNTBoDn93jFc8U","expirationTime":null,"keys":{"p256dh":"BMUz_sHi9NWQeuBy5gNmlkPv2PP04A_sbiee01EzuMdCrW14da4r0C2-eVA-tjzNDFxLF1wd1F-I852t8Hl7mb4","auth":"xDNUaKR8gMAhmSG6rbQS5w"}}
test.html:1 Uncaught (in promise) SyntaxError: Unexpected token O in JSON at position 0
Promise.then (async)
sendSubscriptionToBackEnd # subscribeUser.js:84
(anonymous) # subscribeUser.js:64
Promise.then (async)
subscribeUserToPush # subscribeUser.js:61
(anonymous) # subscribeUser.js:42
Promise.then (async)
askPermission # subscribeUser.js:41
(anonymous) # test.html:34
service-worker.js:9 notificationText Object Stringified: {"notification":{"body":"this is coolfgsdfsfdsfdsdfsdfsfds","title":"Whoa","actions":[{"action":"Yes","title":"Yes","icon":"./images/notification_icon.png"},{"action":"No","title":"No","icon":"./images/notification_icon.png"}],"data":{"url":"http://www.yahoo.com"},"requireInteraction":true}}
service-worker.js:10 NotificationText Object Not Stringified: {notification: {…}}
service-worker.js:11 NotificationText.Notification Object: {body: "this is coolfgsdfsfdsfdsdfsdfsfds", title: "Whoa", actions: Array(2), data: {…}, requireInteraction: true}
service-worker.js:12 TypeOf notificationText: object
service-worker.js:15 Notification: Whoa
And here's the notification I get for Chrome:
And here's the notification I get:
The answer is here: https://www.askvg.com/tip-enable-disable-mozilla-firefox-notifications-to-show-in-windows-10-action-center/. Turns out that notifications in Firefox to display in the Windows 10 Action Center is disabled by default.

ERROR event: Not Found; when triggering event from another event : probot app built in nodejs

I am building a GitHub app in probot and nodejs and trying to update the PR whenever a pull_request.synchronize event occurs. I know that doesn't make much sense, but the point is I want to be able to update the PR upon the occurrence of a certain event.
app.on('pull_request.synchronize', async context => {
console.log('---------------------- on pull_request.synchronize, body of PR : ', context.payload.pull_request)
console.log('State of PR after pull_request.synchronize event :---------------', context.payload.pull_request.state)
await context.github.pulls.update({
owner:context.payload.repository.owner,
repo :context.payload.repository.name,
pull_number :context.payload.pull_request.number,
title:'updated Pull Request Title: Success',
body:'updated Pull Request Body: Success',
})
})
I get below error every time :
ERROR event: Not Found (id=ssjsk-dd-sdfsdfs-fsfs-fsfsfsffsd)
HttpError: Not Found
at response.text.then.message (C:\GitWorkspace\user\GitHubApps\github-app-name\node_modules\#octokit\request\dist-node\index.js:66:23)
at process._tickCallback (internal/process/next_tick.js:68:7)
--
event: {
"event": "pull_request.synchronize",
"id": "2332-3131-131-31231313-1313232144142",
"installation": 3352243,
"repository": "user/Demo-Repo"
}
06:24:58.460Z ERROR probot: Not Found
HttpError: Not Found
at response.text.then.message (C:\GitWorkspace\user\GitHubApps\github-app-name\node_modules\#octokit\request\dist-node\index.js:66:23)
at process._tickCallback (internal/process/next_tick.js:68:7)
06:24:58.472Z INFO http: POST / 500 - 519.93 ms (id=3424234-43242-42423478a-4242-42342342)
06:24:58.476Z ERROR probot: Internal Server Error
Error: Internal Server Error
at Request.callback (C:\GitWorkspace\user\GitHubApps\github-app-name\node_modules\superagent\lib\node\index.js:706:15)
at IncomingMessage.parser (C:\GitWorkspace\user\GitHubApps\github-app-name\node_modules\superagent\lib\node\index.js:916:18)
at IncomingMessage.emit (events.js:203:15)
at IncomingMessage.EventEmitter.emit (domain.js:448:20)
at endReadableNT (_stream_readable.js:1129:12)
at process._tickCallback (internal/process/next_tick.js:63:19)
Why is it unable to get the detail out of context, when in fact the context does get printed out by my console statement and contains the pull_request details.
I am just a beginner in both probot and nodejs so I am not sure if this has anything to to do with the syntax.
The problem is that context.payload.repository.owner is an object, compare the example payload at https://developer.github.com/v3/activity/events/types/#webhook-payload-example-28
Try to replace it with context.payload.repository.owner.login.
Probot also provides a convenience method which returns and { owner, repo } object based on the context, and you can pass extra parameters to it
Try the following
await context.github.pulls.update(context.repo({
pull_number: context.payload.pull_request.number,
title:'updated Pull Request Title: Success',
body:'updated Pull Request Body: Success',
}))

completely failed to read post data in vertx route handler chain - tried all ways no success

i'm running a gradle build with vertx web. my library dependecies include
// for mock API serving https://mvnrepository.com/artifact/io.vertx/vertx-core
compile group: 'io.vertx', name: 'vertx-core', version: '3.5.3'
compile group: 'io.vertx', name: 'vertx-web', version: '3.5.3'
so in my groovy script code i do this
Vertx vertx = Vertx.vertx()
HttpServer server = vertx.createHttpServer()
...
I then declare a route to catch all requests on resource and process the request and form a response - trying to keep it simple - just return simple string as response
Router allRouter = Router.router(vertx)
allRouter.route ( "/api/now/table/incident")
.handler(BodyHandler.create())
.blockingHandler { routingContext ->
def request = routingContext.request()
HttpMethod method = request.method()
def response = routingContext.response()
response.putHeader ("content-type", "text/plain")
def uri = routingContext.request().absoluteURI()
switch (method) {
case HttpMethod.GET:
println "processing a resource GET on uri : $uri "
response.end ("(GET) howdi will")
break
case HttpMethod.POST:
String bodyEnc = routingContext.getBodyAsJson().encodePrettily()
println "processing a resource POST on uri : $uri"
println "post request received post data : " + bodyEnc
response.end ("(POST) howdi will")
break
}
}
I create a handler for BodyHandling, before the general handler in the route.
Then I start the server with the route
server.requestHandler(allRouter.&accept)
server.listen(8081, "localhost")
works all fine for a get request from postman.
when i use a post request with a request body data - the service hangs and i have to cancel - it never gets to the switch statement. All that happens in the console when i issue the post is
23:30:16.455 [vert.x-eventloop-thread-1] DEBUG io.netty.util.Recycler - -Dio.netty.recycler.maxCapacityPerThread: 32768
23:30:16.455 [vert.x-eventloop-thread-1] DEBUG io.netty.util.Recycler - -Dio.netty.recycler.maxSharedCapacityFactor: 2
23:30:16.455 [vert.x-eventloop-thread-1] DEBUG io.netty.util.Recycler - -Dio.netty.recycler.linkCapacity: 16
23:30:16.455 [vert.x-eventloop-thread-1] DEBUG io.netty.util.Recycler - -Dio.netty.recycler.ratio: 8
23:30:16.478 [vert.x-eventloop-thread-1] DEBUG io.netty.buffer.AbstractByteBuf - -Dio.netty.buffer.bytebuf.checkAccessible: true
23:30:16.482 [vert.x-eventloop-thread-1] DEBUG io.netty.util.ResourceLeakDetectorFactory - Loaded default ResourceLeakDetector: io.netty.util.ResourceLeakDetector#51d486
This is the nearest to being a related topic enter link description here
I have tried this countless ways now, set bodyHandler inside the request when i get it etc - can't get it to work.
my postman post looks like this - where the headers are set to Content-Type application/json, Content-Length is 296 bytes (length of bytes in utf16), and Accept is text/plain to receive simple response
The documentation is just not clear. Blown 12 hours trying to crack this.
Does any one know exactly how one should get the post data on a request when using vertx web please
It appears as though my problem was the size of bytes being sent. I had calculated the bytes of the reqBody string as 296 bytes (using UTF16 charset), and set this into the Postman request.
So the vertx server was trying to read that many when processing the body and hanged. When I just did reqBody.getBytes().size - effectively UTF8, this returned 147 bytes. When I changed the content-length to this in postman, it started to work.
There is a timing issue in where you setup the BodyHandler. I tried this is tin the switch case, and it fails with request has already been read.
However neither of these seem to work successfully.
option 1 : ' create body handler before the route (path) call'
allRouter.route().handler(BodyHandler.create())
//now try and setup the route for API path interception
allRouter.route ( "/api/now/table/incident")
.blockingHandler { routingContext -> ...
option 2 : 'chain the handlers but put the Body Handler first'
//now try and setup the route for API path interception, followed by body handler
allRouter.route ( "/api/now/table/incident")
.handler(BodyHandler.create())
.blockingHandler { routingContext ->...
This was setting the content-length, assuming UTF16 for internal byte size that was the real problem. Now back to trying to complete what I set out to do.

Firebase-admin unpredictable read times

I have a Firebase database that clients access via a REST API run on node.js, which then reads from my firebase database using the firebase-admin node client. For most of my endpoints, several concurrent database reads are required. For example, for the api/item/:itemKey endpoint, I need to pull the item from the database, then, once that has been received, I concurrently ask for all of the nested spec, panel, query and task objects associated with the retrieved item. This makes for two consecutive "waves" of database calls: the first item retrieval, and then the retrieval of all resources nested within that item.
The problem is that the latency on these calls is wildly unpredictable. For example, here are the logs for two consecutive calls to the same endpoint, done within 5 seconds of each other:
// START REQUEST 1
Endpoint activated (invocation #: 18) ("GET /api/items/:itemKey")
Firebase items READ Success ("id: -LDhjV8Hkievzbh5UVfz"): 78ms
Firebase specs READ Success ("id: -LDIezNhwWX8OmoWXZO3"): 72ms
Firebase specs READ Success ("id: -LDIezNqbVuvkpr9WEf8"): 73ms
Firebase panels READ Success ("id: -LDhjV5y1mAwPmJkE4d3"): 74ms
Firebase queries READ Success ("id: -LDhjV34aJlz_XFwOp6B"): 69ms
Firebase queries READ Success ("id: -LDhjV3QO1AM9UiCVdux"): 71ms
Firebase tasks READ Success ("id: -LDhjV34aJlz_XFwOp6C"): 71ms
Firebase tasks READ Success ("id: -LDhjV3QO1AM9UiCVduy"): 72ms
Endpoint resolution ("GET /api/items/:itemKey"): 305ms
// END REQUEST 1
// START REQUEST 2
Endpoint activated (invocation #: 19) ("GET /api/items/:itemKey")
Firebase items READ Success ("id: -LDhjV8Hkievzbh5UVfz"): 1174ms
Firebase specs READ Success ("id: -LDIezNhwWX8OmoWXZO3"): 1463ms
Firebase specs READ Success ("id: -LDIezNqbVuvkpr9WEf8"): 1463ms
Firebase panels READ Success ("id: -LDhjV5y1mAwPmJkE4d3"): 1464ms
Firebase queries READ Success ("id: -LDhjV34aJlz_XFwOp6B"): 312ms
Firebase queries READ Success ("id: -LDhjV3QO1AM9UiCVdux"): 312ms
Firebase tasks READ Success ("id: -LDhjV34aJlz_XFwOp6C"): 65ms
Firebase tasks READ Success ("id: -LDhjV3QO1AM9UiCVduy"): 65ms
Endpoint resolution ("GET /api/items/:itemKey"): 3032ms
// END REQUEST 2
As you can see, some of the reads on endpoint 2 are more than a second slower than the identical reads from the exact same invocation just a few seconds prior (ex: the first "items" read takes 1174ms vs 78ms!). What could be the cause of this? I've checked to make sure that firebase-admin is not dropping the socket connection in between calls, so I don't think that's the culprit, but otherwise I am out of ideas.
For completeness, here is the function I use to retrieve records from the database:
// Fetch the item in the database that matches a given Firebase id
module.exports = function whenFetchedViaId(table, id, req) {
const timer = req.log ? req.log.timer() : () => {};
return req.database
.ref(`/${table}/${id}`)
.once('value')
.then((snapshot) => {
timer(`Firebase ${table} READ Success`, `id: ${id}`);
return snapshot.val();
})
.catch((error) => {
timer(`Firebase ${table} READ Failure`, `id: ${id}`);
throw error;
});
};
Update
Here is some added logging for one of the READ calls that is taking >1s. Unless I am misreading this log output, it seems like the Firebase backend is just taking over a second to respond. Is this correct?
// START REQUEST
Request ("6ee776c5-2b4e-4888-b83b-ea6dddcae263"), Endpoint activated (invocation #: 4) ("GET /api/items/:itemKey")
[FIREBASE]{96328ms} p:1: Listen called for /items/-LDhjV8Hkievzbh5UVfz default
[FIREBASE]{96328ms} p:1: Listen on /items/-LDhjV8Hkievzbh5UVfz for default
[FIREBASE]{96328ms} p:1: {"r":42,"a":"q","b":{"p":"/items/-LDhjV8Hkievzbh5UVfz","h":""}}
[FIREBASE]{97842ms} p:1: handleServerMessage d {"p":"items/-LDhjV8Hkievzbh5UVfz","d":{"baseSpec":"-LDIezNhwWX8OmoWXZO3","createdAt":1527628300934,"id":"-LDhjV8Hkievzbh5UVfz","label":"Testing","panels":{"-LDhjV5y1mAwPmJkE4d3":true},"targetSpec":"-LDIezNqbVuvkpr9WEf8","x":{"-LD8Ap4ujTBp_GP5jTv9":true},"y":{"-LD89GHnTYjh99W8ltsY":true}}}
[FIREBASE]{97843ms} event: /items/-LDhjV8Hkievzbh5UVfz:value:{"baseSpec":"-LDIezNhwWX8OmoWXZO3","createdAt":1527628300934,"id":"-LDhjV8Hkievzbh5UVfz","label":"Testing","panels":{"-LDhjV5y1mAwPmJkE4d3":true},"targetSpec":"-LDIezNqbVuvkpr9WEf8","x":{"-LD8Ap4ujTBp_GP5jTv9":true},"y":{"-LD89GHnTYjh99W8ltsY":true}}
[FIREBASE]{97843ms} p:1: Unlisten called for /items/-LDhjV8Hkievzbh5UVfz default
[FIREBASE]{97843ms} p:1: Unlisten on /items/-LDhjV8Hkievzbh5UVfz for default
[FIREBASE]{97843ms} p:1: {"r":43,"a":"n","b":{"p":"/items/-LDhjV8Hkievzbh5UVfz"}}
[FIREBASE]{97844ms} p:1: from server: {"r":42,"b":{"s":"ok","d":{}}}
Request ("6ee776c5-2b4e-4888-b83b-ea6dddcae263"), Firebase items READ Success ("id: -LDhjV8Hkievzbh5UVfz"): 1516ms

Resources