@josuelmm/cordova-background-geolocation 3.0.2 → 3.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (38) hide show
  1. package/CHANGELOG.md +24 -0
  2. package/README.md +114 -8
  3. package/RELEASE.MD +1 -1
  4. package/android/CDVBackgroundGeolocation/src/main/java/com/marianhello/bgloc/cordova/ConfigMapper.java +20 -0
  5. package/android/CDVBackgroundGeolocation/src/main/java/com/tenforwardconsulting/bgloc/cordova/BackgroundGeolocationPlugin.java +32 -2
  6. package/android/CDVBackgroundGeolocation/src/test/java/com/marianhello/ConfigMapperTest.java +12 -0
  7. package/android/common/src/main/java/com/marianhello/bgloc/BackgroundGeolocationFacade.java +24 -1
  8. package/android/common/src/main/java/com/marianhello/bgloc/Config.java +87 -0
  9. package/android/common/src/main/java/com/marianhello/bgloc/HttpPostService.java +34 -1
  10. package/android/common/src/main/java/com/marianhello/bgloc/data/LocationDAO.java +5 -0
  11. package/android/common/src/main/java/com/marianhello/bgloc/data/provider/ContentProviderLocationDAO.java +11 -0
  12. package/android/common/src/main/java/com/marianhello/bgloc/data/sqlite/SQLiteConfigurationContract.java +10 -0
  13. package/android/common/src/main/java/com/marianhello/bgloc/data/sqlite/SQLiteConfigurationDAO.java +24 -0
  14. package/android/common/src/main/java/com/marianhello/bgloc/data/sqlite/SQLiteLocationDAO.java +13 -0
  15. package/android/common/src/main/java/com/marianhello/bgloc/data/sqlite/SQLiteOpenHelper.java +13 -1
  16. package/android/common/src/main/java/com/marianhello/bgloc/sync/SyncAdapter.java +14 -9
  17. package/angular/background-geolocation.service.ts +14 -0
  18. package/angular/dist/background-geolocation.service.d.ts +2 -0
  19. package/angular/dist/esm2022/background-geolocation.service.mjs +7 -1
  20. package/angular/dist/fesm2022/josuelmm-cordova-background-geolocation.mjs +6 -0
  21. package/angular/dist/fesm2022/josuelmm-cordova-background-geolocation.mjs.map +1 -1
  22. package/ios/CDVBackgroundGeolocation/CDVBackgroundGeolocation.h +2 -0
  23. package/ios/CDVBackgroundGeolocation/CDVBackgroundGeolocation.m +16 -0
  24. package/ios/common/BackgroundGeolocation/MAURBackgroundGeolocationFacade.h +2 -0
  25. package/ios/common/BackgroundGeolocation/MAURBackgroundGeolocationFacade.m +22 -0
  26. package/ios/common/BackgroundGeolocation/MAURConfig.h +3 -0
  27. package/ios/common/BackgroundGeolocation/MAURConfig.m +20 -1
  28. package/ios/common/BackgroundGeolocation/MAURConfigurationContract.h +1 -0
  29. package/ios/common/BackgroundGeolocation/MAURConfigurationContract.m +1 -0
  30. package/ios/common/BackgroundGeolocation/MAURGeolocationOpenHelper.m +5 -1
  31. package/ios/common/BackgroundGeolocation/MAURPostLocationTask.m +4 -3
  32. package/ios/common/BackgroundGeolocation/MAURSQLiteConfigurationDAO.m +16 -9
  33. package/ios/common/BackgroundGeolocation/MAURSQLiteLocationDAO.h +2 -0
  34. package/ios/common/BackgroundGeolocation/MAURSQLiteLocationDAO.m +20 -0
  35. package/package.json +3 -2
  36. package/plugin.xml +1 -1
  37. package/www/BackgroundGeolocation.d.ts +65 -0
  38. package/www/BackgroundGeolocation.js +12 -0
