@freeappstore/sdk 0.14.36 → 0.15.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.
package/README.md CHANGED
@@ -161,6 +161,37 @@ const keys = await fas.keys.status();
161
161
 
162
162
  Supported providers: OpenAI, Anthropic, Google AI, OpenRouter, Replicate, Stability AI, ElevenLabs, Stripe.
163
163
 
164
+ ### Push reminders (`fas.push`)
165
+
166
+ Scheduled Web Push notifications for the signed-in user. The platform sends a push to each of the user's devices for your app when a reminder comes due (checked every 15 minutes).
167
+
168
+ ```ts
169
+ const { supported, reason } = fas.push.isSupported();
170
+ // reason 'requires-home-screen': on iPhone/iPad, add the app to the Home Screen first
171
+
172
+ // From a button tap (browsers block permission prompts outside a user gesture):
173
+ await fas.push.subscribe(); // asks permission, registers this device
174
+
175
+ await fas.push.schedule('period-due', { at: new Date('2026-11-02T09:00') });
176
+ await fas.push.schedule('log', { daily: '21:00' }, { quietHours: { start: '22:00', end: '07:00' } });
177
+ await fas.push.schedule('refill', { everyDays: 28, at: '09:00' }, { tz: 'Europe/London' });
178
+
179
+ const reminders = await fas.push.list(); // [{ reminderId, when, tz, quietHours, nextAt }]
180
+ await fas.push.cancel('log');
181
+ await fas.push.unsubscribe(); // this device only
182
+ ```
183
+
184
+ Errors: `PushNotSignedInError`, `PushNotSupportedError` (with `reason`), `PushPermissionDeniedError`, `PushNotConfiguredError`.
185
+
186
+ Pushes carry **no payload**: your service worker shows the notification text, so nothing about the reminder passes through the browser's push service. With vite-plugin-pwa's `injectManifest` strategy, add this to your service worker:
187
+
188
+ ```ts
189
+ import { registerFasPushHandler } from '@freeappstore/sdk/push-sw';
190
+ registerFasPushHandler({ title: 'Cycle', body: 'Time to check in.', onClick: () => '/' });
191
+ ```
192
+
193
+ Keep the text generic for anything sensitive; it can show on a lock screen. Limits: 10 devices and 20 reminders per user per app.
194
+
164
195
  ### React Hooks
165
196
 
166
197
  Import from `@freeappstore/sdk/hooks`. Requires React 18+ as a peer dependency.
package/dist/index.d.ts CHANGED
@@ -7,6 +7,7 @@ import { Keys } from './keys.js';
7
7
  import { Kv } from './kv.js';
8
8
  import { Logger } from './logger.js';
9
9
  import { ApiProxy } from './proxy.js';
10
+ import { Push } from './push.js';
10
11
  import { Roles } from './roles.js';
11
12
  import { Rooms } from './rooms.js';
12
13
  import type { FasInitOptions } from './types.js';
@@ -15,11 +16,13 @@ export type { AuthProvider } from './auth.js';
15
16
  export type { Collection, GeoBBox, QueryOptions, QueryResult } from './db.js';
16
17
  export { Collections } from './db.js';
17
18
  export type { Friend, FriendSearchResult, FriendshipStatus } from './friends.js';
19
+ export type { PushIsSupported, PushReminder, PushScheduleOptions, PushSupportReason, PushWhen, } from './push.js';
20
+ export { PushNotConfiguredError, PushNotSignedInError, PushNotSupportedError, PushPermissionDeniedError, } from './push.js';
18
21
  export type { DefaultRole, RoleAssignment } from './roles.js';
19
22
  export { DEFAULT_ROLES } from './roles.js';
20
23
  export type { ConnectionState, Room, RoomMessage, RoomPeer } from './rooms.js';
21
24
  export type { FasInitOptions, Unsubscribe, User } from './types.js';
