mirror of
https://github.com/pocketbase/pocketbase.git
synced 2026-05-19 06:11:43 -04:00
81 lines
5.9 KiB
JavaScript
81 lines
5.9 KiB
JavaScript
function e(e){let n=app.utils.getApiExampleURL(),r=Object.assign({collectionId:e.id,collectionName:e.name},app.utils.getDummyFieldsData(e));return t.div({pbEvent:`apiPreviewRealtime`,className:`content`},t.p(null,`Subscribe to realtime changes via Server-Sent Events (SSE).`),t.p(null,`Events are sent for `,t.strong(null,`create`),`, `,t.strong(null,`update`),` and `,t.strong(null,`delete`),` record operations (see "Event data format" below).`),t.div({className:`alert info`},t.p({className:`txt-bold`},`You could subscribe to a single record or to an entire collection.`),t.p(null,`When you subscribe to a `,t.strong(null,`single record`),`, the collection's `,t.strong(null,`View rule`),` will be used to determine whether the subscriber is allowed to receive the event message.`),t.p(null,`When you subscribe to an `,t.strong(null,`entire collection`),`, the collection's `,t.strong(null,`List/Search rule`),` will be used to determine whether the subscriber is allowed to receive the event message.`)),app.components.codeBlockTabs({className:`sdk-examples m-t-sm`,historyKey:`pbLastSDK`,tabs:[{title:`JS SDK`,language:`js`,value:`
|
|
import PocketBase from 'pocketbase';
|
|
|
|
const pb = new PocketBase('${n}');
|
|
|
|
...
|
|
|
|
// (optionally) authenticate
|
|
await pb.collection('users').authWithPassword('test@example.com', '123456');
|
|
|
|
// subscribe to changes in any ${n} record
|
|
pb.collection('${n}').subscribe('*', function (e) {
|
|
console.log(e.action);
|
|
console.log(e.record);
|
|
}, { /* other options like: filter, expand, custom headers, etc. */ });
|
|
|
|
// subscribe to changes only in the specified record
|
|
pb.collection('${n}').subscribe('RECORD_ID', function (e) {
|
|
console.log(e.action);
|
|
console.log(e.record);
|
|
}, { /* other options like: filter, expand, custom headers, etc. */ });
|
|
|
|
...
|
|
|
|
// unsubscribe - remove all 'RECORD_ID' subscriptions
|
|
pb.collection('${n}').unsubscribe('RECORD_ID');
|
|
|
|
// unsubscribe - remove all '*' topic subscriptions
|
|
pb.collection('${n}').unsubscribe('*');
|
|
|
|
// unsubscribe - remove all collection subscriptions
|
|
pb.collection('${n}').unsubscribe();
|
|
`,footnote:t.div({className:`txt-right`},t.a({href:`https://github.com/pocketbase/js-sdk`,target:`_blank`,rel:`noopener noreferrer`,textContent:`JS SDK docs`}))},{title:`Dart SDK`,language:`dart`,value:`
|
|
import 'package:pocketbase/pocketbase.dart';
|
|
|
|
final pb = PocketBase('${n}');
|
|
|
|
...
|
|
|
|
// (optionally) authenticate
|
|
await pb.collection('users').authWithPassword('test@example.com', '123456');
|
|
|
|
// subscribe to changes in any ${n} record
|
|
pb.collection('${n}').subscribe('*', (e) {
|
|
print(e.action);
|
|
print(e.record);
|
|
}, /* other options like: filter, expand, custom headers, etc. */);
|
|
|
|
// subscribe to changes only in the specified record
|
|
pb.collection('${n}').subscribe('RECORD_ID', (e) {
|
|
print(e.action);
|
|
print(e.record);
|
|
}, /* other options like: filter, expand, custom headers, etc. */);
|
|
|
|
...
|
|
|
|
// unsubscribe - remove all 'RECORD_ID' subscriptions
|
|
pb.collection('${n}').unsubscribe('RECORD_ID');
|
|
|
|
// unsubscribe - remove all '*' topic subscriptions
|
|
pb.collection('${n}').unsubscribe('*');
|
|
|
|
// unsubscribe - remove all collection subscriptions
|
|
pb.collection('${n}').unsubscribe();
|
|
`,footnote:t.div({className:`txt-right`},t.a({href:`https://github.com/pocketbase/dart-sdk`,target:`_blank`,rel:`noopener noreferrer`,textContent:`Dart SDK docs`}))},{title:`curl`,language:`bash`,value:`
|
|
# init an SSE connection and start listening for messages
|
|
# (the first message is always PB_CONNECT with the connection "clientId")
|
|
curl -N '${n}/api/realtime'
|
|
|
|
# open a new terminal and submit the subscription topic(s)
|
|
# with the "clientId" from the initial PB_CONNECT message
|
|
curl -X POST \\
|
|
-H 'Authorization:TOKEN' \\
|
|
-H 'Content-Type:application/json' \\
|
|
-d '{ "clientId": "YOUR_CLIENT_ID", "subscriptions": ["${e.name}/*"] }' \\
|
|
'${n}/api/realtime'
|
|
|
|
# create/update/delete a record in the ${e.name} collection and
|
|
# you should see the event message(s) in the first terminal
|
|
# (as long as your client satisfies the topic API rule)
|
|
`}]}),t.div({className:`block m-t-base`},t.strong(null,`API details`)),t.div({className:`alert api-preview-alert`},t.span({className:`label method`},`GET/POST`),t.span({className:`path`},`/api/realtime`),t.div({className:`extra`},t.a({href:`https://pocketbase.io/docs/api-realtime/`,target:`_blank`,rel:`noopener noreferrer`,textContent:`Realtime docs`}))),t.div({className:`block m-t-base m-b-sm`},t.strong(null,`Event data format`)),app.components.codeBlock({value:JSON.stringify({action:`create`,record:r},null,2).replace(`"action": "create",`,`"action": "create", // create, update or delete`)}))}export{e as docsRealtime}; |