@@ -22,6 +22,10 @@ public final class SQLiteConfigurationContract {
22
22
  public static final String COLUMN_NAME_DEBUG = "debugging";
23
23
  public static final String COLUMN_NAME_NOTIF_TITLE = "notification_title";
24
24
  public static final String COLUMN_NAME_NOTIF_TEXT = "notification_text";
25
+ public static final String COLUMN_NAME_NOTIF_SYNC_TITLE = "notification_sync_title";
26
+ public static final String COLUMN_NAME_NOTIF_SYNC_TEXT = "notification_sync_text";
27
+ public static final String COLUMN_NAME_NOTIF_SYNC_COMPLETED = "notification_sync_completed_text";
28
+ public static final String COLUMN_NAME_NOTIF_SYNC_FAILED = "notification_sync_failed_text";
25
29
  public static final String COLUMN_NAME_NOTIF_ICON_LARGE = "notification_icon_large";
26
30
  public static final String COLUMN_NAME_NOTIF_ICON_SMALL = "notification_icon_small";
27
31
  public static final String COLUMN_NAME_NOTIF_COLOR = "notification_icon_color";
@@ -37,6 +41,7 @@ public final class SQLiteConfigurationContract {
37
41
  public static final String COLUMN_NAME_URL = "url";
38
42
  public static final String COLUMN_NAME_SYNC_URL = "sync_url";
39
43
  public static final String COLUMN_NAME_SYNC_THRESHOLD = "sync_threshold";
44
+ public static final String COLUMN_NAME_SYNC_ENABLED = "sync_enabled";
40
45
  public static final String COLUMN_NAME_HEADERS = "http_headers";
41
46
  public static final String COLUMN_NAME_MAX_LOCATIONS = "max_locations";
42
47
  public static final String COLUMN_NAME_TEMPLATE = "template";
@@ -50,6 +55,10 @@ public final class SQLiteConfigurationContract {
50
55
  ConfigurationEntry.COLUMN_NAME_DEBUG + INTEGER_TYPE + COMMA_SEP +
51
56
  ConfigurationEntry.COLUMN_NAME_NOTIF_TITLE + TEXT_TYPE + COMMA_SEP +
52
57
  ConfigurationEntry.COLUMN_NAME_NOTIF_TEXT + TEXT_TYPE + COMMA_SEP +
58
+ ConfigurationEntry.COLUMN_NAME_NOTIF_SYNC_TITLE + TEXT_TYPE + COMMA_SEP +
59
+ ConfigurationEntry.COLUMN_NAME_NOTIF_SYNC_TEXT + TEXT_TYPE + COMMA_SEP +
60
+ ConfigurationEntry.COLUMN_NAME_NOTIF_SYNC_COMPLETED + TEXT_TYPE + COMMA_SEP +
61
+ ConfigurationEntry.COLUMN_NAME_NOTIF_SYNC_FAILED + TEXT_TYPE + COMMA_SEP +
53
62
  ConfigurationEntry.COLUMN_NAME_NOTIF_ICON_SMALL + TEXT_TYPE + COMMA_SEP +
54
63
  ConfigurationEntry.COLUMN_NAME_NOTIF_ICON_LARGE + TEXT_TYPE + COMMA_SEP +
55
64
  ConfigurationEntry.COLUMN_NAME_NOTIF_COLOR + TEXT_TYPE + COMMA_SEP +
@@ -65,6 +74,7 @@ public final class SQLiteConfigurationContract {
65
74
  ConfigurationEntry.COLUMN_NAME_URL + TEXT_TYPE + COMMA_SEP +
66
75
  ConfigurationEntry.COLUMN_NAME_SYNC_URL + TEXT_TYPE + COMMA_SEP +
67
76
  ConfigurationEntry.COLUMN_NAME_SYNC_THRESHOLD + INTEGER_TYPE + COMMA_SEP +
77
+ ConfigurationEntry.COLUMN_NAME_SYNC_ENABLED + INTEGER_TYPE + COMMA_SEP +
68
78
  ConfigurationEntry.COLUMN_NAME_HEADERS + TEXT_TYPE + COMMA_SEP +
69
79
  ConfigurationEntry.COLUMN_NAME_MAX_LOCATIONS + INTEGER_TYPE + COMMA_SEP +
70
80
  ConfigurationEntry.COLUMN_NAME_TEMPLATE + TEXT_TYPE +
@@ -39,6 +39,10 @@ public class SQLiteConfigurationDAO implements ConfigurationDAO {
39
39
  ConfigurationEntry.COLUMN_NAME_DEBUG,
40
40
  ConfigurationEntry.COLUMN_NAME_NOTIF_TITLE,
41
41
  ConfigurationEntry.COLUMN_NAME_NOTIF_TEXT,
42
+ ConfigurationEntry.COLUMN_NAME_NOTIF_SYNC_TITLE,
43
+ ConfigurationEntry.COLUMN_NAME_NOTIF_SYNC_TEXT,
44
+ ConfigurationEntry.COLUMN_NAME_NOTIF_SYNC_COMPLETED,
45
+ ConfigurationEntry.COLUMN_NAME_NOTIF_SYNC_FAILED,
42
46
  ConfigurationEntry.COLUMN_NAME_NOTIF_ICON_LARGE,
43
47
  ConfigurationEntry.COLUMN_NAME_NOTIF_ICON_SMALL,
44
48
  ConfigurationEntry.COLUMN_NAME_NOTIF_COLOR,
@@ -54,6 +58,7 @@ public class SQLiteConfigurationDAO implements ConfigurationDAO {
54
58
  ConfigurationEntry.COLUMN_NAME_URL,
55
59
  ConfigurationEntry.COLUMN_NAME_SYNC_URL,
56
60
  ConfigurationEntry.COLUMN_NAME_SYNC_THRESHOLD,
61
+ ConfigurationEntry.COLUMN_NAME_SYNC_ENABLED,
57
62
  ConfigurationEntry.COLUMN_NAME_HEADERS,
58
63
  ConfigurationEntry.COLUMN_NAME_MAX_LOCATIONS,
59
64
  ConfigurationEntry.COLUMN_NAME_TEMPLATE
@@ -105,6 +110,16 @@ public class SQLiteConfigurationDAO implements ConfigurationDAO {
105
110
  config.setDebugging( (c.getInt(c.getColumnIndex(ConfigurationEntry.COLUMN_NAME_DEBUG)) == 1) ? true : false );
106
111
  config.setNotificationTitle(c.getString(c.getColumnIndex(ConfigurationEntry.COLUMN_NAME_NOTIF_TITLE)));
107
112
  config.setNotificationText(c.getString(c.getColumnIndex(ConfigurationEntry.COLUMN_NAME_NOTIF_TEXT)));
113
+ int idxSyncTitle = c.getColumnIndex(ConfigurationEntry.COLUMN_NAME_NOTIF_SYNC_TITLE);
114
+ if (idxSyncTitle >= 0) {
115
+ if (!c.isNull(idxSyncTitle)) config.setNotificationSyncTitle(c.getString(idxSyncTitle));
116
+ int idxSyncText = c.getColumnIndex(ConfigurationEntry.COLUMN_NAME_NOTIF_SYNC_TEXT);
117
+ if (idxSyncText >= 0 && !c.isNull(idxSyncText)) config.setNotificationSyncText(c.getString(idxSyncText));
118
+ int idxSyncCompleted = c.getColumnIndex(ConfigurationEntry.COLUMN_NAME_NOTIF_SYNC_COMPLETED);
119
+ if (idxSyncCompleted >= 0 && !c.isNull(idxSyncCompleted)) config.setNotificationSyncCompletedText(c.getString(idxSyncCompleted));
120
+ int idxSyncFailed = c.getColumnIndex(ConfigurationEntry.COLUMN_NAME_NOTIF_SYNC_FAILED);
121
+ if (idxSyncFailed >= 0 && !c.isNull(idxSyncFailed)) config.setNotificationSyncFailedText(c.getString(idxSyncFailed));
122
+ }
108
123
  config.setSmallNotificationIcon(c.getString(c.getColumnIndex(ConfigurationEntry.COLUMN_NAME_NOTIF_ICON_SMALL)));
109
124
  config.setLargeNotificationIcon(c.getString(c.getColumnIndex(ConfigurationEntry.COLUMN_NAME_NOTIF_ICON_LARGE)));
110
125
  config.setNotificationIconColor(c.getString(c.getColumnIndex(ConfigurationEntry.COLUMN_NAME_NOTIF_COLOR)));
@@ -120,6 +135,10 @@ public class SQLiteConfigurationDAO implements ConfigurationDAO {
120
135
  config.setUrl(c.getString(c.getColumnIndex(ConfigurationEntry.COLUMN_NAME_URL)));
121
136
  config.setSyncUrl(c.getString(c.getColumnIndex(ConfigurationEntry.COLUMN_NAME_SYNC_URL)));
122
137
  config.setSyncThreshold(c.getInt(c.getColumnIndex(ConfigurationEntry.COLUMN_NAME_SYNC_THRESHOLD)));
138
+ int idxSyncEnabled = c.getColumnIndex(ConfigurationEntry.COLUMN_NAME_SYNC_ENABLED);
139
+ if (idxSyncEnabled >= 0 && !c.isNull(idxSyncEnabled)) {
140
+ config.setSyncEnabled(c.getInt(idxSyncEnabled) == 1);
141
+ }
123
142
  config.setHttpHeaders(new JSONObject(c.getString(c.getColumnIndex(ConfigurationEntry.COLUMN_NAME_HEADERS))));
124
143
  config.setMaxLocations(c.getInt(c.getColumnIndex(ConfigurationEntry.COLUMN_NAME_MAX_LOCATIONS)));
125
144
  config.setTemplate(LocationTemplateFactory.fromJSONString(c.getString(c.getColumnIndex(ConfigurationEntry.COLUMN_NAME_TEMPLATE))));
@@ -136,6 +155,10 @@ public class SQLiteConfigurationDAO implements ConfigurationDAO {
136
155
  values.put(ConfigurationEntry.COLUMN_NAME_DEBUG, (config.isDebugging() == true) ? 1 : 0);
137
156
  values.put(ConfigurationEntry.COLUMN_NAME_NOTIF_TITLE, config.getNotificationTitle());
138
157
  values.put(ConfigurationEntry.COLUMN_NAME_NOTIF_TEXT, config.getNotificationText());
158
+ values.put(ConfigurationEntry.COLUMN_NAME_NOTIF_SYNC_TITLE, config.getNotificationSyncTitle());
159
+ values.put(ConfigurationEntry.COLUMN_NAME_NOTIF_SYNC_TEXT, config.getNotificationSyncText());
160
+ values.put(ConfigurationEntry.COLUMN_NAME_NOTIF_SYNC_COMPLETED, config.getNotificationSyncCompletedText());
161
+ values.put(ConfigurationEntry.COLUMN_NAME_NOTIF_SYNC_FAILED, config.getNotificationSyncFailedText());
139
162
  values.put(ConfigurationEntry.COLUMN_NAME_NOTIF_ICON_SMALL, config.getSmallNotificationIcon());
140
163
  values.put(ConfigurationEntry.COLUMN_NAME_NOTIF_ICON_LARGE, config.getLargeNotificationIcon());
141
164
  values.put(ConfigurationEntry.COLUMN_NAME_NOTIF_COLOR, config.getNotificationIconColor());
@@ -151,6 +174,7 @@ public class SQLiteConfigurationDAO implements ConfigurationDAO {
151
174
  values.put(ConfigurationEntry.COLUMN_NAME_URL, config.getUrl());
152
175
  values.put(ConfigurationEntry.COLUMN_NAME_SYNC_URL, config.getSyncUrl());
153
176
  values.put(ConfigurationEntry.COLUMN_NAME_SYNC_THRESHOLD, config.getSyncThreshold());
177
+ values.put(ConfigurationEntry.COLUMN_NAME_SYNC_ENABLED, Boolean.TRUE.equals(config.getSyncEnabled()) ? 1 : 0);
154
178
  values.put(ConfigurationEntry.COLUMN_NAME_HEADERS, new JSONObject(config.getHttpHeaders()).toString());
155
179
  values.put(ConfigurationEntry.COLUMN_NAME_MAX_LOCATIONS, config.getMaxLocations());
156
180
  values.put(ConfigurationEntry.COLUMN_NAME_TEMPLATE, config.hasTemplate() ? config.getTemplate().toString() : null);
@@ -418,6 +418,19 @@ public class SQLiteLocationDAO implements LocationDAO {
418
418
  return db.update(LocationEntry.TABLE_NAME, values, whereClause, whereArgs);
419
419
  }
420
420
 
421
+ /**
422
+ * Mark all locations pending sync (SYNC_PENDING) as deleted. Clears the sync queue without sending.
423
+ */
424
+ public int deletePendingSyncLocations() {
425
+ ContentValues values = new ContentValues();
426
+ values.put(LocationEntry.COLUMN_NAME_STATUS, BackgroundLocation.DELETED);
427
+
428
+ String whereClause = LocationEntry.COLUMN_NAME_STATUS + " = ?";
429
+ String[] whereArgs = { String.valueOf(BackgroundLocation.SYNC_PENDING) };
430
+
431
+ return db.update(LocationEntry.TABLE_NAME, values, whereClause, whereArgs);
432
+ }
433
+
421
434
  private BackgroundLocation hydrate(Cursor c) {
422
435
  BackgroundLocation l = new BackgroundLocation(c.getString(c.getColumnIndex(LocationEntry.COLUMN_NAME_PROVIDER)));
423
436
  l.setTime(c.getLong(c.getColumnIndex(LocationEntry.COLUMN_NAME_TIME)));
@@ -21,7 +21,7 @@ import static com.marianhello.bgloc.data.sqlite.SQLiteLocationContract.LocationE
21
21
  public class SQLiteOpenHelper extends android.database.sqlite.SQLiteOpenHelper {
22
22
  private static final String TAG = SQLiteOpenHelper.class.getName();
23
23
  public static final String SQLITE_DATABASE_NAME = "cordova_bg_geolocation.db";
24
- public static final int DATABASE_VERSION = 16;
24
+ public static final int DATABASE_VERSION = 18;
25
25
 
26
26
  public static final String TEXT_TYPE = " TEXT";
27
27
  public static final String INTEGER_TYPE = " INTEGER";
@@ -120,6 +120,18 @@ public class SQLiteOpenHelper extends android.database.sqlite.SQLiteOpenHelper {
120
120
  alterSql.add("UPDATE " + LocationEntry.TABLE_NAME +
121
121
  " SET " + LocationEntry.COLUMN_NAME_VERTICAL_ACCURACY + "= -1," +
122
122
  LocationEntry.COLUMN_NAME_HAS_VERTICAL_ACCURACY + "= 0");
123
+ case 16:
124
+ alterSql.add("ALTER TABLE " + ConfigurationEntry.TABLE_NAME +
125
+ " ADD COLUMN " + ConfigurationEntry.COLUMN_NAME_NOTIF_SYNC_TITLE + TEXT_TYPE);
126
+ alterSql.add("ALTER TABLE " + ConfigurationEntry.TABLE_NAME +
127
+ " ADD COLUMN " + ConfigurationEntry.COLUMN_NAME_NOTIF_SYNC_TEXT + TEXT_TYPE);
128
+ alterSql.add("ALTER TABLE " + ConfigurationEntry.TABLE_NAME +
129
+ " ADD COLUMN " + ConfigurationEntry.COLUMN_NAME_NOTIF_SYNC_COMPLETED + TEXT_TYPE);
130
+ alterSql.add("ALTER TABLE " + ConfigurationEntry.TABLE_NAME +
131
+ " ADD COLUMN " + ConfigurationEntry.COLUMN_NAME_NOTIF_SYNC_FAILED + TEXT_TYPE);
132
+ case 17:
133
+ alterSql.add("ALTER TABLE " + ConfigurationEntry.TABLE_NAME +
134
+ " ADD COLUMN " + ConfigurationEntry.COLUMN_NAME_SYNC_ENABLED + INTEGER_TYPE);
123
135
 
124
136
  break; // DO NOT FORGET TO MOVE DOWN BREAK ON DB UPGRADE!!!
125
137
  default:
@@ -40,6 +40,7 @@ public class SyncAdapter extends AbstractThreadedSyncAdapter implements HttpPost
40
40
  private NotificationManager notificationManager;
41
41
  private BatchManager batchManager;
42
42
  private boolean notificationsEnabled = true;
43
+ private volatile Config currentSyncConfig;
43
44
 
44
45
  private org.slf4j.Logger logger;
45
46
 
@@ -98,15 +99,18 @@ public class SyncAdapter extends AbstractThreadedSyncAdapter implements HttpPost
98
99
  return;
99
100
  }
100
101
 
101
- if (config == null || !config.hasValidSyncUrl()) {
102
+ if (config == null || !config.hasValidSyncUrl() || !Boolean.TRUE.equals(config.getSyncEnabled())) {
102
103
  if (config == null) {
103
104
  logger.warn("Sync skipped: no config");
105
+ } else if (!Boolean.TRUE.equals(config.getSyncEnabled())) {
106
+ logger.info("Sync skipped: sync disabled in config");
104
107
  }
105
108
  return;
106
109
  }
107
110
 
108
111
  //noinspection ConstantConditions
109
112
  notificationsEnabled = !config.hasNotificationsEnabled() || config.getNotificationsEnabled();
113
+ currentSyncConfig = config;
110
114
 
111
115
  Long batchStartMillis = System.currentTimeMillis();
112
116
  boolean isForced = (extras != null) && extras.getBoolean(ContentResolver.SYNC_EXTRAS_MANUAL, false);
@@ -156,8 +160,8 @@ public class SyncAdapter extends AbstractThreadedSyncAdapter implements HttpPost
156
160
  if (notificationsEnabled) {
157
161
  builder = new NotificationCompat.Builder(getContext(), NotificationHelper.SYNC_CHANNEL_ID);
158
162
  builder.setOngoing(true);
159
- builder.setContentTitle("Syncing locations");
160
- builder.setContentText("Sync in progress");
163
+ builder.setContentTitle(currentSyncConfig.getNotificationSyncTitle());
164
+ builder.setContentText(currentSyncConfig.getNotificationSyncText());
161
165
  builder.setSmallIcon(android.R.drawable.ic_dialog_info);
162
166
  notificationManager.notify(NOTIFICATION_ID, builder.build());
163
167
  }
@@ -186,9 +190,9 @@ public class SyncAdapter extends AbstractThreadedSyncAdapter implements HttpPost
186
190
 
187
191
  if (builder != null) {
188
192
  if (isStatusOkay) {
189
- builder.setContentText("Sync completed");
193
+ builder.setContentText(currentSyncConfig.getNotificationSyncCompletedText());
190
194
  } else {
191
- builder.setContentText("Sync failed (HTTP " + responseCode + ")");
195
+ builder.setContentText(currentSyncConfig.getNotificationSyncFailedText() + " (HTTP " + responseCode + ")");
192
196
  }
193
197
  }
194
198
 
@@ -202,7 +206,7 @@ public class SyncAdapter extends AbstractThreadedSyncAdapter implements HttpPost
202
206
  logger.warn("Error uploading locations (network/IO): {}", errMsg);
203
207
 
204
208
  if (builder != null) {
205
- builder.setContentText("Sync failed: " + errMsg);
209
+ builder.setContentText(currentSyncConfig.getNotificationSyncFailedText() + ": " + errMsg);
206
210
  }
207
211
  } finally {
208
212
  logger.info("Syncing endAt: {}", System.currentTimeMillis());
@@ -230,11 +234,12 @@ public class SyncAdapter extends AbstractThreadedSyncAdapter implements HttpPost
230
234
  public void onProgress(int progress) {
231
235
  logger.debug("Syncing progress: {} updatedAt: {}", progress, System.currentTimeMillis());
232
236
 
233
- if (notificationsEnabled) {
237
+ Config c = currentSyncConfig;
238
+ if (notificationsEnabled && c != null) {
234
239
  NotificationCompat.Builder builder = new NotificationCompat.Builder(getContext(), NotificationHelper.SYNC_CHANNEL_ID);
235
240
  builder.setOngoing(true);
236
- builder.setContentTitle("Syncing locations");
237
- builder.setContentText("Sync in progress");
241
+ builder.setContentTitle(c.getNotificationSyncTitle());
242
+ builder.setContentText(c.getNotificationSyncText());
238
243
  builder.setSmallIcon(android.R.drawable.ic_dialog_info);
239
244
  builder.setProgress(100, progress, false);
240
245
  notificationManager.notify(NOTIFICATION_ID, builder.build());
@@ -154,6 +154,20 @@ export class BackgroundGeolocationService {
154
154
  return this.ensurePlugin().forceSync(success, fail);
155
155
  }
156
156
 
157
+ clearSync(
158
+ success?: () => void,
159
+ fail?: (error: any) => void
160
+ ): Promise<void> {
161
+ return this.ensurePlugin().clearSync(success, fail);
162
+ }
163
+
164
+ getPendingSyncCount(
165
+ success?: (count: number) => void,
166
+ fail?: (error: any) => void
167
+ ): Promise<number> {
168
+ return this.ensurePlugin().getPendingSyncCount(success, fail);
169
+ }
170
+
157
171
  getConfig(
158
172
  success?: (config: any) => void,
159
173
  fail?: (error: any) => void
@@ -43,6 +43,8 @@ export declare class BackgroundGeolocationService {
43
43
  deleteAllLocations(success?: () => void, fail?: (error: any) => void): Promise<void>;
44
44
  switchMode(modeId: number, success?: () => void, fail?: (error: any) => void): Promise<void>;
45
45
  forceSync(success?: () => void, fail?: (error: any) => void): Promise<void>;
46
+ clearSync(success?: () => void, fail?: (error: any) => void): Promise<void>;
47
+ getPendingSyncCount(success?: (count: number) => void, fail?: (error: any) => void): Promise<number>;
46
48
  getConfig(success?: (config: any) => void, fail?: (error: any) => void): Promise<any>;
47
49
  getLogEntries(limit: number, fromId: number, minLevel: string, success?: (entries: any[]) => void, fail?: (error: any) => void): Promise<any[]>;
48
50
  removeAllListeners(event?: string): void;
@@ -91,6 +91,12 @@ export class BackgroundGeolocationService {
91
91
  forceSync(success, fail) {
92
92
  return this.ensurePlugin().forceSync(success, fail);
93
93
  }
94
+ clearSync(success, fail) {
95
+ return this.ensurePlugin().clearSync(success, fail);
96
+ }
97
+ getPendingSyncCount(success, fail) {
98
+ return this.ensurePlugin().getPendingSyncCount(success, fail);
99
+ }
94
100
  getConfig(success, fail) {
95
101
  return this.ensurePlugin().getConfig(success, fail);
96
102
  }
@@ -145,4 +151,4 @@ export class BackgroundGeolocationService {
145
151
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: BackgroundGeolocationService, decorators: [{
146
152
  type: Injectable
147
153
  }] });
148
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFja2dyb3VuZC1nZW9sb2NhdGlvbi5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vYmFja2dyb3VuZC1nZW9sb2NhdGlvbi5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsY0FBYyxFQUFFLE1BQU0sZUFBZSxDQUFDOztBQUUzRDs7OztHQUlHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sOEJBQThCLEdBQUcsSUFBSSxjQUFjLENBQzlELDhCQUE4QixDQUMvQixDQUFDO0FBRUY7Ozs7Ozs7Ozs7R0FVRztBQUVILE1BQU0sT0FBTyw0QkFBNEI7SUFFdkMsOERBQThEO0lBQzlELElBQVksTUFBTTtRQUNoQixJQUFJLE9BQU8sTUFBTSxLQUFLLFdBQVc7WUFBRSxPQUFPLElBQUksQ0FBQztRQUMvQyxPQUFRLE1BQWMsQ0FBQyxxQkFBcUIsSUFBSSxJQUFJLENBQUM7SUFDdkQsQ0FBQztJQUVPLFlBQVk7UUFDbEIsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztRQUN0QixJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDUCxNQUFNLElBQUksS0FBSyxDQUNiLHdJQUF3SSxDQUN6SSxDQUFDO1FBQ0osQ0FBQztRQUNELE9BQU8sQ0FBQyxDQUFDO0lBQ1gsQ0FBQztJQUVELFNBQVMsQ0FBQyxPQUFZLEVBQUUsT0FBb0IsRUFBRSxJQUF5QjtRQUNyRSxPQUFPLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQyxTQUFTLENBQUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQztJQUMvRCxDQUFDO0lBRUQsS0FBSztRQUNILE9BQU8sSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQ3JDLENBQUM7SUFFRCxJQUFJO1FBQ0YsT0FBTyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDcEMsQ0FBQztJQUVE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QUNMLFNBQVMsQ0FBQyxFQUF3QjtvQkFDaEMsTUFBTSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBRSxNQUFNLENBQUMsRUFBRSxDQUFDLFNBQVMsRUFBRSxFQUFFLENBQTZCLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztvQkFDNUUsT0FBTyxFQUFFLFdBQVcsS0FBSyxDQUFDLEVBQUUsTUFBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO2dCQUM5QyxDQUFDO2dCQUNELFdBQVcsS0FBSyxHQUFHLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7YUFDbEMsQ0FBQztRQUNKLENBQUM7UUFDRCxNQUFNLE9BQU8sR0FBRyxNQUFNLENBQUMsRUFBRSxDQUFDLFNBQVMsQ0FBK0YsQ0FBQztRQUNuSSxPQUFPO1lBQ0wsU0FBUyxDQUFDLEVBQXdCO2dCQUNoQyxPQUFPLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxDQUFDO2dCQUN0QixPQUFPLEVBQUUsV0FBVyxLQUFLLE9BQU8sQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUN4RCxDQUFDO1lBQ0QsV0FBVyxLQUFrQyxDQUFDO1NBQy9DLENBQUM7SUFDSixDQUFDO0lBRUQsb0ZBQW9GO0lBQ3BGLElBQUksTUFBTTtRQUNSLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQztJQUNyQixDQUFDO3dHQTNNVSw0QkFBNEI7NEdBQTVCLDRCQUE0Qjs7NEZBQTVCLDRCQUE0QjtrQkFEeEMsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUsIEluamVjdGlvblRva2VuIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbi8qKlxuICogVG9rZW4gdXNlZCB0byBwcm92aWRlIEJhY2tncm91bmRHZW9sb2NhdGlvblNlcnZpY2Ugd2l0aG91dCB0cmlnZ2VyaW5nIEpJVC5cbiAqIFRoZSBtb2R1bGUgcHJvdmlkZXMgdGhpcyB0b2tlbiB3aXRoIHVzZUZhY3Rvcnk7IHRoZSBjbGFzcyBpcyBhbGlhc2VkIHZpYSB1c2VFeGlzdGluZ1xuICogc28geW91IHN0aWxsIGluamVjdCBjb25zdHJ1Y3Rvcihwcml2YXRlIGJnOiBCYWNrZ3JvdW5kR2VvbG9jYXRpb25TZXJ2aWNlKSB7fS5cbiAqL1xuZXhwb3J0IGNvbnN0IEJBQ0tHUk9VTkRfR0VPTE9DQVRJT05fU0VSVklDRSA9IG5ldyBJbmplY3Rpb25Ub2tlbjxCYWNrZ3JvdW5kR2VvbG9jYXRpb25TZXJ2aWNlPihcbiAgJ0JhY2tncm91bmRHZW9sb2NhdGlvblNlcnZpY2UnXG4pO1xuXG4vKipcbiAqIEFuZ3VsYXIgc2VydmljZSB0aGF0IHdyYXBzIHRoZSBDb3Jkb3ZhL0NhcGFjaXRvciBCYWNrZ3JvdW5kR2VvbG9jYXRpb24gcGx1Z2luLlxuICogVXNlIGRlcGVuZGVuY3kgaW5qZWN0aW9uIGluc3RlYWQgb2YgdGhlIGdsb2JhbCBCYWNrZ3JvdW5kR2VvbG9jYXRpb24gb2JqZWN0LlxuICpcbiAqIFRoZSBuYXRpdmUgcGx1Z2luIG11c3QgYmUgaW5zdGFsbGVkIGFuZCBhdmFpbGFibGUgKGUuZy4gYWZ0ZXIgZGV2aWNlcmVhZHkpLlxuICogVHlwZXMgKENvbmZpZ3VyZU9wdGlvbnMsIExvY2F0aW9uLCBldGMuKSBjYW4gYmUgaW1wb3J0ZWQgZnJvbVxuICogJ0Bqb3N1ZWxtbS9jb3Jkb3ZhLWJhY2tncm91bmQtZ2VvbG9jYXRpb24nLlxuICpcbiAqIFByb3ZpZGVkIHZpYSBCYWNrZ3JvdW5kR2VvbG9jYXRpb25Nb2R1bGUgdXNpbmcgYW4gSW5qZWN0aW9uVG9rZW4gKyB1c2VGYWN0b3J5XG4gKiBzbyBBT1QgYnVpbGRzIG5ldmVyIG5lZWQgdGhlIEpJVCBjb21waWxlciBmb3IgdGhpcyBjbGFzcy5cbiAqL1xuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIEJhY2tncm91bmRHZW9sb2NhdGlvblNlcnZpY2Uge1xuXG4gIC8qKiBSZXR1cm5zIHRoZSBnbG9iYWwgcGx1Z2luIGluc3RhbmNlIChDb3Jkb3ZhL0NhcGFjaXRvcikuICovXG4gIHByaXZhdGUgZ2V0IHBsdWdpbigpOiBhbnkge1xuICAgIGlmICh0eXBlb2Ygd2luZG93ID09PSAndW5kZWZpbmVkJykgcmV0dXJuIG51bGw7XG4gICAgcmV0dXJuICh3aW5kb3cgYXMgYW55KS5CYWNrZ3JvdW5kR2VvbG9jYXRpb24gfHwgbnVsbDtcbiAgfVxuXG4gIHByaXZhdGUgZW5zdXJlUGx1Z2luKCk6IGFueSB7XG4gICAgY29uc3QgcCA9IHRoaXMucGx1Z2luO1xuICAgIGlmICghcCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAnQmFja2dyb3VuZEdlb2xvY2F0aW9uIGlzIG5vdCBhdmFpbGFibGUuIEVuc3VyZSB0aGUgcGx1Z2luIGlzIGluc3RhbGxlZCBhbmQgdGhlIGFwcCBpcyBydW5uaW5nIGluIGEgbmF0aXZlIGNvbnRleHQgKENvcmRvdmEvQ2FwYWNpdG9yKS4nXG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gcDtcbiAgfVxuXG4gIGNvbmZpZ3VyZShvcHRpb25zOiBhbnksIHN1Y2Nlc3M/OiAoKSA9PiB2b2lkLCBmYWlsPzogKGVycjogYW55KSA9PiB2b2lkKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIHRoaXMuZW5zdXJlUGx1Z2luKCkuY29uZmlndXJlKG9wdGlvbnMsIHN1Y2Nlc3MsIGZhaWwpO1xuICB9XG5cbiAgc3RhcnQoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIHRoaXMuZW5zdXJlUGx1Z2luKCkuc3RhcnQoKTtcbiAgfVxuXG4gIHN0b3AoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIHRoaXMuZW5zdXJlUGx1Z2luKCkuc3RvcCgpO1xuICB9XG5cbiAgLyoqIEluZm9ybSB0aGUgbmF0aXZlIHBsdWdpbiB0aGF0IHRoZSBiYWNrZ3JvdW5kIHRhc2sgbWF5IGNvbXBsZXRlIChpT1MpLiBDYWxsIGFmdGVyIGhhbmRsaW5nIGxvY2F0aW9uL3N0YXRpb25hcnkgaW4gdGhlIGNhbGxiYWNrLiAqL1xuICBmaW5pc2goKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIHRoaXMuZW5zdXJlUGx1Z2luKCkuZmluaXNoKCk7XG4gIH1cblxuICAvKiogRm9yY2UgdGhlIHBsdWdpbiB0byBlbnRlciBcIm1vdmluZ1wiIG9yIFwic3RhdGlvbmFyeVwiIHN0YXRlIChpT1MpLiAqL1xuICBjaGFuZ2VQYWNlKGlzTW92aW5nOiBib29sZWFuKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIHRoaXMuZW5zdXJlUGx1Z2luKCkuY2hhbmdlUGFjZShpc01vdmluZyk7XG4gIH1cblxuICBnZXRDdXJyZW50TG9jYXRpb24oXG4gICAgc3VjY2Vzcz86IChsb2NhdGlvbjogYW55KSA9PiB2b2lkLFxuICAgIGZhaWw/OiAoZXJyb3I6IGFueSkgPT4gdm9pZCxcbiAgICBvcHRpb25zPzogYW55XG4gICk6IFByb21pc2U8YW55PiB7XG4gICAgcmV0dXJuIHRoaXMuZW5zdXJlUGx1Z2luKCkuZ2V0Q3VycmVudExvY2F0aW9uKHN1Y2Nlc3MsIGZhaWwsIG9wdGlvbnMpO1xuICB9XG5cbiAgZ2V0U3RhdGlvbmFyeUxvY2F0aW9uKFxuICAgIHN1Y2Nlc3M/OiAobG9jYXRpb246IGFueSkgPT4gdm9pZCxcbiAgICBmYWlsPzogKGVycm9yOiBhbnkpID0+IHZvaWRcbiAgKTogUHJvbWlzZTxhbnk+IHtcbiAgICByZXR1cm4gdGhpcy5lbnN1cmVQbHVnaW4oKS5nZXRTdGF0aW9uYXJ5TG9jYXRpb24oc3VjY2VzcywgZmFpbCk7XG4gIH1cblxuICBjaGVja1N0YXR1cyhcbiAgICBzdWNjZXNzPzogKHN0YXR1czogYW55KSA9PiB2b2lkLFxuICAgIGZhaWw/OiAoZXJyb3I6IGFueSkgPT4gdm9pZFxuICApOiBQcm9taXNlPGFueT4ge1xuICAgIHJldHVybiB0aGlzLmVuc3VyZVBsdWdpbigpLmNoZWNrU3RhdHVzKHN1Y2Nlc3MsIGZhaWwpO1xuICB9XG5cbiAgc2hvd0FwcFNldHRpbmdzKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiB0aGlzLmVuc3VyZVBsdWdpbigpLnNob3dBcHBTZXR0aW5ncygpO1xuICB9XG5cbiAgLyoqIE9wZW4gYXBwIHNldHRpbmdzIChhbGlhcyBmb3Igc2hvd0FwcFNldHRpbmdzKS4gKi9cbiAgb3BlblNldHRpbmdzKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiB0aGlzLmVuc3VyZVBsdWdpbigpLm9wZW5TZXR0aW5ncygpO1xuICB9XG5cbiAgc2hvd0xvY2F0aW9uU2V0dGluZ3MoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIHRoaXMuZW5zdXJlUGx1Z2luKCkuc2hvd0xvY2F0aW9uU2V0dGluZ3MoKTtcbiAgfVxuXG4gIGdldFBsdWdpblZlcnNpb24oXG4gICAgc3VjY2Vzcz86ICh2ZXJzaW9uOiBzdHJpbmcpID0+IHZvaWQsXG4gICAgZmFpbD86IChlcnJvcjogYW55KSA9PiB2b2lkXG4gICk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgcmV0dXJuIHRoaXMuZW5zdXJlUGx1Z2luKCkuZ2V0UGx1Z2luVmVyc2lvbihzdWNjZXNzLCBmYWlsKTtcbiAgfVxuXG4gIGdldExvY2F0aW9ucyhcbiAgICBzdWNjZXNzPzogKGxvY2F0aW9uczogYW55W10pID0+IHZvaWQsXG4gICAgZmFpbD86IChlcnJvcjogYW55KSA9PiB2b2lkXG4gICk6IFByb21pc2U8YW55W10+IHtcbiAgICByZXR1cm4gdGhpcy5lbnN1cmVQbHVnaW4oKS5nZXRMb2NhdGlvbnMoc3VjY2VzcywgZmFpbCk7XG4gIH1cblxuICBnZXRWYWxpZExvY2F0aW9ucyhcbiAgICBzdWNjZXNzPzogKGxvY2F0aW9uczogYW55W10pID0+IHZvaWQsXG4gICAgZmFpbD86IChlcnJvcjogYW55KSA9PiB2b2lkXG4gICk6IFByb21pc2U8YW55W10+IHtcbiAgICByZXR1cm4gdGhpcy5lbnN1cmVQbHVnaW4oKS5nZXRWYWxpZExvY2F0aW9ucyhzdWNjZXNzLCBmYWlsKTtcbiAgfVxuXG4gIGdldFZhbGlkTG9jYXRpb25zQW5kRGVsZXRlKFxuICAgIHN1Y2Nlc3M/OiAobG9jYXRpb25zOiBhbnlbXSkgPT4gdm9pZCxcbiAgICBmYWlsPzogKGVycm9yOiBhbnkpID0+IHZvaWRcbiAgKTogUHJvbWlzZTxhbnlbXT4ge1xuICAgIHJldHVybiB0aGlzLmVuc3VyZVBsdWdpbigpLmdldFZhbGlkTG9jYXRpb25zQW5kRGVsZXRlKHN1Y2Nlc3MsIGZhaWwpO1xuICB9XG5cbiAgZGVsZXRlTG9jYXRpb24oXG4gICAgbG9jYXRpb25JZDogbnVtYmVyLFxuICAgIHN1Y2Nlc3M/OiAoKSA9PiB2b2lkLFxuICAgIGZhaWw/OiAoZXJyb3I6IGFueSkgPT4gdm9pZFxuICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gdGhpcy5lbnN1cmVQbHVnaW4oKS5kZWxldGVMb2NhdGlvbihsb2NhdGlvbklkLCBzdWNjZXNzLCBmYWlsKTtcbiAgfVxuXG4gIGRlbGV0ZUFsbExvY2F0aW9ucyhcbiAgICBzdWNjZXNzPzogKCkgPT4gdm9pZCxcbiAgICBmYWlsPzogKGVycm9yOiBhbnkpID0+IHZvaWRcbiAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIHRoaXMuZW5zdXJlUGx1Z2luKCkuZGVsZXRlQWxsTG9jYXRpb25zKHN1Y2Nlc3MsIGZhaWwpO1xuICB9XG5cbiAgc3dpdGNoTW9kZShcbiAgICBtb2RlSWQ6IG51bWJlcixcbiAgICBzdWNjZXNzPzogKCkgPT4gdm9pZCxcbiAgICBmYWlsPzogKGVycm9yOiBhbnkpID0+IHZvaWRcbiAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIHRoaXMuZW5zdXJlUGx1Z2luKCkuc3dpdGNoTW9kZShtb2RlSWQsIHN1Y2Nlc3MsIGZhaWwpO1xuICB9XG5cbiAgZm9yY2VTeW5jKFxuICAgIHN1Y2Nlc3M/OiAoKSA9PiB2b2lkLFxuICAgIGZhaWw/OiAoZXJyb3I6IGFueSkgPT4gdm9pZFxuICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gdGhpcy5lbnN1cmVQbHVnaW4oKS5mb3JjZVN5bmMoc3VjY2VzcywgZmFpbCk7XG4gIH1cblxuICBnZXRDb25maWcoXG4gICAgc3VjY2Vzcz86IChjb25maWc6IGFueSkgPT4gdm9pZCxcbiAgICBmYWlsPzogKGVycm9yOiBhbnkpID0+IHZvaWRcbiAgKTogUHJvbWlzZTxhbnk+IHtcbiAgICByZXR1cm4gdGhpcy5lbnN1cmVQbHVnaW4oKS5nZXRDb25maWcoc3VjY2VzcywgZmFpbCk7XG4gIH1cblxuICBnZXRMb2dFbnRyaWVzKFxuICAgIGxpbWl0OiBudW1iZXIsXG4gICAgZnJvbUlkOiBudW1iZXIsXG4gICAgbWluTGV2ZWw6IHN0cmluZyxcbiAgICBzdWNjZXNzPzogKGVudHJpZXM6IGFueVtdKSA9PiB2b2lkLFxuICAgIGZhaWw/OiAoZXJyb3I6IGFueSkgPT4gdm9pZFxuICApOiBQcm9taXNlPGFueVtdPiB7XG4gICAgcmV0dXJuIHRoaXMuZW5zdXJlUGx1Z2luKCkuZ2V0TG9nRW50cmllcyhsaW1pdCwgZnJvbUlkLCBtaW5MZXZlbCwgc3VjY2VzcywgZmFpbCk7XG4gIH1cblxuICByZW1vdmVBbGxMaXN0ZW5lcnMoZXZlbnQ/OiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLmVuc3VyZVBsdWdpbigpLnJlbW92ZUFsbExpc3RlbmVycyhldmVudCk7XG4gIH1cblxuICBzdGFydFRhc2soXG4gICAgc3VjY2Vzcz86ICh0YXNrS2V5OiBudW1iZXIpID0+IHZvaWQsXG4gICAgZmFpbD86IChlcnJvcjogYW55KSA9PiB2b2lkXG4gICk6IFByb21pc2U8bnVtYmVyPiB7XG4gICAgcmV0dXJuIHRoaXMuZW5zdXJlUGx1Z2luKCkuc3RhcnRUYXNrKHN1Y2Nlc3MsIGZhaWwpO1xuICB9XG5cbiAgZW5kVGFzayhcbiAgICB0YXNrS2V5OiBudW1iZXIsXG4gICAgc3VjY2Vzcz86ICgpID0+IHZvaWQsXG4gICAgZmFpbD86IChlcnJvcjogYW55KSA9PiB2b2lkXG4gICk6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiB0aGlzLmVuc3VyZVBsdWdpbigpLmVuZFRhc2sodGFza0tleSwgc3VjY2VzcywgZmFpbCk7XG4gIH1cblxuICBoZWFkbGVzc1Rhc2sodGFzazogKGV2ZW50OiBhbnkpID0+IHZvaWQpOiB2b2lkIHtcbiAgICB0aGlzLmVuc3VyZVBsdWdpbigpLmhlYWRsZXNzVGFzayh0YXNrKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWdpc3RlciBhbiBldmVudCBsaXN0ZW5lci4gQ29tcGF0aWJsZSB3aXRoIEF3ZXNvbWUtc3R5bGUgdXNhZ2U6XG4gICAqIC5vbihCYWNrZ3JvdW5kR2VvbG9jYXRpb25FdmVudHMuZXJyb3IpLnN1YnNjcmliZSgoZXJyKSA9PiAuLi4pIOKAlCByZXR1cm5zIHN1YnNjcmlwdGlvbiB3aXRoIC51bnN1YnNjcmliZSgpLlxuICAgKiAub24oJ2xvY2F0aW9uJywgKGxvYykgPT4gLi4uKSDigJQgYWxzbyBzdXBwb3J0ZWQ7IHJldHVybmVkIG9iamVjdCBoYXMgLnVuc3Vic2NyaWJlKCkuXG4gICAqL1xuICBvbihldmVudE5hbWU6IHN0cmluZywgY2FsbGJhY2s/OiAodmFsdWU6IGFueSkgPT4gdm9pZCk6IHsgc3Vic2NyaWJlKGNiOiAodmFsdWU6IGFueSkgPT4gdm9pZCk6IHsgdW5zdWJzY3JpYmUoKTogdm9pZCB9OyB1bnN1YnNjcmliZSgpOiB2b2lkIH0ge1xuICAgIGNvbnN0IHBsdWdpbiA9IHRoaXMuZW5zdXJlUGx1Z2luKCk7XG4gICAgaWYgKGNhbGxiYWNrICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnN0IHN1YiA9IHBsdWdpbi5vbihldmVudE5hbWUsIGNhbGxiYWNrKSBhcyB7IHJlbW92ZT86ICgpID0+IHZvaWQgfTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHN1YnNjcmliZShjYjogKHZhbHVlOiBhbnkpID0+IHZvaWQpIHtcbiAgICAgICAgICBjb25zdCBzID0gY2IgPyAocGx1Z2luLm9uKGV2ZW50TmFtZSwgY2IpIGFzIHsgcmVtb3ZlPzogKCkgPT4gdm9pZCB9KSA6IG51bGw7XG4gICAgICAgICAgcmV0dXJuIHsgdW5zdWJzY3JpYmUoKSB7IHM/LnJlbW92ZT8uKCk7IH0gfTtcbiAgICAgICAgfSxcbiAgICAgICAgdW5zdWJzY3JpYmUoKSB7IHN1Yi5yZW1vdmU/LigpOyB9XG4gICAgICB9O1xuICAgIH1cbiAgICBjb25zdCBjaGFubmVsID0gcGx1Z2luLm9uKGV2ZW50TmFtZSkgYXMgeyBzdWJzY3JpYmU6IChjYjogKHY6IGFueSkgPT4gdm9pZCkgPT4gdm9pZDsgdW5zdWJzY3JpYmU6IChjYjogKHY6IGFueSkgPT4gdm9pZCkgPT4gdm9pZCB9O1xuICAgIHJldHVybiB7XG4gICAgICBzdWJzY3JpYmUoY2I6ICh2YWx1ZTogYW55KSA9PiB2b2lkKSB7XG4gICAgICAgIGNoYW5uZWwuc3Vic2NyaWJlKGNiKTtcbiAgICAgICAgcmV0dXJuIHsgdW5zdWJzY3JpYmUoKSB7IGNoYW5uZWwudW5zdWJzY3JpYmUoY2IpOyB9IH07XG4gICAgICB9LFxuICAgICAgdW5zdWJzY3JpYmUoKSB7IC8qIG5vLW9wIHdoZW4gbm8gY2FsbGJhY2sgKi8gfVxuICAgIH07XG4gIH1cblxuICAvKiogQ29udmVuaWVuY2U6IGFjY2VzcyBwbHVnaW4gY29uc3RhbnRzIChlLmcuIEFDVElWSVRZX1BST1ZJREVSLCBISUdIX0FDQ1VSQUNZKS4gKi9cbiAgZ2V0IG5hdGl2ZSgpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLnBsdWdpbjtcbiAgfVxufVxuIl19
154
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFja2dyb3VuZC1nZW9sb2NhdGlvbi5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vYmFja2dyb3VuZC1nZW9sb2NhdGlvbi5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsY0FBYyxFQUFFLE1BQU0sZUFBZSxDQUFDOztBQUUzRDs7OztHQUlHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sOEJBQThCLEdBQUcsSUFBSSxjQUFjLENBQzlELDhCQUE4QixDQUMvQixDQUFDO0FBRUY7Ozs7Ozs7Ozs7R0FVRztBQUVILE1BQU0sT0FBTyw0QkFBNEI7SUFFdkMsOERBQThEO0lBQzlELElBQVksTUFBTTtRQUNoQixJQUFJLE9BQU8sTUFBTSxLQUFLLFdBQVc7WUFBRSxPQUFPLElBQUksQ0FBQztRQUMvQyxPQUFRLE1BQWMsQ0FBQyxxQkFBcUIsSUFBSSxJQUFJLENBQUM7SUFDdkQsQ0FBQztJQUVPLFlBQVk7UUFDbEIsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztRQUN0QixJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDUCxNQUFNLElBQUksS0FBSyxDQUNiLHdJQUF3SSxDQUN6SSxDQUFDO1FBQ0osQ0FBQztRQUNELE9BQU8sQ0FBQyxDQUFDO0lBQ1gsQ0FBQztJQUVELFNBQVMsQ0FBQyxPQUFZLEVBQUUsT0FBb0IsRUFBRSxJQUF5QjtRQUNyRSxPQUFPLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQyxTQUFTLENBQUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQztJQUMvRCxDQUFDO0lBRUQsS0FBSztRQUNILE9BQU8sSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQ3JDLENBQUM7SUFFRCxJQUFJO1FBQ0YsT0FBTyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDcEMsQ0FBQztJQUVE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QkFBNEI7a0JBRHhDLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlLCBJbmplY3Rpb25Ub2tlbiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG4vKipcbiAqIFRva2VuIHVzZWQgdG8gcHJvdmlkZSBCYWNrZ3JvdW5kR2VvbG9jYXRpb25TZXJ2aWNlIHdpdGhvdXQgdHJpZ2dlcmluZyBKSVQuXG4gKiBUaGUgbW9kdWxlIHByb3ZpZGVzIHRoaXMgdG9rZW4gd2l0aCB1c2VGYWN0b3J5OyB0aGUgY2xhc3MgaXMgYWxpYXNlZCB2aWEgdXNlRXhpc3RpbmdcbiAqIHNvIHlvdSBzdGlsbCBpbmplY3QgY29uc3RydWN0b3IocHJpdmF0ZSBiZzogQmFja2dyb3VuZEdlb2xvY2F0aW9uU2VydmljZSkge30uXG4gKi9cbmV4cG9ydCBjb25zdCBCQUNLR1JPVU5EX0dFT0xPQ0FUSU9OX1NFUlZJQ0UgPSBuZXcgSW5qZWN0aW9uVG9rZW48QmFja2dyb3VuZEdlb2xvY2F0aW9uU2VydmljZT4oXG4gICdCYWNrZ3JvdW5kR2VvbG9jYXRpb25TZXJ2aWNlJ1xuKTtcblxuLyoqXG4gKiBBbmd1bGFyIHNlcnZpY2UgdGhhdCB3cmFwcyB0aGUgQ29yZG92YS9DYXBhY2l0b3IgQmFja2dyb3VuZEdlb2xvY2F0aW9uIHBsdWdpbi5cbiAqIFVzZSBkZXBlbmRlbmN5IGluamVjdGlvbiBpbnN0ZWFkIG9mIHRoZSBnbG9iYWwgQmFja2dyb3VuZEdlb2xvY2F0aW9uIG9iamVjdC5cbiAqXG4gKiBUaGUgbmF0aXZlIHBsdWdpbiBtdXN0IGJlIGluc3RhbGxlZCBhbmQgYXZhaWxhYmxlIChlLmcuIGFmdGVyIGRldmljZXJlYWR5KS5cbiAqIFR5cGVzIChDb25maWd1cmVPcHRpb25zLCBMb2NhdGlvbiwgZXRjLikgY2FuIGJlIGltcG9ydGVkIGZyb21cbiAqICdAam9zdWVsbW0vY29yZG92YS1iYWNrZ3JvdW5kLWdlb2xvY2F0aW9uJy5cbiAqXG4gKiBQcm92aWRlZCB2aWEgQmFja2dyb3VuZEdlb2xvY2F0aW9uTW9kdWxlIHVzaW5nIGFuIEluamVjdGlvblRva2VuICsgdXNlRmFjdG9yeVxuICogc28gQU9UIGJ1aWxkcyBuZXZlciBuZWVkIHRoZSBKSVQgY29tcGlsZXIgZm9yIHRoaXMgY2xhc3MuXG4gKi9cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBCYWNrZ3JvdW5kR2VvbG9jYXRpb25TZXJ2aWNlIHtcblxuICAvKiogUmV0dXJucyB0aGUgZ2xvYmFsIHBsdWdpbiBpbnN0YW5jZSAoQ29yZG92YS9DYXBhY2l0b3IpLiAqL1xuICBwcml2YXRlIGdldCBwbHVnaW4oKTogYW55IHtcbiAgICBpZiAodHlwZW9mIHdpbmRvdyA9PT0gJ3VuZGVmaW5lZCcpIHJldHVybiBudWxsO1xuICAgIHJldHVybiAod2luZG93IGFzIGFueSkuQmFja2dyb3VuZEdlb2xvY2F0aW9uIHx8IG51bGw7XG4gIH1cblxuICBwcml2YXRlIGVuc3VyZVBsdWdpbigpOiBhbnkge1xuICAgIGNvbnN0IHAgPSB0aGlzLnBsdWdpbjtcbiAgICBpZiAoIXApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgJ0JhY2tncm91bmRHZW9sb2NhdGlvbiBpcyBub3QgYXZhaWxhYmxlLiBFbnN1cmUgdGhlIHBsdWdpbiBpcyBpbnN0YWxsZWQgYW5kIHRoZSBhcHAgaXMgcnVubmluZyBpbiBhIG5hdGl2ZSBjb250ZXh0IChDb3Jkb3ZhL0NhcGFjaXRvcikuJ1xuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIHA7XG4gIH1cblxuICBjb25maWd1cmUob3B0aW9uczogYW55LCBzdWNjZXNzPzogKCkgPT4gdm9pZCwgZmFpbD86IChlcnI6IGFueSkgPT4gdm9pZCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiB0aGlzLmVuc3VyZVBsdWdpbigpLmNvbmZpZ3VyZShvcHRpb25zLCBzdWNjZXNzLCBmYWlsKTtcbiAgfVxuXG4gIHN0YXJ0KCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiB0aGlzLmVuc3VyZVBsdWdpbigpLnN0YXJ0KCk7XG4gIH1cblxuICBzdG9wKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiB0aGlzLmVuc3VyZVBsdWdpbigpLnN0b3AoKTtcbiAgfVxuXG4gIC8qKiBJbmZvcm0gdGhlIG5hdGl2ZSBwbHVnaW4gdGhhdCB0aGUgYmFja2dyb3VuZCB0YXNrIG1heSBjb21wbGV0ZSAoaU9TKS4gQ2FsbCBhZnRlciBoYW5kbGluZyBsb2NhdGlvbi9zdGF0aW9uYXJ5IGluIHRoZSBjYWxsYmFjay4gKi9cbiAgZmluaXNoKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiB0aGlzLmVuc3VyZVBsdWdpbigpLmZpbmlzaCgpO1xuICB9XG5cbiAgLyoqIEZvcmNlIHRoZSBwbHVnaW4gdG8gZW50ZXIgXCJtb3ZpbmdcIiBvciBcInN0YXRpb25hcnlcIiBzdGF0ZSAoaU9TKS4gKi9cbiAgY2hhbmdlUGFjZShpc01vdmluZzogYm9vbGVhbik6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiB0aGlzLmVuc3VyZVBsdWdpbigpLmNoYW5nZVBhY2UoaXNNb3ZpbmcpO1xuICB9XG5cbiAgZ2V0Q3VycmVudExvY2F0aW9uKFxuICAgIHN1Y2Nlc3M/OiAobG9jYXRpb246IGFueSkgPT4gdm9pZCxcbiAgICBmYWlsPzogKGVycm9yOiBhbnkpID0+IHZvaWQsXG4gICAgb3B0aW9ucz86IGFueVxuICApOiBQcm9taXNlPGFueT4ge1xuICAgIHJldHVybiB0aGlzLmVuc3VyZVBsdWdpbigpLmdldEN1cnJlbnRMb2NhdGlvbihzdWNjZXNzLCBmYWlsLCBvcHRpb25zKTtcbiAgfVxuXG4gIGdldFN0YXRpb25hcnlMb2NhdGlvbihcbiAgICBzdWNjZXNzPzogKGxvY2F0aW9uOiBhbnkpID0+IHZvaWQsXG4gICAgZmFpbD86IChlcnJvcjogYW55KSA9PiB2b2lkXG4gICk6IFByb21pc2U8YW55PiB7XG4gICAgcmV0dXJuIHRoaXMuZW5zdXJlUGx1Z2luKCkuZ2V0U3RhdGlvbmFyeUxvY2F0aW9uKHN1Y2Nlc3MsIGZhaWwpO1xuICB9XG5cbiAgY2hlY2tTdGF0dXMoXG4gICAgc3VjY2Vzcz86IChzdGF0dXM6IGFueSkgPT4gdm9pZCxcbiAgICBmYWlsPzogKGVycm9yOiBhbnkpID0+IHZvaWRcbiAgKTogUHJvbWlzZTxhbnk+IHtcbiAgICByZXR1cm4gdGhpcy5lbnN1cmVQbHVnaW4oKS5jaGVja1N0YXR1cyhzdWNjZXNzLCBmYWlsKTtcbiAgfVxuXG4gIHNob3dBcHBTZXR0aW5ncygpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gdGhpcy5lbnN1cmVQbHVnaW4oKS5zaG93QXBwU2V0dGluZ3MoKTtcbiAgfVxuXG4gIC8qKiBPcGVuIGFwcCBzZXR0aW5ncyAoYWxpYXMgZm9yIHNob3dBcHBTZXR0aW5ncykuICovXG4gIG9wZW5TZXR0aW5ncygpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gdGhpcy5lbnN1cmVQbHVnaW4oKS5vcGVuU2V0dGluZ3MoKTtcbiAgfVxuXG4gIHNob3dMb2NhdGlvblNldHRpbmdzKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiB0aGlzLmVuc3VyZVBsdWdpbigpLnNob3dMb2NhdGlvblNldHRpbmdzKCk7XG4gIH1cblxuICBnZXRQbHVnaW5WZXJzaW9uKFxuICAgIHN1Y2Nlc3M/OiAodmVyc2lvbjogc3RyaW5nKSA9PiB2b2lkLFxuICAgIGZhaWw/OiAoZXJyb3I6IGFueSkgPT4gdm9pZFxuICApOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIHJldHVybiB0aGlzLmVuc3VyZVBsdWdpbigpLmdldFBsdWdpblZlcnNpb24oc3VjY2VzcywgZmFpbCk7XG4gIH1cblxuICBnZXRMb2NhdGlvbnMoXG4gICAgc3VjY2Vzcz86IChsb2NhdGlvbnM6IGFueVtdKSA9PiB2b2lkLFxuICAgIGZhaWw/OiAoZXJyb3I6IGFueSkgPT4gdm9pZFxuICApOiBQcm9taXNlPGFueVtdPiB7XG4gICAgcmV0dXJuIHRoaXMuZW5zdXJlUGx1Z2luKCkuZ2V0TG9jYXRpb25zKHN1Y2Nlc3MsIGZhaWwpO1xuICB9XG5cbiAgZ2V0VmFsaWRMb2NhdGlvbnMoXG4gICAgc3VjY2Vzcz86IChsb2NhdGlvbnM6IGFueVtdKSA9PiB2b2lkLFxuICAgIGZhaWw/OiAoZXJyb3I6IGFueSkgPT4gdm9pZFxuICApOiBQcm9taXNlPGFueVtdPiB7XG4gICAgcmV0dXJuIHRoaXMuZW5zdXJlUGx1Z2luKCkuZ2V0VmFsaWRMb2NhdGlvbnMoc3VjY2VzcywgZmFpbCk7XG4gIH1cblxuICBnZXRWYWxpZExvY2F0aW9uc0FuZERlbGV0ZShcbiAgICBzdWNjZXNzPzogKGxvY2F0aW9uczogYW55W10pID0+IHZvaWQsXG4gICAgZmFpbD86IChlcnJvcjogYW55KSA9PiB2b2lkXG4gICk6IFByb21pc2U8YW55W10+IHtcbiAgICByZXR1cm4gdGhpcy5lbnN1cmVQbHVnaW4oKS5nZXRWYWxpZExvY2F0aW9uc0FuZERlbGV0ZShzdWNjZXNzLCBmYWlsKTtcbiAgfVxuXG4gIGRlbGV0ZUxvY2F0aW9uKFxuICAgIGxvY2F0aW9uSWQ6IG51bWJlcixcbiAgICBzdWNjZXNzPzogKCkgPT4gdm9pZCxcbiAgICBmYWlsPzogKGVycm9yOiBhbnkpID0+IHZvaWRcbiAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIHRoaXMuZW5zdXJlUGx1Z2luKCkuZGVsZXRlTG9jYXRpb24obG9jYXRpb25JZCwgc3VjY2VzcywgZmFpbCk7XG4gIH1cblxuICBkZWxldGVBbGxMb2NhdGlvbnMoXG4gICAgc3VjY2Vzcz86ICgpID0+IHZvaWQsXG4gICAgZmFpbD86IChlcnJvcjogYW55KSA9PiB2b2lkXG4gICk6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiB0aGlzLmVuc3VyZVBsdWdpbigpLmRlbGV0ZUFsbExvY2F0aW9ucyhzdWNjZXNzLCBmYWlsKTtcbiAgfVxuXG4gIHN3aXRjaE1vZGUoXG4gICAgbW9kZUlkOiBudW1iZXIsXG4gICAgc3VjY2Vzcz86ICgpID0+IHZvaWQsXG4gICAgZmFpbD86IChlcnJvcjogYW55KSA9PiB2b2lkXG4gICk6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiB0aGlzLmVuc3VyZVBsdWdpbigpLnN3aXRjaE1vZGUobW9kZUlkLCBzdWNjZXNzLCBmYWlsKTtcbiAgfVxuXG4gIGZvcmNlU3luYyhcbiAgICBzdWNjZXNzPzogKCkgPT4gdm9pZCxcbiAgICBmYWlsPzogKGVycm9yOiBhbnkpID0+IHZvaWRcbiAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIHRoaXMuZW5zdXJlUGx1Z2luKCkuZm9yY2VTeW5jKHN1Y2Nlc3MsIGZhaWwpO1xuICB9XG5cbiAgY2xlYXJTeW5jKFxuICAgIHN1Y2Nlc3M/OiAoKSA9PiB2b2lkLFxuICAgIGZhaWw/OiAoZXJyb3I6IGFueSkgPT4gdm9pZFxuICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gdGhpcy5lbnN1cmVQbHVnaW4oKS5jbGVhclN5bmMoc3VjY2VzcywgZmFpbCk7XG4gIH1cblxuICBnZXRQZW5kaW5nU3luY0NvdW50KFxuICAgIHN1Y2Nlc3M/OiAoY291bnQ6IG51bWJlcikgPT4gdm9pZCxcbiAgICBmYWlsPzogKGVycm9yOiBhbnkpID0+IHZvaWRcbiAgKTogUHJvbWlzZTxudW1iZXI+IHtcbiAgICByZXR1cm4gdGhpcy5lbnN1cmVQbHVnaW4oKS5nZXRQZW5kaW5nU3luY0NvdW50KHN1Y2Nlc3MsIGZhaWwpO1xuICB9XG5cbiAgZ2V0Q29uZmlnKFxuICAgIHN1Y2Nlc3M/OiAoY29uZmlnOiBhbnkpID0+IHZvaWQsXG4gICAgZmFpbD86IChlcnJvcjogYW55KSA9PiB2b2lkXG4gICk6IFByb21pc2U8YW55PiB7XG4gICAgcmV0dXJuIHRoaXMuZW5zdXJlUGx1Z2luKCkuZ2V0Q29uZmlnKHN1Y2Nlc3MsIGZhaWwpO1xuICB9XG5cbiAgZ2V0TG9nRW50cmllcyhcbiAgICBsaW1pdDogbnVtYmVyLFxuICAgIGZyb21JZDogbnVtYmVyLFxuICAgIG1pbkxldmVsOiBzdHJpbmcsXG4gICAgc3VjY2Vzcz86IChlbnRyaWVzOiBhbnlbXSkgPT4gdm9pZCxcbiAgICBmYWlsPzogKGVycm9yOiBhbnkpID0+IHZvaWRcbiAgKTogUHJvbWlzZTxhbnlbXT4ge1xuICAgIHJldHVybiB0aGlzLmVuc3VyZVBsdWdpbigpLmdldExvZ0VudHJpZXMobGltaXQsIGZyb21JZCwgbWluTGV2ZWwsIHN1Y2Nlc3MsIGZhaWwpO1xuICB9XG5cbiAgcmVtb3ZlQWxsTGlzdGVuZXJzKGV2ZW50Pzogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5lbnN1cmVQbHVnaW4oKS5yZW1vdmVBbGxMaXN0ZW5lcnMoZXZlbnQpO1xuICB9XG5cbiAgc3RhcnRUYXNrKFxuICAgIHN1Y2Nlc3M/OiAodGFza0tleTogbnVtYmVyKSA9PiB2b2lkLFxuICAgIGZhaWw/OiAoZXJyb3I6IGFueSkgPT4gdm9pZFxuICApOiBQcm9taXNlPG51bWJlcj4ge1xuICAgIHJldHVybiB0aGlzLmVuc3VyZVBsdWdpbigpLnN0YXJ0VGFzayhzdWNjZXNzLCBmYWlsKTtcbiAgfVxuXG4gIGVuZFRhc2soXG4gICAgdGFza0tleTogbnVtYmVyLFxuICAgIHN1Y2Nlc3M/OiAoKSA9PiB2b2lkLFxuICAgIGZhaWw/OiAoZXJyb3I6IGFueSkgPT4gdm9pZFxuICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gdGhpcy5lbnN1cmVQbHVnaW4oKS5lbmRUYXNrKHRhc2tLZXksIHN1Y2Nlc3MsIGZhaWwpO1xuICB9XG5cbiAgaGVhZGxlc3NUYXNrKHRhc2s6IChldmVudDogYW55KSA9PiB2b2lkKTogdm9pZCB7XG4gICAgdGhpcy5lbnN1cmVQbHVnaW4oKS5oZWFkbGVzc1Rhc2sodGFzayk7XG4gIH1cblxuICAvKipcbiAgICogUmVnaXN0ZXIgYW4gZXZlbnQgbGlzdGVuZXIuIENvbXBhdGlibGUgd2l0aCBBd2Vzb21lLXN0eWxlIHVzYWdlOlxuICAgKiAub24oQmFja2dyb3VuZEdlb2xvY2F0aW9uRXZlbnRzLmVycm9yKS5zdWJzY3JpYmUoKGVycikgPT4gLi4uKSDigJQgcmV0dXJucyBzdWJzY3JpcHRpb24gd2l0aCAudW5zdWJzY3JpYmUoKS5cbiAgICogLm9uKCdsb2NhdGlvbicsIChsb2MpID0+IC4uLikg4oCUIGFsc28gc3VwcG9ydGVkOyByZXR1cm5lZCBvYmplY3QgaGFzIC51bnN1YnNjcmliZSgpLlxuICAgKi9cbiAgb24oZXZlbnROYW1lOiBzdHJpbmcsIGNhbGxiYWNrPzogKHZhbHVlOiBhbnkpID0+IHZvaWQpOiB7IHN1YnNjcmliZShjYjogKHZhbHVlOiBhbnkpID0+IHZvaWQpOiB7IHVuc3Vic2NyaWJlKCk6IHZvaWQgfTsgdW5zdWJzY3JpYmUoKTogdm9pZCB9IHtcbiAgICBjb25zdCBwbHVnaW4gPSB0aGlzLmVuc3VyZVBsdWdpbigpO1xuICAgIGlmIChjYWxsYmFjayAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb25zdCBzdWIgPSBwbHVnaW4ub24oZXZlbnROYW1lLCBjYWxsYmFjaykgYXMgeyByZW1vdmU/OiAoKSA9PiB2b2lkIH07XG4gICAgICByZXR1cm4ge1xuICAgICAgICBzdWJzY3JpYmUoY2I6ICh2YWx1ZTogYW55KSA9PiB2b2lkKSB7XG4gICAgICAgICAgY29uc3QgcyA9IGNiID8gKHBsdWdpbi5vbihldmVudE5hbWUsIGNiKSBhcyB7IHJlbW92ZT86ICgpID0+IHZvaWQgfSkgOiBudWxsO1xuICAgICAgICAgIHJldHVybiB7IHVuc3Vic2NyaWJlKCkgeyBzPy5yZW1vdmU/LigpOyB9IH07XG4gICAgICAgIH0sXG4gICAgICAgIHVuc3Vic2NyaWJlKCkgeyBzdWIucmVtb3ZlPy4oKTsgfVxuICAgICAgfTtcbiAgICB9XG4gICAgY29uc3QgY2hhbm5lbCA9IHBsdWdpbi5vbihldmVudE5hbWUpIGFzIHsgc3Vic2NyaWJlOiAoY2I6ICh2OiBhbnkpID0+IHZvaWQpID0+IHZvaWQ7IHVuc3Vic2NyaWJlOiAoY2I6ICh2OiBhbnkpID0+IHZvaWQpID0+IHZvaWQgfTtcbiAgICByZXR1cm4ge1xuICAgICAgc3Vic2NyaWJlKGNiOiAodmFsdWU6IGFueSkgPT4gdm9pZCkge1xuICAgICAgICBjaGFubmVsLnN1YnNjcmliZShjYik7XG4gICAgICAgIHJldHVybiB7IHVuc3Vic2NyaWJlKCkgeyBjaGFubmVsLnVuc3Vic2NyaWJlKGNiKTsgfSB9O1xuICAgICAgfSxcbiAgICAgIHVuc3Vic2NyaWJlKCkgeyAvKiBuby1vcCB3aGVuIG5vIGNhbGxiYWNrICovIH1cbiAgICB9O1xuICB9XG5cbiAgLyoqIENvbnZlbmllbmNlOiBhY2Nlc3MgcGx1Z2luIGNvbnN0YW50cyAoZS5nLiBBQ1RJVklUWV9QUk9WSURFUiwgSElHSF9BQ0NVUkFDWSkuICovXG4gIGdldCBuYXRpdmUoKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5wbHVnaW47XG4gIH1cbn1cbiJdfQ==
@@ -92,6 +92,12 @@ class BackgroundGeolocationService {
92
92
  forceSync(success, fail) {
93
93
  return this.ensurePlugin().forceSync(success, fail);
94
94
  }
95
+ clearSync(success, fail) {
96
+ return this.ensurePlugin().clearSync(success, fail);
97
+ }
98
+ getPendingSyncCount(success, fail) {
99
+ return this.ensurePlugin().getPendingSyncCount(success, fail);
100
+ }
95
101
  getConfig(success, fail) {
96
102
  return this.ensurePlugin().getConfig(success, fail);
97
103
  }
@@ -1 +1 @@
1
- {"version":3,"file":"josuelmm-cordova-background-geolocation.mjs","sources":["../../background-geolocation.service.ts","../../background-geolocation.module.ts","../../background-geolocation-events.ts","../../background-geolocation-enums.ts","../../public-api.ts","../../josuelmm-cordova-background-geolocation.ts"],"sourcesContent":["import { Injectable, InjectionToken } from '@angular/core';\n\n/**\n * Token used to provide BackgroundGeolocationService without triggering JIT.\n * The module provides this token with useFactory; the class is aliased via useExisting\n * so you still inject constructor(private bg: BackgroundGeolocationService) {}.\n */\nexport const BACKGROUND_GEOLOCATION_SERVICE = new InjectionToken<BackgroundGeolocationService>(\n 'BackgroundGeolocationService'\n);\n\n/**\n * Angular service that wraps the Cordova/Capacitor BackgroundGeolocation plugin.\n * Use dependency injection instead of the global BackgroundGeolocation object.\n *\n * The native plugin must be installed and available (e.g. after deviceready).\n * Types (ConfigureOptions, Location, etc.) can be imported from\n * '@josuelmm/cordova-background-geolocation'.\n *\n * Provided via BackgroundGeolocationModule using an InjectionToken + useFactory\n * so AOT builds never need the JIT compiler for this class.\n */\n@Injectable()\nexport class BackgroundGeolocationService {\n\n /** Returns the global plugin instance (Cordova/Capacitor). */\n private get plugin(): any {\n if (typeof window === 'undefined') return null;\n return (window as any).BackgroundGeolocation || null;\n }\n\n private ensurePlugin(): any {\n const p = this.plugin;\n if (!p) {\n throw new Error(\n 'BackgroundGeolocation is not available. Ensure the plugin is installed and the app is running in a native context (Cordova/Capacitor).'\n );\n }\n return p;\n }\n\n configure(options: any, success?: () => void, fail?: (err: any) => void): Promise<void> {\n return this.ensurePlugin().configure(options, success, fail);\n }\n\n start(): Promise<void> {\n return this.ensurePlugin().start();\n }\n\n stop(): Promise<void> {\n return this.ensurePlugin().stop();\n }\n\n /** Inform the native plugin that the background task may complete (iOS). Call after handling location/stationary in the callback. */\n finish(): Promise<void> {\n return this.ensurePlugin().finish();\n }\n\n /** Force the plugin to enter \"moving\" or \"stationary\" state (iOS). */\n changePace(isMoving: boolean): Promise<void> {\n return this.ensurePlugin().changePace(isMoving);\n }\n\n getCurrentLocation(\n success?: (location: any) => void,\n fail?: (error: any) => void,\n options?: any\n ): Promise<any> {\n return this.ensurePlugin().getCurrentLocation(success, fail, options);\n }\n\n getStationaryLocation(\n success?: (location: any) => void,\n fail?: (error: any) => void\n ): Promise<any> {\n return this.ensurePlugin().getStationaryLocation(success, fail);\n }\n\n checkStatus(\n success?: (status: any) => void,\n fail?: (error: any) => void\n ): Promise<any> {\n return this.ensurePlugin().checkStatus(success, fail);\n }\n\n showAppSettings(): Promise<void> {\n return this.ensurePlugin().showAppSettings();\n }\n\n /** Open app settings (alias for showAppSettings). */\n openSettings(): Promise<void> {\n return this.ensurePlugin().openSettings();\n }\n\n showLocationSettings(): Promise<void> {\n return this.ensurePlugin().showLocationSettings();\n }\n\n getPluginVersion(\n success?: (version: string) => void,\n fail?: (error: any) => void\n ): Promise<string> {\n return this.ensurePlugin().getPluginVersion(success, fail);\n }\n\n getLocations(\n success?: (locations: any[]) => void,\n fail?: (error: any) => void\n ): Promise<any[]> {\n return this.ensurePlugin().getLocations(success, fail);\n }\n\n getValidLocations(\n success?: (locations: any[]) => void,\n fail?: (error: any) => void\n ): Promise<any[]> {\n return this.ensurePlugin().getValidLocations(success, fail);\n }\n\n getValidLocationsAndDelete(\n success?: (locations: any[]) => void,\n fail?: (error: any) => void\n ): Promise<any[]> {\n return this.ensurePlugin().getValidLocationsAndDelete(success, fail);\n }\n\n deleteLocation(\n locationId: number,\n success?: () => void,\n fail?: (error: any) => void\n ): Promise<void> {\n return this.ensurePlugin().deleteLocation(locationId, success, fail);\n }\n\n deleteAllLocations(\n success?: () => void,\n fail?: (error: any) => void\n ): Promise<void> {\n return this.ensurePlugin().deleteAllLocations(success, fail);\n }\n\n switchMode(\n modeId: number,\n success?: () => void,\n fail?: (error: any) => void\n ): Promise<void> {\n return this.ensurePlugin().switchMode(modeId, success, fail);\n }\n\n forceSync(\n success?: () => void,\n fail?: (error: any) => void\n ): Promise<void> {\n return this.ensurePlugin().forceSync(success, fail);\n }\n\n getConfig(\n success?: (config: any) => void,\n fail?: (error: any) => void\n ): Promise<any> {\n return this.ensurePlugin().getConfig(success, fail);\n }\n\n getLogEntries(\n limit: number,\n fromId: number,\n minLevel: string,\n success?: (entries: any[]) => void,\n fail?: (error: any) => void\n ): Promise<any[]> {\n return this.ensurePlugin().getLogEntries(limit, fromId, minLevel, success, fail);\n }\n\n removeAllListeners(event?: string): void {\n this.ensurePlugin().removeAllListeners(event);\n }\n\n startTask(\n success?: (taskKey: number) => void,\n fail?: (error: any) => void\n ): Promise<number> {\n return this.ensurePlugin().startTask(success, fail);\n }\n\n endTask(\n taskKey: number,\n success?: () => void,\n fail?: (error: any) => void\n ): Promise<void> {\n return this.ensurePlugin().endTask(taskKey, success, fail);\n }\n\n headlessTask(task: (event: any) => void): void {\n this.ensurePlugin().headlessTask(task);\n }\n\n /**\n * Register an event listener. Compatible with Awesome-style usage:\n * .on(BackgroundGeolocationEvents.error).subscribe((err) => ...) — returns subscription with .unsubscribe().\n * .on('location', (loc) => ...) — also supported; returned object has .unsubscribe().\n */\n on(eventName: string, callback?: (value: any) => void): { subscribe(cb: (value: any) => void): { unsubscribe(): void }; unsubscribe(): void } {\n const plugin = this.ensurePlugin();\n if (callback !== undefined) {\n const sub = plugin.on(eventName, callback) as { remove?: () => void };\n return {\n subscribe(cb: (value: any) => void) {\n const s = cb ? (plugin.on(eventName, cb) as { remove?: () => void }) : null;\n return { unsubscribe() { s?.remove?.(); } };\n },\n unsubscribe() { sub.remove?.(); }\n };\n }\n const channel = plugin.on(eventName) as { subscribe: (cb: (v: any) => void) => void; unsubscribe: (cb: (v: any) => void) => void };\n return {\n subscribe(cb: (value: any) => void) {\n channel.subscribe(cb);\n return { unsubscribe() { channel.unsubscribe(cb); } };\n },\n unsubscribe() { /* no-op when no callback */ }\n };\n }\n\n /** Convenience: access plugin constants (e.g. ACTIVITY_PROVIDER, HIGH_ACCURACY). */\n get native(): any {\n return this.plugin;\n }\n}\n","import { NgModule } from '@angular/core';\nimport {\n BackgroundGeolocationService,\n BACKGROUND_GEOLOCATION_SERVICE,\n} from './background-geolocation.service';\n\n/**\n * NgModule that provides BackgroundGeolocationService.\n * Uses InjectionToken + useFactory so Angular never calls getFactoryDef on the class\n * (avoids JIT requirement in AOT/production). useExisting lets you still inject\n * constructor(private bg: BackgroundGeolocationService) {}.\n *\n * Import in your AppModule or feature module:\n * imports: [BackgroundGeolocationModule]\n * Then inject: constructor(private bg: BackgroundGeolocationService) {}\n */\n@NgModule({\n providers: [\n {\n provide: BACKGROUND_GEOLOCATION_SERVICE,\n useFactory: () => new BackgroundGeolocationService(),\n },\n {\n provide: BackgroundGeolocationService,\n useExisting: BACKGROUND_GEOLOCATION_SERVICE,\n },\n ],\n})\nexport class BackgroundGeolocationModule {}\n","/**\n * Event names for BackgroundGeolocation.on(event).subscribe(...).\n * Mirrors the enum in the main package so it is available at runtime from /angular.\n */\nexport enum BackgroundGeolocationEvents {\n http_authorization = 'http_authorization',\n abort_requested = 'abort_requested',\n background = 'background',\n foreground = 'foreground',\n authorization = 'authorization',\n error = 'error',\n stop = 'stop',\n start = 'start',\n activity = 'activity',\n stationary = 'stationary',\n location = 'location',\n}\n","/**\n * Enums as runtime values for use with @josuelmm/cordova-background-geolocation/angular.\n * Matches @awesome-cordova-plugins/background-geolocation names; numeric values match this plugin (e.g. accuracy 0, 100, 1000, 10000).\n */\n\nexport enum BackgroundGeolocationLocationCode {\n PERMISSION_DENIED = 1,\n LOCATION_UNAVAILABLE = 2,\n TIMEOUT = 3,\n}\n\nexport enum BackgroundGeolocationNativeProvider {\n gps = 'gps',\n network = 'network',\n passive = 'passive',\n fused = 'fused',\n}\n\nexport enum BackgroundGeolocationLocationProvider {\n DISTANCE_FILTER_PROVIDER = 0,\n ACTIVITY_PROVIDER = 1,\n RAW_PROVIDER = 2,\n}\n\nexport enum BackgroundGeolocationAuthorizationStatus {\n NOT_AUTHORIZED = 0,\n AUTHORIZED = 1,\n AUTHORIZED_FOREGROUND = 2,\n}\n\nexport enum BackgroundGeolocationLogLevel {\n TRACE = 'TRACE',\n DEBUG = 'DEBUG',\n INFO = 'INFO',\n WARN = 'WARN',\n ERROR = 'ERROR',\n}\n\nexport enum BackgroundGeolocationProvider {\n ANDROID_DISTANCE_FILTER_PROVIDER = 0,\n ANDROID_ACTIVITY_PROVIDER = 1,\n RAW_PROVIDER = 2,\n}\n\n/** Values match this plugin: 0, 100, 1000, 10000 (not Awesome's 10, 100, 1000). */\nexport enum BackgroundGeolocationAccuracy {\n HIGH = 0,\n MEDIUM = 100,\n LOW = 1000,\n PASSIVE = 10000,\n}\n\nexport enum BackgroundGeolocationMode {\n BACKGROUND = 0,\n FOREGROUND = 1,\n}\n\nexport enum BackgroundGeolocationIOSActivity {\n AutomotiveNavigation = 'AutomotiveNavigation',\n OtherNavigation = 'OtherNavigation',\n Fitness = 'Fitness',\n Other = 'Other',\n}\n","/**\n * Public API for @josuelmm/cordova-background-geolocation/angular.\n * Entry point for ng-packagr (Ivy/AOT build).\n */\nexport {\n BackgroundGeolocationService,\n BACKGROUND_GEOLOCATION_SERVICE,\n} from './background-geolocation.service';\nexport { BackgroundGeolocationModule } from './background-geolocation.module';\nexport { BackgroundGeolocationEvents } from './background-geolocation-events';\nexport {\n BackgroundGeolocationLocationCode,\n BackgroundGeolocationNativeProvider,\n BackgroundGeolocationLocationProvider,\n BackgroundGeolocationAuthorizationStatus,\n BackgroundGeolocationLogLevel,\n BackgroundGeolocationProvider,\n BackgroundGeolocationAccuracy,\n BackgroundGeolocationMode,\n BackgroundGeolocationIOSActivity,\n} from './background-geolocation-enums';\nexport type {\n BackgroundGeolocationConfig,\n BackgroundGeolocationResponse,\n ServiceStatus,\n BackgroundGeolocationLogEntry,\n} from '../www/BackgroundGeolocation';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"josuelmm-cordova-background-geolocation.mjs","sources":["../../background-geolocation.service.ts","../../background-geolocation.module.ts","../../background-geolocation-events.ts","../../background-geolocation-enums.ts","../../public-api.ts","../../josuelmm-cordova-background-geolocation.ts"],"sourcesContent":["import { Injectable, InjectionToken } from '@angular/core';\n\n/**\n * Token used to provide BackgroundGeolocationService without triggering JIT.\n * The module provides this token with useFactory; the class is aliased via useExisting\n * so you still inject constructor(private bg: BackgroundGeolocationService) {}.\n */\nexport const BACKGROUND_GEOLOCATION_SERVICE = new InjectionToken<BackgroundGeolocationService>(\n 'BackgroundGeolocationService'\n);\n\n/**\n * Angular service that wraps the Cordova/Capacitor BackgroundGeolocation plugin.\n * Use dependency injection instead of the global BackgroundGeolocation object.\n *\n * The native plugin must be installed and available (e.g. after deviceready).\n * Types (ConfigureOptions, Location, etc.) can be imported from\n * '@josuelmm/cordova-background-geolocation'.\n *\n * Provided via BackgroundGeolocationModule using an InjectionToken + useFactory\n * so AOT builds never need the JIT compiler for this class.\n */\n@Injectable()\nexport class BackgroundGeolocationService {\n\n /** Returns the global plugin instance (Cordova/Capacitor). */\n private get plugin(): any {\n if (typeof window === 'undefined') return null;\n return (window as any).BackgroundGeolocation || null;\n }\n\n private ensurePlugin(): any {\n const p = this.plugin;\n if (!p) {\n throw new Error(\n 'BackgroundGeolocation is not available. Ensure the plugin is installed and the app is running in a native context (Cordova/Capacitor).'\n );\n }\n return p;\n }\n\n configure(options: any, success?: () => void, fail?: (err: any) => void): Promise<void> {\n return this.ensurePlugin().configure(options, success, fail);\n }\n\n start(): Promise<void> {\n return this.ensurePlugin().start();\n }\n\n stop(): Promise<void> {\n return this.ensurePlugin().stop();\n }\n\n /** Inform the native plugin that the background task may complete (iOS). Call after handling location/stationary in the callback. */\n finish(): Promise<void> {\n return this.ensurePlugin().finish();\n }\n\n /** Force the plugin to enter \"moving\" or \"stationary\" state (iOS). */\n changePace(isMoving: boolean): Promise<void> {\n return this.ensurePlugin().changePace(isMoving);\n }\n\n getCurrentLocation(\n success?: (location: any) => void,\n fail?: (error: any) => void,\n options?: any\n ): Promise<any> {\n return this.ensurePlugin().getCurrentLocation(success, fail, options);\n }\n\n getStationaryLocation(\n success?: (location: any) => void,\n fail?: (error: any) => void\n ): Promise<any> {\n return this.ensurePlugin().getStationaryLocation(success, fail);\n }\n\n checkStatus(\n success?: (status: any) => void,\n fail?: (error: any) => void\n ): Promise<any> {\n return this.ensurePlugin().checkStatus(success, fail);\n }\n\n showAppSettings(): Promise<void> {\n return this.ensurePlugin().showAppSettings();\n }\n\n /** Open app settings (alias for showAppSettings). */\n openSettings(): Promise<void> {\n return this.ensurePlugin().openSettings();\n }\n\n showLocationSettings(): Promise<void> {\n return this.ensurePlugin().showLocationSettings();\n }\n\n getPluginVersion(\n success?: (version: string) => void,\n fail?: (error: any) => void\n ): Promise<string> {\n return this.ensurePlugin().getPluginVersion(success, fail);\n }\n\n getLocations(\n success?: (locations: any[]) => void,\n fail?: (error: any) => void\n ): Promise<any[]> {\n return this.ensurePlugin().getLocations(success, fail);\n }\n\n getValidLocations(\n success?: (locations: any[]) => void,\n fail?: (error: any) => void\n ): Promise<any[]> {\n return this.ensurePlugin().getValidLocations(success, fail);\n }\n\n getValidLocationsAndDelete(\n success?: (locations: any[]) => void,\n fail?: (error: any) => void\n ): Promise<any[]> {\n return this.ensurePlugin().getValidLocationsAndDelete(success, fail);\n }\n\n deleteLocation(\n locationId: number,\n success?: () => void,\n fail?: (error: any) => void\n ): Promise<void> {\n return this.ensurePlugin().deleteLocation(locationId, success, fail);\n }\n\n deleteAllLocations(\n success?: () => void,\n fail?: (error: any) => void\n ): Promise<void> {\n return this.ensurePlugin().deleteAllLocations(success, fail);\n }\n\n switchMode(\n modeId: number,\n success?: () => void,\n fail?: (error: any) => void\n ): Promise<void> {\n return this.ensurePlugin().switchMode(modeId, success, fail);\n }\n\n forceSync(\n success?: () => void,\n fail?: (error: any) => void\n ): Promise<void> {\n return this.ensurePlugin().forceSync(success, fail);\n }\n\n clearSync(\n success?: () => void,\n fail?: (error: any) => void\n ): Promise<void> {\n return this.ensurePlugin().clearSync(success, fail);\n }\n\n getPendingSyncCount(\n success?: (count: number) => void,\n fail?: (error: any) => void\n ): Promise<number> {\n return this.ensurePlugin().getPendingSyncCount(success, fail);\n }\n\n getConfig(\n success?: (config: any) => void,\n fail?: (error: any) => void\n ): Promise<any> {\n return this.ensurePlugin().getConfig(success, fail);\n }\n\n getLogEntries(\n limit: number,\n fromId: number,\n minLevel: string,\n success?: (entries: any[]) => void,\n fail?: (error: any) => void\n ): Promise<any[]> {\n return this.ensurePlugin().getLogEntries(limit, fromId, minLevel, success, fail);\n }\n\n removeAllListeners(event?: string): void {\n this.ensurePlugin().removeAllListeners(event);\n }\n\n startTask(\n success?: (taskKey: number) => void,\n fail?: (error: any) => void\n ): Promise<number> {\n return this.ensurePlugin().startTask(success, fail);\n }\n\n endTask(\n taskKey: number,\n success?: () => void,\n fail?: (error: any) => void\n ): Promise<void> {\n return this.ensurePlugin().endTask(taskKey, success, fail);\n }\n\n headlessTask(task: (event: any) => void): void {\n this.ensurePlugin().headlessTask(task);\n }\n\n /**\n * Register an event listener. Compatible with Awesome-style usage:\n * .on(BackgroundGeolocationEvents.error).subscribe((err) => ...) — returns subscription with .unsubscribe().\n * .on('location', (loc) => ...) — also supported; returned object has .unsubscribe().\n */\n on(eventName: string, callback?: (value: any) => void): { subscribe(cb: (value: any) => void): { unsubscribe(): void }; unsubscribe(): void } {\n const plugin = this.ensurePlugin();\n if (callback !== undefined) {\n const sub = plugin.on(eventName, callback) as { remove?: () => void };\n return {\n subscribe(cb: (value: any) => void) {\n const s = cb ? (plugin.on(eventName, cb) as { remove?: () => void }) : null;\n return { unsubscribe() { s?.remove?.(); } };\n },\n unsubscribe() { sub.remove?.(); }\n };\n }\n const channel = plugin.on(eventName) as { subscribe: (cb: (v: any) => void) => void; unsubscribe: (cb: (v: any) => void) => void };\n return {\n subscribe(cb: (value: any) => void) {\n channel.subscribe(cb);\n return { unsubscribe() { channel.unsubscribe(cb); } };\n },\n unsubscribe() { /* no-op when no callback */ }\n };\n }\n\n /** Convenience: access plugin constants (e.g. ACTIVITY_PROVIDER, HIGH_ACCURACY). */\n get native(): any {\n return this.plugin;\n }\n}\n","import { NgModule } from '@angular/core';\nimport {\n BackgroundGeolocationService,\n BACKGROUND_GEOLOCATION_SERVICE,\n} from './background-geolocation.service';\n\n/**\n * NgModule that provides BackgroundGeolocationService.\n * Uses InjectionToken + useFactory so Angular never calls getFactoryDef on the class\n * (avoids JIT requirement in AOT/production). useExisting lets you still inject\n * constructor(private bg: BackgroundGeolocationService) {}.\n *\n * Import in your AppModule or feature module:\n * imports: [BackgroundGeolocationModule]\n * Then inject: constructor(private bg: BackgroundGeolocationService) {}\n */\n@NgModule({\n providers: [\n {\n provide: BACKGROUND_GEOLOCATION_SERVICE,\n useFactory: () => new BackgroundGeolocationService(),\n },\n {\n provide: BackgroundGeolocationService,\n useExisting: BACKGROUND_GEOLOCATION_SERVICE,\n },\n ],\n})\nexport class BackgroundGeolocationModule {}\n","/**\n * Event names for BackgroundGeolocation.on(event).subscribe(...).\n * Mirrors the enum in the main package so it is available at runtime from /angular.\n */\nexport enum BackgroundGeolocationEvents {\n http_authorization = 'http_authorization',\n abort_requested = 'abort_requested',\n background = 'background',\n foreground = 'foreground',\n authorization = 'authorization',\n error = 'error',\n stop = 'stop',\n start = 'start',\n activity = 'activity',\n stationary = 'stationary',\n location = 'location',\n}\n","/**\n * Enums as runtime values for use with @josuelmm/cordova-background-geolocation/angular.\n * Matches @awesome-cordova-plugins/background-geolocation names; numeric values match this plugin (e.g. accuracy 0, 100, 1000, 10000).\n */\n\nexport enum BackgroundGeolocationLocationCode {\n PERMISSION_DENIED = 1,\n LOCATION_UNAVAILABLE = 2,\n TIMEOUT = 3,\n}\n\nexport enum BackgroundGeolocationNativeProvider {\n gps = 'gps',\n network = 'network',\n passive = 'passive',\n fused = 'fused',\n}\n\nexport enum BackgroundGeolocationLocationProvider {\n DISTANCE_FILTER_PROVIDER = 0,\n ACTIVITY_PROVIDER = 1,\n RAW_PROVIDER = 2,\n}\n\nexport enum BackgroundGeolocationAuthorizationStatus {\n NOT_AUTHORIZED = 0,\n AUTHORIZED = 1,\n AUTHORIZED_FOREGROUND = 2,\n}\n\nexport enum BackgroundGeolocationLogLevel {\n TRACE = 'TRACE',\n DEBUG = 'DEBUG',\n INFO = 'INFO',\n WARN = 'WARN',\n ERROR = 'ERROR',\n}\n\nexport enum BackgroundGeolocationProvider {\n ANDROID_DISTANCE_FILTER_PROVIDER = 0,\n ANDROID_ACTIVITY_PROVIDER = 1,\n RAW_PROVIDER = 2,\n}\n\n/** Values match this plugin: 0, 100, 1000, 10000 (not Awesome's 10, 100, 1000). */\nexport enum BackgroundGeolocationAccuracy {\n HIGH = 0,\n MEDIUM = 100,\n LOW = 1000,\n PASSIVE = 10000,\n}\n\nexport enum BackgroundGeolocationMode {\n BACKGROUND = 0,\n FOREGROUND = 1,\n}\n\nexport enum BackgroundGeolocationIOSActivity {\n AutomotiveNavigation = 'AutomotiveNavigation',\n OtherNavigation = 'OtherNavigation',\n Fitness = 'Fitness',\n Other = 'Other',\n}\n","/**\n * Public API for @josuelmm/cordova-background-geolocation/angular.\n * Entry point for ng-packagr (Ivy/AOT build).\n */\nexport {\n BackgroundGeolocationService,\n BACKGROUND_GEOLOCATION_SERVICE,\n} from './background-geolocation.service';\nexport { BackgroundGeolocationModule } from './background-geolocation.module';\nexport { BackgroundGeolocationEvents } from './background-geolocation-events';\nexport {\n BackgroundGeolocationLocationCode,\n BackgroundGeolocationNativeProvider,\n BackgroundGeolocationLocationProvider,\n BackgroundGeolocationAuthorizationStatus,\n BackgroundGeolocationLogLevel,\n BackgroundGeolocationProvider,\n BackgroundGeolocationAccuracy,\n BackgroundGeolocationMode,\n BackgroundGeolocationIOSActivity,\n} from './background-geolocation-enums';\nexport type {\n BackgroundGeolocationConfig,\n BackgroundGeolocationResponse,\n ServiceStatus,\n BackgroundGeolocationLogEntry,\n} from '../www/BackgroundGeolocation';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
@@ -35,6 +35,8 @@
35
35
  - (void) startTask:(CDVInvokedUrlCommand*)command;
36
36
  - (void) endTask:(CDVInvokedUrlCommand*)command;
37
37
  - (void) forceSync:(CDVInvokedUrlCommand*)command;
38
+ - (void) clearSync:(CDVInvokedUrlCommand*)command;
39
+ - (void) getPendingSyncCount:(CDVInvokedUrlCommand*)command;
38
40
  - (void) addEventListener:(CDVInvokedUrlCommand*)command;
39
41
  - (void) removeEventListener:(CDVInvokedUrlCommand*)command;
40
42
 
@@ -341,6 +341,22 @@ static NSString * const TAG = @"CDVBackgroundGeolocation";
341
341
  [self.commandDelegate sendPluginResult:result callbackId:command.callbackId];
342
342
  }
343
343
 
344
+ - (void) clearSync:(CDVInvokedUrlCommand*)command
345
+ {
346
+ [facade clearSync];
347
+ CDVPluginResult *result = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK];
348
+ [self.commandDelegate sendPluginResult:result callbackId:command.callbackId];
349
+ }
350
+
351
+ - (void) getPendingSyncCount:(CDVInvokedUrlCommand*)command
352
+ {
353
+ [self.commandDelegate runInBackground:^{
354
+ NSInteger count = [facade getPendingSyncCount];
355
+ CDVPluginResult *result = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK messageAsNSInteger:count];
356
+ [self.commandDelegate sendPluginResult:result callbackId:command.callbackId];
357
+ }];
358
+ }
359
+
344
360
  - (void) addEventListener:(CDVInvokedUrlCommand*)command
345
361
  {
346
362
  callbackId = command.callbackId;
@@ -42,6 +42,8 @@
42
42
  - (NSArray*) getLogEntries:(NSInteger)limit;
43
43
  - (NSArray*) getLogEntries:(NSInteger)limit fromLogEntryId:(NSInteger)entryId minLogLevelFromString:(NSString *)minLogLevel;
44
44
  - (void) forceSync;
45
+ - (void) clearSync;
46
+ - (NSInteger) getPendingSyncCount;
45
47
  - (void) onAppTerminate;
46
48
 
47
49
 
@@ -460,9 +460,31 @@ FMDBLogger *sqliteLogger;
460
460
 
461
461
  - (void) forceSync
462
462
  {
463
+ if (![_config syncEnabled]) {
464
+ DDLogDebug(@"Sync disabled in config, skipping forceSync");
465
+ return;
466
+ }
463
467
  [postLocationTask sync];
464
468
  }
465
469
 
470
+ - (void) clearSync
471
+ {
472
+ MAURSQLiteLocationDAO *locationDAO = [MAURSQLiteLocationDAO sharedInstance];
473
+ NSError *error = nil;
474
+ if ([locationDAO deletePendingSyncLocations:&error]) {
475
+ DDLogDebug(@"Cleared pending sync locations");
476
+ } else {
477
+ DDLogError(@"clearSync failed: %@", error.localizedDescription);
478
+ }
479
+ }
480
+
481
+ - (NSInteger) getPendingSyncCount
482
+ {
483
+ MAURSQLiteLocationDAO *locationDAO = [MAURSQLiteLocationDAO sharedInstance];
484
+ NSNumber *count = [locationDAO getLocationsForSyncCount];
485
+ return count != nil ? [count integerValue] : 0;
486
+ }
487
+
466
488
  - (void) notify:(NSString*)message
467
489
  {
468
490
  localNotification.fireDate = [NSDate date];
@@ -29,6 +29,7 @@ enum {
29
29
  @property NSString *url;
30
30
  @property NSString *syncUrl;
31
31
  @property NSNumber *syncThreshold;
32
+ @property NSNumber *syncEnabled;
32
33
  @property NSMutableDictionary* httpHeaders;
33
34
  @property NSNumber *_saveBatteryOnBackground;
34
35
  @property NSNumber *maxLocations;
@@ -52,6 +53,8 @@ enum {
52
53
  - (BOOL) hasSyncUrl;
53
54
  - (BOOL) hasValidSyncUrl;
54
55
  - (BOOL) hasSyncThreshold;
56
+ - (BOOL) hasSyncEnabled;
57
+ - (BOOL) syncEnabled;
55
58
  - (BOOL) hasHttpHeaders;
56
59
  - (BOOL) hasSaveBatteryOnBackground;
57
60
  - (BOOL) hasMaxLocations;
@@ -12,7 +12,7 @@
12
12
 
13
13
  @implementation MAURConfig
14
14
 
15
- @synthesize stationaryRadius, distanceFilter, desiredAccuracy, _debug, activityType, activitiesInterval, _stopOnTerminate, url, syncUrl, syncThreshold, httpHeaders, _saveBatteryOnBackground, maxLocations, _pauseLocationUpdates, locationProvider, _template;
15
+ @synthesize stationaryRadius, distanceFilter, desiredAccuracy, _debug, activityType, activitiesInterval, _stopOnTerminate, url, syncUrl, syncThreshold, syncEnabled, httpHeaders, _saveBatteryOnBackground, maxLocations, _pauseLocationUpdates, locationProvider, _template;
16
16
 
17
17
  -(instancetype) initWithDefaults {
18
18
  self = [super init];
@@ -31,6 +31,7 @@
31
31
  _saveBatteryOnBackground = [NSNumber numberWithBool:NO];
32
32
  maxLocations = [NSNumber numberWithInt:10000];
33
33
  syncThreshold = [NSNumber numberWithInt:100];
34
+ syncEnabled = [NSNumber numberWithBool:YES];
34
35
  _pauseLocationUpdates = [NSNumber numberWithBool:NO];
35
36
  locationProvider = [NSNumber numberWithInt:DISTANCE_FILTER_PROVIDER];
36
37
  // template =
@@ -72,6 +73,9 @@
72
73
  if (isNotNull(config[@"syncThreshold"])) {
73
74
  instance.syncThreshold = config[@"syncThreshold"];
74
75
  }
76
+ if (isNotNull(config[@"sync"])) {
77
+ instance.syncEnabled = config[@"sync"];
78
+ }
75
79
  if (config[@"httpHeaders"] != nil) {
76
80
  instance.httpHeaders = config[@"httpHeaders"];
77
81
  }
@@ -136,6 +140,9 @@
136
140
  if ([newConfig hasSyncThreshold]) {
137
141
  merger.syncThreshold = newConfig.syncThreshold;
138
142
  }
143
+ if ([newConfig hasSyncEnabled]) {
144
+ merger.syncEnabled = [NSNumber numberWithBool:[newConfig syncEnabled]];
145
+ }
139
146
  if ([newConfig hasHttpHeaders]) {
140
147
  merger.httpHeaders = newConfig.httpHeaders;
141
148
  }
@@ -172,6 +179,7 @@
172
179
  copy.url = url;
173
180
  copy.syncUrl = syncUrl;
174
181
  copy.syncThreshold = syncThreshold;
182
+ copy.syncEnabled = syncEnabled;
175
183
  copy.httpHeaders = httpHeaders;
176
184
  copy._saveBatteryOnBackground = _saveBatteryOnBackground;
177
185
  copy.maxLocations = maxLocations;
@@ -277,6 +285,16 @@
277
285
  return syncThreshold != nil;
278
286
  }
279
287
 
288
+ - (BOOL) hasSyncEnabled
289
+ {
290
+ return syncEnabled != nil;
291
+ }
292
+
293
+ - (BOOL) syncEnabled
294
+ {
295
+ return syncEnabled == nil ? YES : [syncEnabled boolValue];
296
+ }
297
+
280
298
  - (BOOL) hasHttpHeaders
281
299
  {
282
300
  return httpHeaders != nil;
@@ -467,6 +485,7 @@
467
485
  if ([self hasDebug]) [dict setObject:self._debug forKey:@"debug"];
468
486
  if ([self hasStopOnTerminate]) [dict setObject:self._stopOnTerminate forKey:@"stopOnTerminate"];
469
487
  if ([self hasSyncThreshold]) [dict setObject:self.syncThreshold forKey:@"syncThreshold"];
488
+ if ([self hasSyncEnabled]) [dict setObject:syncEnabled forKey:@"sync"];
470
489
  if ([self hasSaveBatteryOnBackground]) [dict setObject:self._saveBatteryOnBackground forKey:@"saveBatteryOnBackground"];
471
490
  if ([self hasMaxLocations]) [dict setObject:self.maxLocations forKey:@"maxLocations"];
472
491
  if ([self hasPauseLocationUpdates]) [dict setObject:self._pauseLocationUpdates forKey:@"pauseLocationUpdates"];