22
- /** Root SDK instance — provides auth, kv, collections, counters, rooms, and proxy sub-clients. */
25
+ /** Root SDK instance — provides auth, kv, collections, counters, rooms, proxy, push and the other sub-clients. */
23
26
  export declare class FreeAppStore {
24
27
  readonly auth: Auth;
25
28
  readonly kv: Kv;
@@ -33,6 +36,7 @@ export declare class FreeAppStore {
33
36
  readonly log: Logger;
34
37
  readonly webhooks: Webhooks;
35
38
  readonly friends: Friends;
39
+ readonly push: Push;
36
40
  constructor(opts: FasInitOptions);
37
41
  }
38
42
  /** Create a new FreeAppStore SDK instance for the given app. */
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AACtC,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,EAAE,EAAE,MAAM,SAAS,CAAC;AAC7B,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AACjD,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAEzC,YAAY,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAC9C,YAAY,EAAE,UAAU,EAAE,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAC9E,OAAO,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AACtC,YAAY,EAAE,MAAM,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AACjF,YAAY,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAC9D,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAC3C,YAAY,EAAE,eAAe,EAAE,IAAI,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAC/E,YAAY,EAAE,cAAc,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAOpE,kGAAkG;AAClG,qBAAa,YAAY;IACvB,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC;IACpB,QAAQ,CAAC,EAAE,EAAE,EAAE,CAAC;IAChB,QAAQ,CAAC,WAAW,EAAE,WAAW,CAAC;IAClC,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC;IAC5B,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC;IACtB,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC;IACzB,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC;IACpB,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC;IACtB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC;IAC5B,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;gBAEd,IAAI,EAAE,cAAc;CAejC;AAED,gEAAgE;AAChE,wBAAgB,OAAO,CAAC,IAAI,EAAE,cAAc,GAAG,YAAY,CAE1D"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AACtC,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,EAAE,EAAE,MAAM,SAAS,CAAC;AAC7B,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AACjD,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAEzC,YAAY,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAC9C,YAAY,EAAE,UAAU,EAAE,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAC9E,OAAO,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AACtC,YAAY,EAAE,MAAM,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AACjF,YAAY,EACV,eAAe,EACf,YAAY,EACZ,mBAAmB,EACnB,iBAAiB,EACjB,QAAQ,GACT,MAAM,WAAW,CAAC;AACnB,OAAO,EACL,sBAAsB,EACtB,oBAAoB,EACpB,qBAAqB,EACrB,yBAAyB,GAC1B,MAAM,WAAW,CAAC;AACnB,YAAY,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAC9D,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAC3C,YAAY,EAAE,eAAe,EAAE,IAAI,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAC/E,YAAY,EAAE,cAAc,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAOpE,kHAAkH;AAClH,qBAAa,YAAY;IACvB,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC;IACpB,QAAQ,CAAC,EAAE,EAAE,EAAE,CAAC;IAChB,QAAQ,CAAC,WAAW,EAAE,WAAW,CAAC;IAClC,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC;IAC5B,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC;IACtB,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC;IACzB,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC;IACpB,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC;IACtB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC;IAC5B,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC;gBAER,IAAI,EAAE,cAAc;CAgBjC;AAED,gEAAgE;AAChE,wBAAgB,OAAO,CAAC,IAAI,EAAE,cAAc,GAAG,YAAY,CAE1D"}
package/dist/index.js CHANGED
@@ -7,17 +7,19 @@ import { Keys } from './keys.js';
7
7
  import { Kv } from './kv.js';
8
8
  import { Logger } from './logger.js';
9
9
  import { ApiProxy } from './proxy.js';
10
+ import { Push } from './push.js';
10
11
  import { Roles } from './roles.js';
11
12
  import { Rooms } from './rooms.js';
12
13
  import { Webhooks } from './webhooks.js';
13
14
  export { Collections } from './db.js';
15
+ export { PushNotConfiguredError, PushNotSignedInError, PushNotSupportedError, PushPermissionDeniedError, } from './push.js';
14
16
  export { DEFAULT_ROLES } from './roles.js';
15
17
  // React-dependent exports (useVoiceInput, UseVoiceInputReturn) live in the
16
18
  // './hooks' subpath, NOT this barrel. Re-exporting them here forced the main
17
19
  // entry to statically import 'react' — an *optional* peer dep — so any
18
20
  // non-React consumer doing `import { initApp } from '@freeappstore/sdk'`
19
21
  // crashed with ERR_MODULE_NOT_FOUND: react. See prod-smoke steps 2 & 6.
