pocketbase 0.7.3
pocketbase: ^0.7.3 copied to clipboard
Multi-platform Dart SDK for PocketBase, an open source realtime backend in 1 file.
0.7.3 #
- Improved the realtime autoretry handling (added
infinityand stepped retries timeout duration).
0.7.2 #
- Added support for handling non-json response when calling
pb.send().
0.7.1+1 #
- Removed version install constraint from the README.
0.7.1 #
- Added check for the collection name before auto updating the
pb.authStorestate on auth record update/delete.
0.7.0 #
-
Allowed sending the existing valid auth token with the
authWithPassword()calls. -
Minor docs improvements.
0.6.0 #
- Added
pb.health.check()that checks the health status of the PocketBase server (available in PocketBase v0.10.0)
0.5.0+1 #
- Updated the realtime examples in the README.
0.5.0 #
⚠️ Please note that this release works only with the new PocketBase v0.8+ API!
See the breaking changes below for more information on what has changed.
Non breaking changes:
-
Added new crud method
getFirstListItem(filter)to fetch a single item by a list filter. -
Added optional named
expandargument to all crud functions that returns aRecordModel(with v0.8 we now also support indirect expansion). -
You can now pass additional account
createDatawhen authenticating with OAuth2. -
Added
AuthMethodsList.usernamePasswordreturn field (we now support combined username/email authentication; see belowauthWithPassword).
Breaking changes:
-
For easier and more conventional parsing, all DateTime strings now have
Zas suffix, eg.2022-01-01 01:02:03.456Z. -
Moved
pb.records.getFileUrl()topb.getFileUrl(). -
Moved all
pb.records.*handlers underpb.collection().*:pb.records.getFullList('example'); => pb.collection('example').getFullList(); pb.records.getList('example'); => pb.collection('example').getList(); pb.records.getOne('example', 'RECORD_ID'); => pb.collection('example').getOne('RECORD_ID'); (no old equivalent) => pb.collection('example').getFirstListItem(filter); pb.records.create('example', ...); => pb.collection('example').create(...); pb.records.update('example', 'RECORD_ID', ...); => pb.collection('example').update('RECORD_ID', ...); pb.records.delete('example', 'RECORD_ID'); => pb.collection('example').delete('RECORD_ID'); -
The
pb.realtimeservice has now a more general callback form so that it can be used with custom realtime handlers. Dedicated records specific subscribtions could be found underpb.collection().*:pb.realtime.subscribe('example', callback) => pb.collection('example').subscribe('*', callback); pb.realtime.subscribe('example/RECORD_ID', callback) => pb.collection('example').subscribe('RECORD_ID', callback); pb.realtime.unsubscribe('example') => pb.collection('example').unsubscribe('*'); pb.realtime.unsubscribe('example/RECORD_ID') => pb.collection('example').unsubscribe('RECORD_ID'); (no old equivalent) => pb.collection('example').unsubscribe();Additionally,
subscribe()now returnUnsubscribeFuncthat could be used to unsubscribe only from a single subscription listener. -
Moved all
pb.users.*handlers underpb.collection().*:pb.users.listAuthMethods(); => pb.collection('users').listAuthMethods(); pb.users.authViaEmail(email, password); => pb.collection('users').authWithPassword(usernameOrEmail, password); pb.users.authViaOAuth2(provider, code, codeVerifier, redirectUrl, createData: ...); => pb.collection('users').authWithOAuth2(provider, code, codeVerifier, redirectUrl, createData: ...); pb.users.refresh(); => pb.collection('users').authRefresh(); pb.users.requestPasswordReset(email); => pb.collection('users').requestPasswordReset(email); pb.users.confirmPasswordReset(resetToken, newPassword, newPasswordConfirm); => pb.collection('users').confirmPasswordReset(resetToken, newPassword, newPasswordConfirm); pb.users.requestVerification(email); => pb.collection('users').requestVerification(email); pb.users.confirmVerification(verificationToken); => pb.collection('users').confirmVerification(verificationToken); pb.users.requestEmailChange(newEmail); => pb.collection('users').requestEmailChange(newEmail); pb.users.confirmEmailChange(emailChangeToken, password); => pb.collection('users').confirmEmailChange(emailChangeToken, password); pb.users.listExternalAuths(recordId); => pb.collection('users').listExternalAuths(recordId); pb.users.unlinkExternalAuth(recordId, provider); => pb.collection('users').unlinkExternalAuth(recordId, provider); -
Changes in
pb.adminsfor consistency with the new auth handlers inpb.collection().*:pb.admins.authViaEmail(email, password); => pb.admins.authWithPassword(email, password); pb.admins.refresh(); => pb.admins.authRefresh(); -
To prevent confusion with the auth method responses, the following methods now returns 204 with empty body (previously 200 with token and auth model):
Future<void> pb.admins.confirmPasswordReset(...) Future<void> pb.collection("users").confirmPasswordReset(...) Future<void> pb.collection("users").confirmVerification(...) Future<void> pb.collection("users").confirmEmailChange(...) -
Removed
UserModelbecause users are now regular records (aka.RecordModel). This means that if you want to access for example the email of an auth record, you can do something like:record.getStringValue('email'). The old user fieldslastResetSentAt,lastVerificationSentAtandprofileare no longer available (theprofilefields are available under theRecordModel.dataproperty like any other fields). -
Since there is no longer
UserModel,pb.authStore.modelcan now be of typeRecordModel,AdminModelornull. -
RecordModel.expandis now alwaysMap<String, List<RecordModel>>and it is resolved recursively (previously it was plainMap<String, dynamic>). Please note that for easier and unified record(s) access, the map value is alwaysList, even for single relations. When callingRecordModel.toJson()it will output theexpandin its original format. -
Removed
lastResetSentAtfromAdminModel. -
Renamed the getter
CrudService.basePathtoCrudService.baseCrudPath. -
Replaced
ExternalAuthModel.userIdwith 2 newrecordIdandcollectionIdprops. -
Renamed
SubscriptionEventtoRecordSubscriptionEvent.
0.4.1 #
- Stop sending empty JSON map as body (thanks @rodydavis) [#7].
- Changed the default
ClientException.statusCodefrom500to0.
0.4.0 #
- Added
UserService.listExternalAuths()to list all linked external auth providers for a single user. - Added
UserService.unlinkExternalAuth()to delete a single user external auth provider relation.
0.3.0 #
- Renamed
LogRequestModel.iptoLogRequestModel.remoteIp. - Added
LogRequestModel.userIp(the "real" user ip when behind a reverse proxy). - Added
SettingsService.testS3()to test the S3 storage connection. - Added
SettingsService.testEmail()to send a test email.
0.2.0 #
- Added
CollectionService.import(). - Added
totalPagesto theResultList<M>dto.
0.1.1 #
- Fixed base64.decode exception when
AuthStore.isValidis used (related to dart-lang/sdk #39510; thanks @irmhonde).
0.1.0+4 #
- This release just removes the
homepagedirective from thepubspec.yaml.
0.1.0+3 #
- No changes were made again. This release is just to trigger the pub.dev analyzer tool in order to test dart-lang/pub-dev #5927 but this time with ICMP enabled for the homepage domain.
0.1.0+2 #
- No changes were made. This release is just to trigger the pub.dev analyzer tool in order to test dart-lang/pub-dev #5927.
0.1.0+1 #
- Added RecordService to the library exports for dartdoc.
0.1.0 #
- First public release.