20
- /** Root SDK instance — provides auth, kv, collections, counters, rooms, and proxy sub-clients. */
22
+ /** Root SDK instance — provides auth, kv, collections, counters, rooms, proxy, push and the other sub-clients. */
21
23
  export class FreeAppStore {
22
24
  auth;
23
25
  kv;
@@ -31,6 +33,7 @@ export class FreeAppStore {
31
33
  log;
32
34
  webhooks;
33
35
  friends;
36
+ push;
34
37
  constructor(opts) {
35
38
  const apiBase = opts.apiBase ?? 'https://api.freeappstore.online';
36
39
  this.auth = new Auth(opts.appId, apiBase);
@@ -45,6 +48,7 @@ export class FreeAppStore {
45
48
  this.log = new Logger(opts.appId, apiBase, this.auth);
46
49
  this.webhooks = new Webhooks(opts.appId, apiBase, this.auth);
47
50
  this.friends = new Friends(opts.appId, apiBase, this.auth);
51
+ this.push = new Push(opts.appId, apiBase, this.auth);
48
52
  }
49
53
  }
50
54
  /** Create a new FreeAppStore SDK instance for the given app. */
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AACtC,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,EAAE,EAAE,MAAM,SAAS,CAAC;AAC7B,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAEnC,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAIzC,OAAO,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAGtC,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAG3C,2EAA2E;AAC3E,6EAA6E;AAC7E,uEAAuE;AACvE,yEAAyE;AACzE,wEAAwE;AAExE,kGAAkG;AAClG,MAAM,OAAO,YAAY;IACd,IAAI,CAAO;IACX,EAAE,CAAK;IACP,WAAW,CAAc;IACzB,QAAQ,CAAW;IACnB,KAAK,CAAQ;IACb,KAAK,CAAW;IAChB,KAAK,CAAQ;IACb,IAAI,CAAO;IACX,KAAK,CAAQ;IACb,GAAG,CAAS;IACZ,QAAQ,CAAW;IACnB,OAAO,CAAU;IAE1B,YAAY,IAAoB;QAC9B,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,IAAI,iCAAiC,CAAC;QAClE,IAAI,CAAC,IAAI,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;QAC1C,IAAI,CAAC,EAAE,GAAG,IAAI,EAAE,CAAC,IAAI,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;QACjD,IAAI,CAAC,WAAW,GAAG,IAAI,WAAW,CAAC,IAAI,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;QACnE,IAAI,CAAC,QAAQ,GAAG,IAAI,QAAQ,CAAC,IAAI,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;QAC7D,IAAI,CAAC,KAAK,GAAG,IAAI,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;QACvD,IAAI,CAAC,KAAK,GAAG,IAAI,QAAQ,CAAC,IAAI,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;QAC1D,IAAI,CAAC,KAAK,GAAG,IAAI,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;QACvD,IAAI,CAAC,IAAI,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;QACrD,IAAI,CAAC,KAAK,GAAG,IAAI,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;QACvD,IAAI,CAAC,GAAG,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;QACtD,IAAI,CAAC,QAAQ,GAAG,IAAI,QAAQ,CAAC,IAAI,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;QAC7D,IAAI,CAAC,OAAO,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;IAC7D,CAAC;CACF;AAED,gEAAgE;AAChE,MAAM,UAAU,OAAO,CAAC,IAAoB;IAC1C,OAAO,IAAI,YAAY,CAAC,IAAI,CAAC,CAAC;AAChC,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/logger.d.ts CHANGED
@@ -35,7 +35,7 @@ export interface BuildMeta {
35
35
  viewport: string;
36
36
  theme?: string | undefined;
37
37
  }
38
- export declare const SDK_VERSION = "0.14.36";
38
+ export declare const SDK_VERSION = "0.15.0";
39
39
  export declare class Logger {
40
40
  private readonly appId;
41
41
  private readonly apiBase;
@@ -1 +1 @@
1
- {"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../src/logger.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEtC;;;;;;;;;;;;;;;GAeG;AAEH,MAAM,MAAM,QAAQ,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;AAE3D,MAAM,WAAW,QAAQ;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,QAAQ,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,8DAA8D;IAC9D,KAAK,CAAC,EAAE,SAAS,CAAC;CACnB;AAED,MAAM,WAAW,SAAS;IACxB,UAAU,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAChC,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC/B,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC/B,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAC5B;AAID,eAAO,MAAM,WAAW,YAAY,CAAC;AAOrC,qBAAa,MAAM;IAYf,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,OAAO,CAAC,QAAQ,CAAC,IAAI;IAbvB,OAAO,CAAC,MAAM,CAAkB;IAChC,OAAO,CAAC,WAAW,CAA+C;IAClE,OAAO,CAAC,aAAa,CAAS;IAK9B,OAAO,CAAC,eAAe,CAAK;IAC5B,OAAO,CAAC,OAAO,CAAK;gBAGD,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,IAAI;IAW7B,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO;IAGrC,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO;IAGpC,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO;IAGpC,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO;IAIrC,oDAAoD;IACpD,OAAO,IAAI,QAAQ,EAAE;IAIrB,sEAAsE;IACtE,IAAI,IAAI,MAAM;IAUd,8CAA8C;IAC9C,KAAK;IASL,+CAA+C;IACzC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAI5B,kDAAkD;IAClD,YAAY,IAAI,SAAS;IAiBzB,4CAA4C;IAC5C,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM;IASrF,qEAAqE;IACrE,YAAY,CACV,OAAO,EAAE,MAAM,EACf,IAAI,EAAE;QACJ,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;QAC3B,cAAc,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;QACpC,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;KAC3B;IAOH,OAAO,CAAC,GAAG;IAmBX,OAAO,CAAC,qBAAqB;IAe7B,OAAO,CAAC,aAAa;IAUrB,OAAO,CAAC,eAAe;IAevB,OAAO,CAAC,gBAAgB;YAMV,WAAW;IAYzB,OAAO,CAAC,SAAS,CAA8B;YAEjC,aAAa;IA0B3B,OAAO;CAGR"}
1
+ {"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../src/logger.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEtC;;;;;;;;;;;;;;;GAeG;AAEH,MAAM,MAAM,QAAQ,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;AAE3D,MAAM,WAAW,QAAQ;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,QAAQ,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,8DAA8D;IAC9D,KAAK,CAAC,EAAE,SAAS,CAAC;CACnB;AAED,MAAM,WAAW,SAAS;IACxB,UAAU,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAChC,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC/B,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC/B,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAC5B;AAID,eAAO,MAAM,WAAW,WAAW,CAAC;AAOpC,qBAAa,MAAM;IAYf,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,OAAO,CAAC,QAAQ,CAAC,IAAI;IAbvB,OAAO,CAAC,MAAM,CAAkB;IAChC,OAAO,CAAC,WAAW,CAA+C;IAClE,OAAO,CAAC,aAAa,CAAS;IAK9B,OAAO,CAAC,eAAe,CAAK;IAC5B,OAAO,CAAC,OAAO,CAAK;gBAGD,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,IAAI;IAW7B,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO;IAGrC,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO;IAGpC,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO;IAGpC,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO;IAIrC,oDAAoD;IACpD,OAAO,IAAI,QAAQ,EAAE;IAIrB,sEAAsE;IACtE,IAAI,IAAI,MAAM;IAUd,8CAA8C;IAC9C,KAAK;IASL,+CAA+C;IACzC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAI5B,kDAAkD;IAClD,YAAY,IAAI,SAAS;IAiBzB,4CAA4C;IAC5C,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM;IASrF,qEAAqE;IACrE,YAAY,CACV,OAAO,EAAE,MAAM,EACf,IAAI,EAAE;QACJ,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;QAC3B,cAAc,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;QACpC,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;KAC3B;IAOH,OAAO,CAAC,GAAG;IAmBX,OAAO,CAAC,qBAAqB;IAe7B,OAAO,CAAC,aAAa;IAUrB,OAAO,CAAC,eAAe;IAevB,OAAO,CAAC,gBAAgB;YAMV,WAAW;IAYzB,OAAO,CAAC,SAAS,CAA8B;YAEjC,aAAa;IA0B3B,OAAO;CAGR"}
package/dist/logger.js CHANGED
@@ -1,6 +1,6 @@
1
1
  // Must track package.json version — bumped on release. Guarded by version.test.ts
2
2
  // so a forgotten bump fails CI instead of silently misattributing telemetry.
3
- export const SDK_VERSION = '0.14.36';
3
+ export const SDK_VERSION = '0.15.0';
4
4
  const MEMORY_LIMIT = 200;
5
5
  const STORAGE_LIMIT = 500;
6
6
  const STORAGE_KEY_PREFIX = 'fas_logs:';
@@ -1 +1 @@
1
- {"version":3,"file":"logger.js","sourceRoot":"","sources":["../src/logger.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"logger.js","sourceRoot":"","sources":["../src/logger.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,30 @@
1
+ /**
2
+ * Service-worker side of `fas.push`. Import it in your service worker entry
3
+ * (vite-plugin-pwa `strategies: 'injectManifest'`, e.g. `src/sw.ts`):
4
+ *
5
+ * ```ts
6
+ * import { registerFasPushHandler } from '@freeappstore/sdk/push-sw'
7
+ * registerFasPushHandler({ title: 'Cycle', body: 'Time to check in.' })
8
+ * ```
9
+ *
10
+ * Pushes from the platform carry no payload, so the reminder's text lives
11
+ * here, in your app, and nothing about it passes through the browser's push
12
+ * service. Keep it generic for anything sensitive ("Check your calendar"),
13
+ * since it can show on a lock screen. Tapping the notification focuses an
14
+ * open window of the app, or opens one.
15
+ */
16
+ export interface FasPushHandlerOptions {
17
+ /** Notification title. Default: 'Reminder'. */
18
+ title?: string;
19
+ /** Notification body. Default: 'Open the app to see what\'s due.' */
20
+ body?: string;
21
+ /** Icon URL. Default: '/icon-192.png' (the template's icon). */
22
+ icon?: string;
23
+ /** Replaces an earlier notification with the same tag instead of stacking. Default: 'fas-push'. */
24
+ tag?: string;
25
+ /** The URL to open or focus when tapped. Default: the service worker's scope (the app's start). */
26
+ onClick?: () => string;
27
+ }
28
+ /** Shows a notification for each fas.push push and focuses or opens the app when it's tapped. */
29
+ export declare function registerFasPushHandler(opts?: FasPushHandlerOptions): void;
30
+ //# sourceMappingURL=push-sw.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"push-sw.d.ts","sourceRoot":"","sources":["../src/push-sw.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,MAAM,WAAW,qBAAqB;IACpC,+CAA+C;IAC/C,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,qEAAqE;IACrE,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,gEAAgE;IAChE,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,mGAAmG;IACnG,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,mGAAmG;IACnG,OAAO,CAAC,EAAE,MAAM,MAAM,CAAC;CACxB;AA6BD,iGAAiG;AACjG,wBAAgB,sBAAsB,CAAC,IAAI,GAAE,qBAA0B,GAAG,IAAI,CA0B7E"}
@@ -0,0 +1,40 @@
1
+ /**
2
+ * Service-worker side of `fas.push`. Import it in your service worker entry
3
+ * (vite-plugin-pwa `strategies: 'injectManifest'`, e.g. `src/sw.ts`):
4
+ *
5
+ * ```ts
6
+ * import { registerFasPushHandler } from '@freeappstore/sdk/push-sw'
7
+ * registerFasPushHandler({ title: 'Cycle', body: 'Time to check in.' })
8
+ * ```
9
+ *
10
+ * Pushes from the platform carry no payload, so the reminder's text lives
11
+ * here, in your app, and nothing about it passes through the browser's push
12
+ * service. Keep it generic for anything sensitive ("Check your calendar"),
13
+ * since it can show on a lock screen. Tapping the notification focuses an
14
+ * open window of the app, or opens one.
15
+ */
16
+ /** Shows a notification for each fas.push push and focuses or opens the app when it's tapped. */
17
+ export function registerFasPushHandler(opts = {}) {
18
+ const sw = globalThis;
19
+ sw.addEventListener('push', (event) => {
20
+ event.waitUntil(sw.registration.showNotification(opts.title ?? 'Reminder', {
21
+ body: opts.body ?? "Open the app to see what's due.",
22
+ icon: opts.icon ?? '/icon-192.png',
23
+ tag: opts.tag ?? 'fas-push',
24
+ }));
25
+ });
26
+ sw.addEventListener('notificationclick', (event) => {
27
+ const e = event;
28
+ e.notification.close();
29
+ const target = new URL(opts.onClick?.() ?? sw.registration.scope, sw.registration.scope).href;
30
+ e.waitUntil(sw.clients.matchAll({ type: 'window', includeUncontrolled: true }).then(async (windows) => {
31
+ const open = windows.find((w) => w.url.startsWith(sw.registration.scope));
32
+ if (!open)
33
+ return sw.clients.openWindow(target);
34
+ await open.focus();
35
+ if (open.url !== target && open.navigate)
36
+ await open.navigate(target);
37
+ }));
38
+ });
39
+ }
40
+ //# sourceMappingURL=push-sw.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"push-sw.js","sourceRoot":"","sources":["../src/push-sw.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AA0CH,iGAAiG;AACjG,MAAM,UAAU,sBAAsB,CAAC,OAA8B,EAAE;IACrE,MAAM,EAAE,GAAG,UAAgC,CAAC;IAE5C,EAAE,CAAC,gBAAgB,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,EAAE;QACnC,KAA2B,CAAC,SAAS,CACpC,EAAE,CAAC,YAAY,CAAC,gBAAgB,CAAC,IAAI,CAAC,KAAK,IAAI,UAAU,EAAE;YACzD,IAAI,EAAE,IAAI,CAAC,IAAI,IAAI,iCAAiC;YACpD,IAAI,EAAE,IAAI,CAAC,IAAI,IAAI,eAAe;YAClC,GAAG,EAAE,IAAI,CAAC,GAAG,IAAI,UAAU;SAC5B,CAAC,CACH,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gBAAgB,CAAC,mBAAmB,EAAE,CAAC,KAAK,EAAE,EAAE;QACjD,MAAM,CAAC,GAAG,KAA4B,CAAC;QACvC,CAAC,CAAC,YAAY,CAAC,KAAK,EAAE,CAAC;QACvB,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,IAAI,EAAE,CAAC,YAAY,CAAC,KAAK,EAAE,EAAE,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC;QAC9F,CAAC,CAAC,SAAS,CACT,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,mBAAmB,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;YACxF,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC;YAC1E,IAAI,CAAC,IAAI;gBAAE,OAAO,EAAE,CAAC,OAAO,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;YAChD,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC;YACnB,IAAI,IAAI,CAAC,GAAG,KAAK,MAAM,IAAI,IAAI,CAAC,QAAQ;gBAAE,MAAM,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QACxE,CAAC,CAAC,CACH,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC"}
package/dist/push.d.ts ADDED
@@ -0,0 +1,116 @@
1
+ import type { Auth } from './auth.js';
2
+ /**
3
+ * Web Push reminders for the signed-in user (`fas.push`).
4
+ *
5
+ * Register this device with `subscribe()` (from a user gesture), then set
6
+ * reminders with `schedule()`; the platform sends a push to every device the
7
+ * user subscribed for this app when a reminder comes due (every 15 minutes,
8
+ * so up to ~15 min late). Pushes carry no payload: the app's service worker
9
+ * shows its own notification text, so nothing about the reminder travels
10
+ * through the browser's push service. Use `@freeappstore/sdk/push-sw` in the
11
+ * service worker.
12
+ *
13
+ * Limits (enforced server-side): 10 devices and 20 reminders per user per app.
14
+ */
15
+ /** No session: sign in before subscribing or scheduling. */
16
+ export declare class PushNotSignedInError extends Error {
17
+ constructor();
18
+ }
19
+ /** This browser can't receive push here; `reason` says why (see `PushIsSupported`). */
20
+ export declare class PushNotSupportedError extends Error {
21
+ readonly reason: Exclude<PushSupportReason, 'ok'>;
22
+ constructor(reason: Exclude<PushSupportReason, 'ok'>);
23
+ }
24
+ /** The user declined (or previously blocked) notifications for this site. */
25
+ export declare class PushPermissionDeniedError extends Error {
26
+ constructor();
27
+ }
28
+ /** The platform has push turned off (its VAPID key isn't configured yet). */
29
+ export declare class PushNotConfiguredError extends Error {
30
+ constructor();
31
+ }
32
+ export type PushSupportReason = 'ok' | 'requires-home-screen' | 'browser-unsupported';
33
+ export interface PushIsSupported {
34
+ supported: boolean;
35
+ /**
36
+ * `'requires-home-screen'`: iPhone/iPad Safari only allows web push for
37
+ * apps added to the Home Screen and opened from there.
38
+ */
39
+ reason: PushSupportReason;
40
+ }
41
+ /** When a reminder fires. Times are wall-clock `HH:MM` (24-hour) in `tz`. */
42
+ export type PushWhen =
43
+ /** Once, at this instant. */
44
+ {
45
+ at: Date | string | number;
46
+ }
47
+ /** Every day at this time. */
48
+ | {
49
+ daily: string;
50
+ }
51
+ /** Every N days at `at` (HH:MM). */
52
+ | {
53
+ everyDays: number;
54
+ at: string;
55
+ };
56
+ export interface PushScheduleOptions {
57
+ /** IANA time zone, e.g. 'Europe/London'. Defaults to this device's zone. */
58
+ tz?: string;
59
+ /** Hold reminders that fall inside this daily window until it ends (may wrap midnight). */
60
+ quietHours?: {
61
+ start: string;
62
+ end: string;
63
+ };
64
+ }
65
+ export interface PushReminder {
66
+ reminderId: string;
67
+ when: PushWhen;
68
+ tz: string;
69
+ quietHours: {
70
+ start: string;
71
+ end: string;
72
+ } | null;
73
+ /** When it will next be sent. */
74
+ nextAt: Date;
75
+ }
76
+ export declare class Push {
77
+ private readonly appId;
78
+ private readonly apiBase;
79
+ private readonly auth;
80
+ constructor(appId: string, apiBase: string, auth: Auth);
81
+ /** Whether this browser can receive push for this app right now, and if not, why. */
82
+ isSupported(): PushIsSupported;
83
+ /** The notification permission for this site: 'default' (not asked yet), 'granted' or 'denied'. */
84
+ permission(): NotificationPermission;
85
+ /**
86
+ * Asks for notification permission and registers this device for the
87
+ * signed-in user. Call it from a user gesture (a button tap): browsers
88
+ * ignore or block permission prompts that aren't. Safe to call again; it
89
+ * re-registers the existing subscription.
90
+ *
91
+ * @throws PushNotSignedInError, PushNotSupportedError, PushPermissionDeniedError, PushNotConfiguredError
92
+ */
93
+ subscribe(): Promise<void>;
94
+ /** Stops push on this device: removes it from the user's devices and unsubscribes the browser. */
95
+ unsubscribe(): Promise<void>;
96
+ /**
97
+ * Creates or replaces a reminder. `reminderId` is yours to choose
98
+ * (1-64 letters, digits, `_` or `-`); scheduling the same id again replaces it.
99
+ *
100
+ * ```ts
101
+ * await fas.push.schedule('period-due', { at: new Date('2026-11-02T09:00') })
102
+ * await fas.push.schedule('log', { daily: '21:00' }, { quietHours: { start: '22:00', end: '07:00' } })
103
+ * await fas.push.schedule('refill', { everyDays: 28, at: '09:00' }, { tz: 'Europe/London' })
104
+ * ```
105
+ */
106
+ schedule(reminderId: string, when: PushWhen, opts?: PushScheduleOptions): Promise<PushReminder>;
107
+ /** Cancels a reminder. Does nothing if it doesn't exist. */
108
+ cancel(reminderId: string): Promise<void>;
109
+ /** The user's reminders for this app, soonest first. */
110
+ list(): Promise<PushReminder[]>;
111
+ private requireToken;
112
+ private vapidPublicKey;
113
+ /** An app-scoped API call; `allow` lists non-2xx statuses to treat as success. */
114
+ private request;
115
+ }
116
+ //# sourceMappingURL=push.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"push.d.ts","sourceRoot":"","sources":["../src/push.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEtC;;;;;;;;;;;;GAYG;AAEH,4DAA4D;AAC5D,qBAAa,oBAAqB,SAAQ,KAAK;;CAK9C;AAED,uFAAuF;AACvF,qBAAa,qBAAsB,SAAQ,KAAK;IAClC,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC,iBAAiB,EAAE,IAAI,CAAC;gBAAxC,MAAM,EAAE,OAAO,CAAC,iBAAiB,EAAE,IAAI,CAAC;CAQ9D;AAED,6EAA6E;AAC7E,qBAAa,yBAA0B,SAAQ,KAAK;;CAKnD;AAED,6EAA6E;AAC7E,qBAAa,sBAAuB,SAAQ,KAAK;;CAKhD;AAED,MAAM,MAAM,iBAAiB,GAAG,IAAI,GAAG,sBAAsB,GAAG,qBAAqB,CAAC;AAEtF,MAAM,WAAW,eAAe;IAC9B,SAAS,EAAE,OAAO,CAAC;IACnB;;;OAGG;IACH,MAAM,EAAE,iBAAiB,CAAC;CAC3B;AAED,6EAA6E;AAC7E,MAAM,MAAM,QAAQ;AAClB,6BAA6B;AAC3B;IAAE,EAAE,EAAE,IAAI,GAAG,MAAM,GAAG,MAAM,CAAA;CAAE;AAChC,8BAA8B;GAC5B;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE;AACnB,oCAAoC;GAClC;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,MAAM,CAAA;CAAE,CAAC;AAEtC,MAAM,WAAW,mBAAmB;IAClC,4EAA4E;IAC5E,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,2FAA2F;IAC3F,UAAU,CAAC,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,CAAC;CAC7C;AAED,MAAM,WAAW,YAAY;IAC3B,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,QAAQ,CAAC;IACf,EAAE,EAAE,MAAM,CAAC;IACX,UAAU,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;IAClD,iCAAiC;IACjC,MAAM,EAAE,IAAI,CAAC;CACd;AA4DD,qBAAa,IAAI;IAEb,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,OAAO,CAAC,QAAQ,CAAC,IAAI;gBAFJ,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,IAAI;IAG7B,qFAAqF;IACrF,WAAW,IAAI,eAAe;IAgB9B,mGAAmG;IACnG,UAAU,IAAI,sBAAsB;IAIpC;;;;;;;OAOG;IACG,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC;IAyBhC,kGAAkG;IAC5F,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC;IAgBlC;;;;;;;;;OASG;IACG,QAAQ,CACZ,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,QAAQ,EACd,IAAI,GAAE,mBAAwB,GAC7B,OAAO,CAAC,YAAY,CAAC;IAgBxB,4DAA4D;IACtD,MAAM,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAW/C,wDAAwD;IAClD,IAAI,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC;IAOrC,OAAO,CAAC,YAAY;YAMN,cAAc;IAO5B,kFAAkF;YACpE,OAAO;CAiCtB"}
package/dist/push.js ADDED
@@ -0,0 +1,237 @@
1
+ /**
2
+ * Web Push reminders for the signed-in user (`fas.push`).
3
+ *
4
+ * Register this device with `subscribe()` (from a user gesture), then set
5
+ * reminders with `schedule()`; the platform sends a push to every device the
6
+ * user subscribed for this app when a reminder comes due (every 15 minutes,
7
+ * so up to ~15 min late). Pushes carry no payload: the app's service worker
8
+ * shows its own notification text, so nothing about the reminder travels
9
+ * through the browser's push service. Use `@freeappstore/sdk/push-sw` in the
10
+ * service worker.
11
+ *
12
+ * Limits (enforced server-side): 10 devices and 20 reminders per user per app.
13
+ */
14
+ /** No session: sign in before subscribing or scheduling. */
15
+ export class PushNotSignedInError extends Error {
16
+ constructor() {
17
+ super('Not signed in.');
18
+ this.name = 'PushNotSignedInError';
19
+ }
20
+ }
21
+ /** This browser can't receive push here; `reason` says why (see `PushIsSupported`). */
22
+ export class PushNotSupportedError extends Error {
23
+ reason;
24
+ constructor(reason) {
25
+ super(reason === 'requires-home-screen'
26
+ ? 'Notifications need the app installed: on iPhone and iPad, Share → Add to Home Screen, then open it from there.'
27
+ : "This browser doesn't support push notifications.");
28
+ this.reason = reason;
29
+ this.name = 'PushNotSupportedError';
30
+ }
31
+ }
32
+ /** The user declined (or previously blocked) notifications for this site. */
33
+ export class PushPermissionDeniedError extends Error {
34
+ constructor() {
35
+ super('Notification permission was not granted.');
36
+ this.name = 'PushPermissionDeniedError';
37
+ }
38
+ }
39
+ /** The platform has push turned off (its VAPID key isn't configured yet). */
40
+ export class PushNotConfiguredError extends Error {
41
+ constructor() {
42
+ super('Push notifications are not available on the platform yet.');
43
+ this.name = 'PushNotConfiguredError';
44
+ }
45
+ }
46
+ function toRule(when) {
47
+ if ('daily' in when)
48
+ return { type: 'daily', time: when.daily };
49
+ if ('everyDays' in when)
50
+ return { type: 'every', days: when.everyDays, time: when.at };
51
+ const at = when.at instanceof Date
52
+ ? when.at.getTime()
53
+ : typeof when.at === 'string'
54
+ ? Date.parse(when.at)
55
+ : when.at;
56
+ if (!Number.isFinite(at))
57
+ throw new Error('push: `at` must be a valid date.');
58
+ return { type: 'at', at };
59
+ }
60
+ function fromRule(rule) {
61
+ if (rule.type === 'daily')
62
+ return { daily: rule.time };
63
+ if (rule.type === 'every')
64
+ return { everyDays: rule.days, at: rule.time };
65
+ return { at: new Date(rule.at) };
66
+ }
67
+ /** base64url (the VAPID key format) → bytes for `applicationServerKey`. */
68
+ function base64UrlToBytes(value) {
69
+ const b64 = value.replace(/-/g, '+').replace(/_/g, '/');
70
+ const bin = atob(b64 + '='.repeat((4 - (b64.length % 4)) % 4));
71
+ const bytes = new Uint8Array(new ArrayBuffer(bin.length));
72
+ for (let i = 0; i < bin.length; i++)
73
+ bytes[i] = bin.charCodeAt(i);
74
+ return bytes;
75
+ }
76
+ function isIos() {
77
+ const nav = navigator;
78
+ return (/iPad|iPhone|iPod/.test(nav.userAgent) ||
79
+ // iPadOS reports itself as a Mac.
80
+ (nav.platform === 'MacIntel' && (nav.maxTouchPoints ?? 0) > 1));
81
+ }
82
+ function isStandalone() {
83
+ const nav = navigator;
84
+ return (nav.standalone === true ||
85
+ (typeof matchMedia === 'function' && matchMedia('(display-mode: standalone)').matches));
86
+ }
87
+ export class Push {
88
+ appId;
89
+ apiBase;
90
+ auth;
91
+ constructor(appId, apiBase, auth) {
92
+ this.appId = appId;
93
+ this.apiBase = apiBase;
94
+ this.auth = auth;
95
+ }
96
+ /** Whether this browser can receive push for this app right now, and if not, why. */
97
+ isSupported() {
98
+ if (typeof window === 'undefined' || typeof navigator === 'undefined') {
99
+ return { supported: false, reason: 'browser-unsupported' };
100
+ }
101
+ // iOS hides the Push API until the app runs from the Home Screen, so check this first.
102
+ if (isIos() && !isStandalone())
103
+ return { supported: false, reason: 'requires-home-screen' };
104
+ if (!('serviceWorker' in navigator) ||
105
+ !('PushManager' in window) ||
106
+ !('Notification' in window)) {
107
+ return { supported: false, reason: 'browser-unsupported' };
108
+ }
109
+ return { supported: true, reason: 'ok' };
110
+ }
111
+ /** The notification permission for this site: 'default' (not asked yet), 'granted' or 'denied'. */
112
+ permission() {
113
+ return typeof Notification === 'undefined' ? 'denied' : Notification.permission;
114
+ }
115
+ /**
116
+ * Asks for notification permission and registers this device for the
117
+ * signed-in user. Call it from a user gesture (a button tap): browsers
118
+ * ignore or block permission prompts that aren't. Safe to call again; it
119
+ * re-registers the existing subscription.
120
+ *
121
+ * @throws PushNotSignedInError, PushNotSupportedError, PushPermissionDeniedError, PushNotConfiguredError
122
+ */
123
+ async subscribe() {
124
+ const token = this.requireToken();
125
+ const support = this.isSupported();
126
+ if (!support.supported)
127
+ throw new PushNotSupportedError(support.reason);
128
+ // Ask first, while the user gesture is still active.
129
+ const permission = Notification.permission === 'granted' ? 'granted' : await Notification.requestPermission();
130
+ if (permission !== 'granted')
131
+ throw new PushPermissionDeniedError();
132
+ const registration = await navigator.serviceWorker.ready;
133
+ let subscription = await registration.pushManager.getSubscription();
134
+ if (!subscription) {
135
+ subscription = await registration.pushManager.subscribe({
136
+ userVisibleOnly: true,
137
+ applicationServerKey: base64UrlToBytes(await this.vapidPublicKey()),
138
+ });
139
+ }
140
+ const json = subscription.toJSON();
141
+ await this.request(token, 'POST', '/push/subscriptions', {
142
+ endpoint: json.endpoint,
143
+ keys: json.keys,
144
+ });
145
+ }
146
+ /** Stops push on this device: removes it from the user's devices and unsubscribes the browser. */
147
+ async unsubscribe() {
148
+ const token = this.requireToken();
149
+ if (!this.isSupported().supported)
150
+ return;
151
+ const registration = await navigator.serviceWorker.ready;
152
+ const subscription = await registration.pushManager.getSubscription();
153
+ if (!subscription)
154
+ return;
155
+ await this.request(token, 'DELETE', '/push/subscriptions', { endpoint: subscription.endpoint }, [404]);
156
+ await subscription.unsubscribe();
157
+ }
158
+ /**
159
+ * Creates or replaces a reminder. `reminderId` is yours to choose
160
+ * (1-64 letters, digits, `_` or `-`); scheduling the same id again replaces it.
161
+ *
162
+ * ```ts
163
+ * await fas.push.schedule('period-due', { at: new Date('2026-11-02T09:00') })
164
+ * await fas.push.schedule('log', { daily: '21:00' }, { quietHours: { start: '22:00', end: '07:00' } })
165
+ * await fas.push.schedule('refill', { everyDays: 28, at: '09:00' }, { tz: 'Europe/London' })
166
+ * ```
167
+ */
168
+ async schedule(reminderId, when, opts = {}) {
169
+ const token = this.requireToken();
170
+ const body = {
171
+ rule: toRule(when),
172
+ tz: opts.tz ?? Intl.DateTimeFormat().resolvedOptions().timeZone,
173
+ ...(opts.quietHours && { quietHours: opts.quietHours }),
174
+ };
175
+ const res = await this.request(token, 'PUT', `/push/schedules/${encodeURIComponent(reminderId)}`, body);
176
+ return toReminder((await res.json()));
177
+ }
178
+ /** Cancels a reminder. Does nothing if it doesn't exist. */
179
+ async cancel(reminderId) {
180
+ const token = this.requireToken();
181
+ await this.request(token, 'DELETE', `/push/schedules/${encodeURIComponent(reminderId)}`, undefined, [404]);
182
+ }
183
+ /** The user's reminders for this app, soonest first. */
184
+ async list() {
185
+ const token = this.requireToken();
186
+ const res = await this.request(token, 'GET', '/push/schedules');
187
+ const { schedules } = (await res.json());
188
+ return schedules.map(toReminder);
189
+ }
190
+ requireToken() {
191
+ const token = this.auth.token;
192
+ if (!token)
193
+ throw new PushNotSignedInError();
194
+ return token;
195
+ }
196
+ async vapidPublicKey() {
197
+ const res = await fetch(new URL('/v1/push/vapid-public-key', this.apiBase));
198
+ if (res.status === 503)
199
+ throw new PushNotConfiguredError();
200
+ if (!res.ok)
201
+ throw new Error(`push: couldn't get the VAPID key (${res.status})`);
202
+ return (await res.json()).publicKey;
203
+ }
204
+ /** An app-scoped API call; `allow` lists non-2xx statuses to treat as success. */
205
+ async request(token, method, path, body, allow = []) {
206
+ const res = await fetch(new URL(`/v1/apps/${encodeURIComponent(this.appId)}${path}`, this.apiBase), {
207
+ method,
208
+ headers: {
209
+ Authorization: `Bearer ${token}`,
210
+ ...(body !== undefined && { 'Content-Type': 'application/json' }),
211
+ },
212
+ ...(body !== undefined && { body: JSON.stringify(body) }),
213
+ });
214
+ if (res.status === 401) {
215
+ this.auth.handleUnauthorized();
216
+ throw new PushNotSignedInError();
217
+ }
218
+ if (!res.ok && !allow.includes(res.status)) {
219
+ const detail = await res
220
+ .json()
221
+ .then((j) => j.error)
222
+ .catch(() => undefined);
223
+ throw new Error(`push: ${method} ${path} failed (${res.status})${detail ? `: ${detail}` : ''}`);
224
+ }
225
+ return res;
226
+ }
227
+ }
228
+ function toReminder(s) {
229
+ return {
230
+ reminderId: s.reminderId,
231
+ when: fromRule(s.rule),
232
+ tz: s.tz,
233
+ quietHours: s.quietHours,
234
+ nextAt: new Date(s.nextAt),
235
+ };
236
+ }
237
+ //# sourceMappingURL=push.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"push.js","sourceRoot":"","sources":["../src/push.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@freeappstore/sdk",
3
- "version": "0.14.36",
3
+ "version": "0.15.0",
4
4
  "description": "Browser SDK for apps on freeappstore.online — auth, per-user KV, shared counters, document collections, real-time rooms, API proxy, user API key vault, RBAC roles, React hooks, and 18 UI components.",
5
5
  "license": "MIT",
6
6
  "type": "module",
@@ -18,6 +18,10 @@
18
18
  "./ui": {
19
19
  "types": "./dist/ui.d.ts",
20
20
  "import": "./dist/ui.js"
21
+ },
22
+ "./push-sw": {
23
+ "types": "./dist/push-sw.d.ts",
24
+ "import": "./dist/push-sw.js"
21
25
  }
22
26
  },
23
27
  "homepage": "https://github.com/freeappstore-online/platform#readme",