@aleonnet/healthcare-scheduler 0.1.6

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 (170) hide show
  1. package/README.md +264 -0
  2. package/dist/core/EventBus.d.ts +14 -0
  3. package/dist/core/EventBus.d.ts.map +1 -0
  4. package/dist/core/EventBus.js +47 -0
  5. package/dist/core/EventBus.js.map +1 -0
  6. package/dist/core/HealthcareScheduler.d.ts +63 -0
  7. package/dist/core/HealthcareScheduler.d.ts.map +1 -0
  8. package/dist/core/HealthcareScheduler.js +269 -0
  9. package/dist/core/HealthcareScheduler.js.map +1 -0
  10. package/dist/core/types.d.ts +234 -0
  11. package/dist/core/types.d.ts.map +1 -0
  12. package/dist/core/types.js +3 -0
  13. package/dist/core/types.js.map +1 -0
  14. package/dist/database/adapters/MockAdapter.d.ts +37 -0
  15. package/dist/database/adapters/MockAdapter.d.ts.map +1 -0
  16. package/dist/database/adapters/MockAdapter.js +518 -0
  17. package/dist/database/adapters/MockAdapter.js.map +1 -0
  18. package/dist/database/adapters/SQLiteAdapter.d.ts +40 -0
  19. package/dist/database/adapters/SQLiteAdapter.d.ts.map +1 -0
  20. package/dist/database/adapters/SQLiteAdapter.js +147 -0
  21. package/dist/database/adapters/SQLiteAdapter.js.map +1 -0
  22. package/dist/database/adapters/SupabaseAdapter.d.ts +20 -0
  23. package/dist/database/adapters/SupabaseAdapter.d.ts.map +1 -0
  24. package/dist/database/adapters/SupabaseAdapter.js +310 -0
  25. package/dist/database/adapters/SupabaseAdapter.js.map +1 -0
  26. package/dist/database/interfaces.d.ts +20 -0
  27. package/dist/database/interfaces.d.ts.map +1 -0
  28. package/dist/database/interfaces.js +3 -0
  29. package/dist/database/interfaces.js.map +1 -0
  30. package/dist/database/repositories/EventsRepository.d.ts +26 -0
  31. package/dist/database/repositories/EventsRepository.d.ts.map +1 -0
  32. package/dist/database/repositories/EventsRepository.js +91 -0
  33. package/dist/database/repositories/EventsRepository.js.map +1 -0
  34. package/dist/database/repositories/ItemsRepository.d.ts +11 -0
  35. package/dist/database/repositories/ItemsRepository.d.ts.map +1 -0
  36. package/dist/database/repositories/ItemsRepository.js +44 -0
  37. package/dist/database/repositories/ItemsRepository.js.map +1 -0
  38. package/dist/database/repositories/MedicationsRepository.d.ts +40 -0
  39. package/dist/database/repositories/MedicationsRepository.d.ts.map +1 -0
  40. package/dist/database/repositories/MedicationsRepository.js +136 -0
  41. package/dist/database/repositories/MedicationsRepository.js.map +1 -0
  42. package/dist/database/repositories/OccurrencesRepository.d.ts +25 -0
  43. package/dist/database/repositories/OccurrencesRepository.d.ts.map +1 -0
  44. package/dist/database/repositories/OccurrencesRepository.js +150 -0
  45. package/dist/database/repositories/OccurrencesRepository.js.map +1 -0
  46. package/dist/database/repositories/PlansRepository.d.ts +13 -0
  47. package/dist/database/repositories/PlansRepository.d.ts.map +1 -0
  48. package/dist/database/repositories/PlansRepository.js +76 -0
  49. package/dist/database/repositories/PlansRepository.js.map +1 -0
  50. package/dist/database/repositories/index.d.ts +6 -0
  51. package/dist/database/repositories/index.d.ts.map +1 -0
  52. package/dist/database/repositories/index.js +14 -0
  53. package/dist/database/repositories/index.js.map +1 -0
  54. package/dist/database/schema.base.d.ts +3 -0
  55. package/dist/database/schema.base.d.ts.map +1 -0
  56. package/dist/database/schema.base.js +110 -0
  57. package/dist/database/schema.base.js.map +1 -0
  58. package/dist/database/sync/interfaces.d.ts +20 -0
  59. package/dist/database/sync/interfaces.d.ts.map +1 -0
  60. package/dist/database/sync/interfaces.js +3 -0
  61. package/dist/database/sync/interfaces.js.map +1 -0
  62. package/dist/index.d.ts +27 -0
  63. package/dist/index.d.ts.map +1 -0
  64. package/dist/index.js +58 -0
  65. package/dist/index.js.map +1 -0
  66. package/dist/notifications/adapters/MockNotificationAdapter.d.ts +18 -0
  67. package/dist/notifications/adapters/MockNotificationAdapter.d.ts.map +1 -0
  68. package/dist/notifications/adapters/MockNotificationAdapter.js +109 -0
  69. package/dist/notifications/adapters/MockNotificationAdapter.js.map +1 -0
  70. package/dist/notifications/adapters/NotifeeAdapter.d.ts +46 -0
  71. package/dist/notifications/adapters/NotifeeAdapter.d.ts.map +1 -0
  72. package/dist/notifications/adapters/NotifeeAdapter.js +479 -0
  73. package/dist/notifications/adapters/NotifeeAdapter.js.map +1 -0
  74. package/dist/notifications/interfaces.d.ts +8 -0
  75. package/dist/notifications/interfaces.d.ts.map +1 -0
  76. package/dist/notifications/interfaces.js +3 -0
  77. package/dist/notifications/interfaces.js.map +1 -0
  78. package/dist/planning/buildAgenda.d.ts +22 -0
  79. package/dist/planning/buildAgenda.d.ts.map +1 -0
  80. package/dist/planning/buildAgenda.js +148 -0
  81. package/dist/planning/buildAgenda.js.map +1 -0
  82. package/dist/planning/calculateTotalDoses.d.ts +3 -0
  83. package/dist/planning/calculateTotalDoses.d.ts.map +1 -0
  84. package/dist/planning/calculateTotalDoses.js +19 -0
  85. package/dist/planning/calculateTotalDoses.js.map +1 -0
  86. package/dist/planning/expandPlan.d.ts +3 -0
  87. package/dist/planning/expandPlan.d.ts.map +1 -0
  88. package/dist/planning/expandPlan.js +200 -0
  89. package/dist/planning/expandPlan.js.map +1 -0
  90. package/dist/planning/utils.d.ts +15 -0
  91. package/dist/planning/utils.d.ts.map +1 -0
  92. package/dist/planning/utils.js +40 -0
  93. package/dist/planning/utils.js.map +1 -0
  94. package/dist/planning/windowPlanner.d.ts +6 -0
  95. package/dist/planning/windowPlanner.d.ts.map +1 -0
  96. package/dist/planning/windowPlanner.js +18 -0
  97. package/dist/planning/windowPlanner.js.map +1 -0
  98. package/dist/plugins/InventoryPlugin.d.ts +26 -0
  99. package/dist/plugins/InventoryPlugin.d.ts.map +1 -0
  100. package/dist/plugins/InventoryPlugin.js +166 -0
  101. package/dist/plugins/InventoryPlugin.js.map +1 -0
  102. package/dist/plugins/PluginRegistry.d.ts +13 -0
  103. package/dist/plugins/PluginRegistry.d.ts.map +1 -0
  104. package/dist/plugins/PluginRegistry.js +43 -0
  105. package/dist/plugins/PluginRegistry.js.map +1 -0
  106. package/dist/plugins/SyncPluginEventDriven.d.ts +32 -0
  107. package/dist/plugins/SyncPluginEventDriven.d.ts.map +1 -0
  108. package/dist/plugins/SyncPluginEventDriven.js +609 -0
  109. package/dist/plugins/SyncPluginEventDriven.js.map +1 -0
  110. package/dist/plugins/SyncPluginPolling.d.ts +24 -0
  111. package/dist/plugins/SyncPluginPolling.d.ts.map +1 -0
  112. package/dist/plugins/SyncPluginPolling.js +266 -0
  113. package/dist/plugins/SyncPluginPolling.js.map +1 -0
  114. package/dist/plugins/gamification/GamificationPlugin.d.ts +26 -0
  115. package/dist/plugins/gamification/GamificationPlugin.d.ts.map +1 -0
  116. package/dist/plugins/gamification/GamificationPlugin.js +346 -0
  117. package/dist/plugins/gamification/GamificationPlugin.js.map +1 -0
  118. package/dist/plugins/gamification/__tests__/hysteresis.spec.d.ts +2 -0
  119. package/dist/plugins/gamification/__tests__/hysteresis.spec.d.ts.map +1 -0
  120. package/dist/plugins/gamification/__tests__/hysteresis.spec.js +22 -0
  121. package/dist/plugins/gamification/__tests__/hysteresis.spec.js.map +1 -0
  122. package/dist/plugins/gamification/index.d.ts +6 -0
  123. package/dist/plugins/gamification/index.d.ts.map +1 -0
  124. package/dist/plugins/gamification/index.js +14 -0
  125. package/dist/plugins/gamification/index.js.map +1 -0
  126. package/dist/plugins/gamification/levelsConfig.example.d.ts +17 -0
  127. package/dist/plugins/gamification/levelsConfig.example.d.ts.map +1 -0
  128. package/dist/plugins/gamification/levelsConfig.example.js +18 -0
  129. package/dist/plugins/gamification/levelsConfig.example.js.map +1 -0
  130. package/dist/plugins/gamification/levelsEngine.d.ts +19 -0
  131. package/dist/plugins/gamification/levelsEngine.d.ts.map +1 -0
  132. package/dist/plugins/gamification/levelsEngine.js +50 -0
  133. package/dist/plugins/gamification/levelsEngine.js.map +1 -0
  134. package/dist/plugins/gamification/streak.d.ts +7 -0
  135. package/dist/plugins/gamification/streak.d.ts.map +1 -0
  136. package/dist/plugins/gamification/streak.js +39 -0
  137. package/dist/plugins/gamification/streak.js.map +1 -0
  138. package/dist/plugins/index.d.ts +8 -0
  139. package/dist/plugins/index.d.ts.map +1 -0
  140. package/dist/plugins/index.js +28 -0
  141. package/dist/plugins/index.js.map +1 -0
  142. package/dist/plugins/interfaces.d.ts +56 -0
  143. package/dist/plugins/interfaces.d.ts.map +1 -0
  144. package/dist/plugins/interfaces.js +3 -0
  145. package/dist/plugins/interfaces.js.map +1 -0
  146. package/dist/reconciler/WindowScheduler.d.ts +29 -0
  147. package/dist/reconciler/WindowScheduler.d.ts.map +1 -0
  148. package/dist/reconciler/WindowScheduler.js +396 -0
  149. package/dist/reconciler/WindowScheduler.js.map +1 -0
  150. package/dist/services/MedicationsServiceCompat.d.ts +24 -0
  151. package/dist/services/MedicationsServiceCompat.d.ts.map +1 -0
  152. package/dist/services/MedicationsServiceCompat.js +98 -0
  153. package/dist/services/MedicationsServiceCompat.js.map +1 -0
  154. package/dist/utils/queue.d.ts +8 -0
  155. package/dist/utils/queue.d.ts.map +1 -0
  156. package/dist/utils/queue.js +28 -0
  157. package/dist/utils/queue.js.map +1 -0
  158. package/dist/utils/timeOffset.d.ts +4 -0
  159. package/dist/utils/timeOffset.d.ts.map +1 -0
  160. package/dist/utils/timeOffset.js +61 -0
  161. package/dist/utils/timeOffset.js.map +1 -0
  162. package/dist/utils/timestamp.d.ts +6 -0
  163. package/dist/utils/timestamp.d.ts.map +1 -0
  164. package/dist/utils/timestamp.js +29 -0
  165. package/dist/utils/timestamp.js.map +1 -0
  166. package/dist/utils/timezone.d.ts +4 -0
  167. package/dist/utils/timezone.d.ts.map +1 -0
  168. package/dist/utils/timezone.js +30 -0
  169. package/dist/utils/timezone.js.map +1 -0
  170. package/package.json +55 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PlansRepository.js","sourceRoot":"","sources":["../../../src/database/repositories/PlansRepository.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ export { ItemsRepository } from './ItemsRepository';
2
+ export { PlansRepository } from './PlansRepository';
3
+ export { OccurrencesRepository } from './OccurrencesRepository';
4
+ export { EventsRepository } from './EventsRepository';
5
+ export { MedicationsRepository } from './MedicationsRepository';
6
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/database/repositories/index.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAChE,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC"}
@@ -0,0 +1,14 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.MedicationsRepository = exports.EventsRepository = exports.OccurrencesRepository = exports.PlansRepository = exports.ItemsRepository = void 0;
4
+ var ItemsRepository_1 = require("./ItemsRepository");
5
+ Object.defineProperty(exports, "ItemsRepository", { enumerable: true, get: function () { return ItemsRepository_1.ItemsRepository; } });
6
+ var PlansRepository_1 = require("./PlansRepository");
7
+ Object.defineProperty(exports, "PlansRepository", { enumerable: true, get: function () { return PlansRepository_1.PlansRepository; } });
8
+ var OccurrencesRepository_1 = require("./OccurrencesRepository");
9
+ Object.defineProperty(exports, "OccurrencesRepository", { enumerable: true, get: function () { return OccurrencesRepository_1.OccurrencesRepository; } });
10
+ var EventsRepository_1 = require("./EventsRepository");
11
+ Object.defineProperty(exports, "EventsRepository", { enumerable: true, get: function () { return EventsRepository_1.EventsRepository; } });
12
+ var MedicationsRepository_1 = require("./MedicationsRepository");
13
+ Object.defineProperty(exports, "MedicationsRepository", { enumerable: true, get: function () { return MedicationsRepository_1.MedicationsRepository; } });
14
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/database/repositories/index.ts"],"names":[],"mappings":";;;AAKA,qDAAoD;AAA3C,kHAAA,eAAe,OAAA;AACxB,qDAAoD;AAA3C,kHAAA,eAAe,OAAA;AACxB,iEAAgE;AAAvD,8HAAA,qBAAqB,OAAA;AAC9B,uDAAsD;AAA7C,oHAAA,gBAAgB,OAAA;AACzB,iEAAgE;AAAvD,8HAAA,qBAAqB,OAAA"}
@@ -0,0 +1,3 @@
1
+ export declare const BASE_SCHEMA = "\nPRAGMA journal_mode = WAL;\nPRAGMA foreign_keys = ON;\nPRAGMA synchronous = NORMAL;\n\nCREATE TABLE IF NOT EXISTS items (\n id TEXT PRIMARY KEY,\n type TEXT NOT NULL CHECK (type IN ('MED', 'APPT', 'TEST', 'METRIC')),\n ean TEXT,\n name TEXT NOT NULL,\n dosage TEXT,\n meta TEXT,\n created_at TEXT NOT NULL DEFAULT (datetime('now')),\n updated_at TEXT NOT NULL DEFAULT (datetime('now')),\n deleted_at TEXT,\n version INTEGER DEFAULT 1,\n UNIQUE(type, ean) ON CONFLICT REPLACE\n);\n\nCREATE TABLE IF NOT EXISTS plans (\n id TEXT PRIMARY KEY,\n item_id TEXT NOT NULL,\n schedule_rule TEXT NOT NULL,\n tz TEXT NOT NULL DEFAULT 'America/Sao_Paulo',\n starts_at TEXT NOT NULL,\n ends_at TEXT,\n meta TEXT,\n created_at TEXT NOT NULL DEFAULT (datetime('now')),\n updated_at TEXT NOT NULL DEFAULT (datetime('now')),\n deleted_at TEXT,\n version INTEGER DEFAULT 1,\n FOREIGN KEY (item_id) REFERENCES items(id) ON DELETE CASCADE\n);\n\nCREATE TABLE IF NOT EXISTS occurrences (\n id TEXT PRIMARY KEY,\n plan_id TEXT NOT NULL,\n scheduled_at TEXT NOT NULL,\n kind TEXT NOT NULL CHECK (kind IN ('MED', 'APPT', 'TEST', 'METRIC')),\n status TEXT NOT NULL DEFAULT 'PENDING' CHECK (status IN ('PENDING', 'DONE', 'SKIPPED', 'SNOOZED')),\n qty INTEGER DEFAULT 1,\n created_at TEXT NOT NULL DEFAULT (datetime('now')),\n updated_at TEXT NOT NULL DEFAULT (datetime('now')),\n deleted_at TEXT,\n version INTEGER DEFAULT 1,\n FOREIGN KEY (plan_id) REFERENCES plans(id) ON DELETE CASCADE,\n UNIQUE(plan_id, scheduled_at, kind) ON CONFLICT REPLACE\n);\n\nCREATE TABLE IF NOT EXISTS events (\n id TEXT PRIMARY KEY,\n occurrence_id TEXT NOT NULL,\n action TEXT NOT NULL CHECK (action IN ('TAKEN', 'SKIPPED', 'SNOOZED', 'TAPPED', 'DISMISSED')),\n action_at TEXT NOT NULL DEFAULT (datetime('now')),\n source TEXT NOT NULL DEFAULT 'screen' CHECK (source IN ('notif', 'screen')),\n note TEXT,\n payload TEXT,\n updated_at TEXT NOT NULL DEFAULT (datetime('now')),\n deleted_at TEXT,\n version INTEGER DEFAULT 1,\n FOREIGN KEY (occurrence_id) REFERENCES occurrences(id) ON DELETE CASCADE\n);\n\nCREATE TABLE IF NOT EXISTS medications (\n id TEXT PRIMARY KEY,\n ean TEXT UNIQUE,\n name TEXT NOT NULL,\n description TEXT,\n concentration TEXT,\n qty_label TEXT,\n current_qty_label TEXT,\n total_quantity INTEGER DEFAULT 1,\n used_quantity INTEGER DEFAULT 0,\n remaining INTEGER DEFAULT 1,\n form TEXT,\n lab TEXT,\n active TEXT,\n complement TEXT,\n status TEXT DEFAULT 'normal' CHECK (status IN ('normal', 'low', 'critical')),\n added_at TEXT NOT NULL DEFAULT (datetime('now')),\n updated_at TEXT NOT NULL DEFAULT (datetime('now')),\n deleted_at TEXT,\n version INTEGER DEFAULT 1\n);\n\nCREATE INDEX IF NOT EXISTS idx_items_type ON items(type);\nCREATE INDEX IF NOT EXISTS idx_items_ean ON items(ean);\nCREATE INDEX IF NOT EXISTS idx_plans_item_id ON plans(item_id);\nCREATE INDEX IF NOT EXISTS idx_occurrences_plan_id ON occurrences(plan_id);\nCREATE INDEX IF NOT EXISTS idx_occurrences_scheduled_at ON occurrences(scheduled_at);\nCREATE INDEX IF NOT EXISTS idx_occurrences_status ON occurrences(status);\nCREATE INDEX IF NOT EXISTS idx_occurrences_scheduled_status ON occurrences(scheduled_at, status);\nCREATE INDEX IF NOT EXISTS idx_events_occurrence_id ON events(occurrence_id);\nCREATE INDEX IF NOT EXISTS idx_events_action_at ON events(action_at);\nCREATE INDEX IF NOT EXISTS idx_medications_ean ON medications(ean);\nCREATE INDEX IF NOT EXISTS idx_medications_status ON medications(status);\nCREATE INDEX IF NOT EXISTS idx_medications_name ON medications(name);\nCREATE TABLE IF NOT EXISTS sync_deletes (\n entity TEXT NOT NULL CHECK (entity IN ('items','plans','occurrences','events','medications')),\n entity_id TEXT NOT NULL,\n deleted_at TEXT NOT NULL DEFAULT (datetime('now'))\n);\nCREATE INDEX IF NOT EXISTS idx_sync_deletes_deleted_at ON sync_deletes(deleted_at);\nCREATE INDEX IF NOT EXISTS idx_sync_deletes_entity ON sync_deletes(entity);\n";
2
+ export default BASE_SCHEMA;
3
+ //# sourceMappingURL=schema.base.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema.base.d.ts","sourceRoot":"","sources":["../../src/database/schema.base.ts"],"names":[],"mappings":"AAMA,eAAO,MAAM,WAAW,85HAwGvB,CAAC;AAEF,eAAe,WAAW,CAAC"}
@@ -0,0 +1,110 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.BASE_SCHEMA = void 0;
4
+ exports.BASE_SCHEMA = `
5
+ PRAGMA journal_mode = WAL;
6
+ PRAGMA foreign_keys = ON;
7
+ PRAGMA synchronous = NORMAL;
8
+
9
+ CREATE TABLE IF NOT EXISTS items (
10
+ id TEXT PRIMARY KEY,
11
+ type TEXT NOT NULL CHECK (type IN ('MED', 'APPT', 'TEST', 'METRIC')),
12
+ ean TEXT,
13
+ name TEXT NOT NULL,
14
+ dosage TEXT,
15
+ meta TEXT,
16
+ created_at TEXT NOT NULL DEFAULT (datetime('now')),
17
+ updated_at TEXT NOT NULL DEFAULT (datetime('now')),
18
+ deleted_at TEXT,
19
+ version INTEGER DEFAULT 1,
20
+ UNIQUE(type, ean) ON CONFLICT REPLACE
21
+ );
22
+
23
+ CREATE TABLE IF NOT EXISTS plans (
24
+ id TEXT PRIMARY KEY,
25
+ item_id TEXT NOT NULL,
26
+ schedule_rule TEXT NOT NULL,
27
+ tz TEXT NOT NULL DEFAULT 'America/Sao_Paulo',
28
+ starts_at TEXT NOT NULL,
29
+ ends_at TEXT,
30
+ meta TEXT,
31
+ created_at TEXT NOT NULL DEFAULT (datetime('now')),
32
+ updated_at TEXT NOT NULL DEFAULT (datetime('now')),
33
+ deleted_at TEXT,
34
+ version INTEGER DEFAULT 1,
35
+ FOREIGN KEY (item_id) REFERENCES items(id) ON DELETE CASCADE
36
+ );
37
+
38
+ CREATE TABLE IF NOT EXISTS occurrences (
39
+ id TEXT PRIMARY KEY,
40
+ plan_id TEXT NOT NULL,
41
+ scheduled_at TEXT NOT NULL,
42
+ kind TEXT NOT NULL CHECK (kind IN ('MED', 'APPT', 'TEST', 'METRIC')),
43
+ status TEXT NOT NULL DEFAULT 'PENDING' CHECK (status IN ('PENDING', 'DONE', 'SKIPPED', 'SNOOZED')),
44
+ qty INTEGER DEFAULT 1,
45
+ created_at TEXT NOT NULL DEFAULT (datetime('now')),
46
+ updated_at TEXT NOT NULL DEFAULT (datetime('now')),
47
+ deleted_at TEXT,
48
+ version INTEGER DEFAULT 1,
49
+ FOREIGN KEY (plan_id) REFERENCES plans(id) ON DELETE CASCADE,
50
+ UNIQUE(plan_id, scheduled_at, kind) ON CONFLICT REPLACE
51
+ );
52
+
53
+ CREATE TABLE IF NOT EXISTS events (
54
+ id TEXT PRIMARY KEY,
55
+ occurrence_id TEXT NOT NULL,
56
+ action TEXT NOT NULL CHECK (action IN ('TAKEN', 'SKIPPED', 'SNOOZED', 'TAPPED', 'DISMISSED')),
57
+ action_at TEXT NOT NULL DEFAULT (datetime('now')),
58
+ source TEXT NOT NULL DEFAULT 'screen' CHECK (source IN ('notif', 'screen')),
59
+ note TEXT,
60
+ payload TEXT,
61
+ updated_at TEXT NOT NULL DEFAULT (datetime('now')),
62
+ deleted_at TEXT,
63
+ version INTEGER DEFAULT 1,
64
+ FOREIGN KEY (occurrence_id) REFERENCES occurrences(id) ON DELETE CASCADE
65
+ );
66
+
67
+ CREATE TABLE IF NOT EXISTS medications (
68
+ id TEXT PRIMARY KEY,
69
+ ean TEXT UNIQUE,
70
+ name TEXT NOT NULL,
71
+ description TEXT,
72
+ concentration TEXT,
73
+ qty_label TEXT,
74
+ current_qty_label TEXT,
75
+ total_quantity INTEGER DEFAULT 1,
76
+ used_quantity INTEGER DEFAULT 0,
77
+ remaining INTEGER DEFAULT 1,
78
+ form TEXT,
79
+ lab TEXT,
80
+ active TEXT,
81
+ complement TEXT,
82
+ status TEXT DEFAULT 'normal' CHECK (status IN ('normal', 'low', 'critical')),
83
+ added_at TEXT NOT NULL DEFAULT (datetime('now')),
84
+ updated_at TEXT NOT NULL DEFAULT (datetime('now')),
85
+ deleted_at TEXT,
86
+ version INTEGER DEFAULT 1
87
+ );
88
+
89
+ CREATE INDEX IF NOT EXISTS idx_items_type ON items(type);
90
+ CREATE INDEX IF NOT EXISTS idx_items_ean ON items(ean);
91
+ CREATE INDEX IF NOT EXISTS idx_plans_item_id ON plans(item_id);
92
+ CREATE INDEX IF NOT EXISTS idx_occurrences_plan_id ON occurrences(plan_id);
93
+ CREATE INDEX IF NOT EXISTS idx_occurrences_scheduled_at ON occurrences(scheduled_at);
94
+ CREATE INDEX IF NOT EXISTS idx_occurrences_status ON occurrences(status);
95
+ CREATE INDEX IF NOT EXISTS idx_occurrences_scheduled_status ON occurrences(scheduled_at, status);
96
+ CREATE INDEX IF NOT EXISTS idx_events_occurrence_id ON events(occurrence_id);
97
+ CREATE INDEX IF NOT EXISTS idx_events_action_at ON events(action_at);
98
+ CREATE INDEX IF NOT EXISTS idx_medications_ean ON medications(ean);
99
+ CREATE INDEX IF NOT EXISTS idx_medications_status ON medications(status);
100
+ CREATE INDEX IF NOT EXISTS idx_medications_name ON medications(name);
101
+ CREATE TABLE IF NOT EXISTS sync_deletes (
102
+ entity TEXT NOT NULL CHECK (entity IN ('items','plans','occurrences','events','medications')),
103
+ entity_id TEXT NOT NULL,
104
+ deleted_at TEXT NOT NULL DEFAULT (datetime('now'))
105
+ );
106
+ CREATE INDEX IF NOT EXISTS idx_sync_deletes_deleted_at ON sync_deletes(deleted_at);
107
+ CREATE INDEX IF NOT EXISTS idx_sync_deletes_entity ON sync_deletes(entity);
108
+ `;
109
+ exports.default = exports.BASE_SCHEMA;
110
+ //# sourceMappingURL=schema.base.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema.base.js","sourceRoot":"","sources":["../../src/database/schema.base.ts"],"names":[],"mappings":";;;AAMa,QAAA,WAAW,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAwG1B,CAAC;AAEF,kBAAe,mBAAW,CAAC"}
@@ -0,0 +1,20 @@
1
+ export type EntityName = 'items' | 'plans' | 'occurrences' | 'events' | 'medications' | 'adherence_daily' | 'levels_state';
2
+ export interface ChangeSet<T> {
3
+ inserts: T[];
4
+ updates: T[];
5
+ deletes: Array<{
6
+ id: string;
7
+ version?: number;
8
+ deletedAt?: string;
9
+ }>;
10
+ since?: string;
11
+ }
12
+ export interface SyncContext {
13
+ nowISO?: string;
14
+ userId?: string;
15
+ }
16
+ export interface CloudSyncProvider {
17
+ pushChanges(changes: Partial<Record<EntityName, ChangeSet<any>>>, ctx?: SyncContext): Promise<number>;
18
+ pullChanges(sinceISO: string, ctx?: SyncContext): Promise<Partial<Record<EntityName, ChangeSet<any>>>>;
19
+ }
20
+ //# sourceMappingURL=interfaces.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"interfaces.d.ts","sourceRoot":"","sources":["../../../src/database/sync/interfaces.ts"],"names":[],"mappings":"AAKA,MAAM,MAAM,UAAU,GAClB,OAAO,GACP,OAAO,GACP,aAAa,GACb,QAAQ,GACR,aAAa,GACb,iBAAiB,GACjB,cAAc,CAAC;AAEnB,MAAM,WAAW,SAAS,CAAC,CAAC;IAC1B,OAAO,EAAE,CAAC,EAAE,CAAC;IACb,OAAO,EAAE,CAAC,EAAE,CAAC;IACb,OAAO,EAAE,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACrE,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,WAAW;IAC1B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,iBAAiB;IAKhC,WAAW,CACT,OAAO,EAAE,OAAO,CAAC,MAAM,CAAC,UAAU,EAAE,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EACpD,GAAG,CAAC,EAAE,WAAW,GAChB,OAAO,CAAC,MAAM,CAAC,CAAC;IAEnB,WAAW,CACT,QAAQ,EAAE,MAAM,EAChB,GAAG,CAAC,EAAE,WAAW,GAChB,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,UAAU,EAAE,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;CACzD"}
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=interfaces.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"interfaces.js","sourceRoot":"","sources":["../../../src/database/sync/interfaces.ts"],"names":[],"mappings":""}
@@ -0,0 +1,27 @@
1
+ export { EventBus, globalEventBus } from './core/EventBus';
2
+ export * from './core/types';
3
+ export * from './database/interfaces';
4
+ export * from './database/repositories';
5
+ export type { MedicationRecord } from './database/repositories/MedicationsRepository';
6
+ export { MockAdapter } from './database/adapters/MockAdapter';
7
+ export { SQLiteAdapter } from './database/adapters/SQLiteAdapter';
8
+ export * from './database/sync/interfaces';
9
+ export { SupabaseAdapter } from './database/adapters/SupabaseAdapter';
10
+ export { expandPlan } from './planning/expandPlan';
11
+ export { selectWindow } from './planning/windowPlanner';
12
+ export { calculateTotalDoses } from './planning/calculateTotalDoses';
13
+ export * from './planning/buildAgenda';
14
+ export * from './planning/utils';
15
+ export { enqueueWrite, resetQueue } from './utils/queue';
16
+ export * from './utils/timezone';
17
+ export * from './utils/timestamp';
18
+ export { HealthcareScheduler } from './core/HealthcareScheduler';
19
+ export { WindowScheduler } from './reconciler/WindowScheduler';
20
+ export * from './notifications/interfaces';
21
+ export { MockNotificationAdapter } from './notifications/adapters/MockNotificationAdapter';
22
+ export { NotifeeAdapter } from './notifications/adapters/NotifeeAdapter';
23
+ export type { PlatformInfo, NotifeeAdapterOptions } from './notifications/adapters/NotifeeAdapter';
24
+ export * from './plugins';
25
+ export { SyncPluginEventDriven } from './plugins/SyncPluginEventDriven';
26
+ export { MedicationsServiceCompat } from './services/MedicationsServiceCompat';
27
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAC3D,cAAc,cAAc,CAAC;AAG7B,cAAc,uBAAuB,CAAC;AACtC,cAAc,yBAAyB,CAAC;AACxC,YAAY,EAAE,gBAAgB,EAAE,MAAM,+CAA+C,CAAC;AACtF,OAAO,EAAE,WAAW,EAAE,MAAM,iCAAiC,CAAC;AAC9D,OAAO,EAAE,aAAa,EAAE,MAAM,mCAAmC,CAAC;AAClE,cAAc,4BAA4B,CAAC;AAC3C,OAAO,EAAE,eAAe,EAAE,MAAM,qCAAqC,CAAC;AAGtE,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AACxD,OAAO,EAAE,mBAAmB,EAAE,MAAM,gCAAgC,CAAC;AACrE,cAAc,wBAAwB,CAAC;AACvC,cAAc,kBAAkB,CAAC;AAGjC,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AACzD,cAAc,kBAAkB,CAAC;AACjC,cAAc,mBAAmB,CAAC;AAGlC,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AAGjE,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAG/D,cAAc,4BAA4B,CAAC;AAC3C,OAAO,EAAE,uBAAuB,EAAE,MAAM,kDAAkD,CAAC;AAC3F,OAAO,EAAE,cAAc,EAAE,MAAM,yCAAyC,CAAC;AACzE,YAAY,EAAE,YAAY,EAAE,qBAAqB,EAAE,MAAM,yCAAyC,CAAC;AAGnG,cAAc,WAAW,CAAC;AAC1B,OAAO,EAAE,qBAAqB,EAAE,MAAM,iCAAiC,CAAC;AAGxE,OAAO,EAAE,wBAAwB,EAAE,MAAM,qCAAqC,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,58 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ exports.MedicationsServiceCompat = exports.SyncPluginEventDriven = exports.NotifeeAdapter = exports.MockNotificationAdapter = exports.WindowScheduler = exports.HealthcareScheduler = exports.resetQueue = exports.enqueueWrite = exports.calculateTotalDoses = exports.selectWindow = exports.expandPlan = exports.SupabaseAdapter = exports.SQLiteAdapter = exports.MockAdapter = exports.globalEventBus = exports.EventBus = void 0;
18
+ var EventBus_1 = require("./core/EventBus");
19
+ Object.defineProperty(exports, "EventBus", { enumerable: true, get: function () { return EventBus_1.EventBus; } });
20
+ Object.defineProperty(exports, "globalEventBus", { enumerable: true, get: function () { return EventBus_1.globalEventBus; } });
21
+ __exportStar(require("./core/types"), exports);
22
+ __exportStar(require("./database/interfaces"), exports);
23
+ __exportStar(require("./database/repositories"), exports);
24
+ var MockAdapter_1 = require("./database/adapters/MockAdapter");
25
+ Object.defineProperty(exports, "MockAdapter", { enumerable: true, get: function () { return MockAdapter_1.MockAdapter; } });
26
+ var SQLiteAdapter_1 = require("./database/adapters/SQLiteAdapter");
27
+ Object.defineProperty(exports, "SQLiteAdapter", { enumerable: true, get: function () { return SQLiteAdapter_1.SQLiteAdapter; } });
28
+ __exportStar(require("./database/sync/interfaces"), exports);
29
+ var SupabaseAdapter_1 = require("./database/adapters/SupabaseAdapter");
30
+ Object.defineProperty(exports, "SupabaseAdapter", { enumerable: true, get: function () { return SupabaseAdapter_1.SupabaseAdapter; } });
31
+ var expandPlan_1 = require("./planning/expandPlan");
32
+ Object.defineProperty(exports, "expandPlan", { enumerable: true, get: function () { return expandPlan_1.expandPlan; } });
33
+ var windowPlanner_1 = require("./planning/windowPlanner");
34
+ Object.defineProperty(exports, "selectWindow", { enumerable: true, get: function () { return windowPlanner_1.selectWindow; } });
35
+ var calculateTotalDoses_1 = require("./planning/calculateTotalDoses");
36
+ Object.defineProperty(exports, "calculateTotalDoses", { enumerable: true, get: function () { return calculateTotalDoses_1.calculateTotalDoses; } });
37
+ __exportStar(require("./planning/buildAgenda"), exports);
38
+ __exportStar(require("./planning/utils"), exports);
39
+ var queue_1 = require("./utils/queue");
40
+ Object.defineProperty(exports, "enqueueWrite", { enumerable: true, get: function () { return queue_1.enqueueWrite; } });
41
+ Object.defineProperty(exports, "resetQueue", { enumerable: true, get: function () { return queue_1.resetQueue; } });
42
+ __exportStar(require("./utils/timezone"), exports);
43
+ __exportStar(require("./utils/timestamp"), exports);
44
+ var HealthcareScheduler_1 = require("./core/HealthcareScheduler");
45
+ Object.defineProperty(exports, "HealthcareScheduler", { enumerable: true, get: function () { return HealthcareScheduler_1.HealthcareScheduler; } });
46
+ var WindowScheduler_1 = require("./reconciler/WindowScheduler");
47
+ Object.defineProperty(exports, "WindowScheduler", { enumerable: true, get: function () { return WindowScheduler_1.WindowScheduler; } });
48
+ __exportStar(require("./notifications/interfaces"), exports);
49
+ var MockNotificationAdapter_1 = require("./notifications/adapters/MockNotificationAdapter");
50
+ Object.defineProperty(exports, "MockNotificationAdapter", { enumerable: true, get: function () { return MockNotificationAdapter_1.MockNotificationAdapter; } });
51
+ var NotifeeAdapter_1 = require("./notifications/adapters/NotifeeAdapter");
52
+ Object.defineProperty(exports, "NotifeeAdapter", { enumerable: true, get: function () { return NotifeeAdapter_1.NotifeeAdapter; } });
53
+ __exportStar(require("./plugins"), exports);
54
+ var SyncPluginEventDriven_1 = require("./plugins/SyncPluginEventDriven");
55
+ Object.defineProperty(exports, "SyncPluginEventDriven", { enumerable: true, get: function () { return SyncPluginEventDriven_1.SyncPluginEventDriven; } });
56
+ var MedicationsServiceCompat_1 = require("./services/MedicationsServiceCompat");
57
+ Object.defineProperty(exports, "MedicationsServiceCompat", { enumerable: true, get: function () { return MedicationsServiceCompat_1.MedicationsServiceCompat; } });
58
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAMA,4CAA2D;AAAlD,oGAAA,QAAQ,OAAA;AAAE,0GAAA,cAAc,OAAA;AACjC,+CAA6B;AAG7B,wDAAsC;AACtC,0DAAwC;AAExC,+DAA8D;AAArD,0GAAA,WAAW,OAAA;AACpB,mEAAkE;AAAzD,8GAAA,aAAa,OAAA;AACtB,6DAA2C;AAC3C,uEAAsE;AAA7D,kHAAA,eAAe,OAAA;AAGxB,oDAAmD;AAA1C,wGAAA,UAAU,OAAA;AACnB,0DAAwD;AAA/C,6GAAA,YAAY,OAAA;AACrB,sEAAqE;AAA5D,0HAAA,mBAAmB,OAAA;AAC5B,yDAAuC;AACvC,mDAAiC;AAGjC,uCAAyD;AAAhD,qGAAA,YAAY,OAAA;AAAE,mGAAA,UAAU,OAAA;AACjC,mDAAiC;AACjC,oDAAkC;AAGlC,kEAAiE;AAAxD,0HAAA,mBAAmB,OAAA;AAG5B,gEAA+D;AAAtD,kHAAA,eAAe,OAAA;AAGxB,6DAA2C;AAC3C,4FAA2F;AAAlF,kIAAA,uBAAuB,OAAA;AAChC,0EAAyE;AAAhE,gHAAA,cAAc,OAAA;AAIvB,4CAA0B;AAC1B,yEAAwE;AAA/D,8HAAA,qBAAqB,OAAA;AAG9B,gFAA+E;AAAtE,oIAAA,wBAAwB,OAAA"}
@@ -0,0 +1,18 @@
1
+ import { NotificationDriver, NotificationTriggerOptions, GroupNotificationTriggerOptions, ScheduledNotification } from '../../core/types';
2
+ export declare class MockNotificationAdapter implements NotificationDriver {
3
+ private scheduledNotifications;
4
+ private lastNotificationId;
5
+ private eventCallback?;
6
+ ensurePermissions(): Promise<boolean>;
7
+ scheduleTrigger(options: NotificationTriggerOptions): Promise<string>;
8
+ scheduleGroupTrigger(options: GroupNotificationTriggerOptions): Promise<string>;
9
+ cancelTriggerByOccurrence(occurrenceId: string): Promise<void>;
10
+ cancelTriggerByGroup(groupKey: string): Promise<void>;
11
+ cancelAllScheduled(): Promise<void>;
12
+ listScheduled(): Promise<ScheduledNotification[]>;
13
+ registerHandlers(callback: (event: any) => void): void;
14
+ simulateEvent(occurrenceId: string, action: 'TAKEN' | 'SKIPPED' | 'SNOOZED', payload?: any): void;
15
+ getScheduledCount(): number;
16
+ reset(): void;
17
+ }
18
+ //# sourceMappingURL=MockNotificationAdapter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MockNotificationAdapter.d.ts","sourceRoot":"","sources":["../../../src/notifications/adapters/MockNotificationAdapter.ts"],"names":[],"mappings":"AAKA,OAAO,EACL,kBAAkB,EAClB,0BAA0B,EAC1B,+BAA+B,EAC/B,qBAAqB,EACtB,MAAM,kBAAkB,CAAC;AAM1B,qBAAa,uBAAwB,YAAW,kBAAkB;IAChE,OAAO,CAAC,sBAAsB,CAAiD;IAC/E,OAAO,CAAC,kBAAkB,CAAK;IAC/B,OAAO,CAAC,aAAa,CAAC,CAAuB;IAEvC,iBAAiB,IAAI,OAAO,CAAC,OAAO,CAAC;IAIrC,eAAe,CAAC,OAAO,EAAE,0BAA0B,GAAG,OAAO,CAAC,MAAM,CAAC;IA2BrE,oBAAoB,CAAC,OAAO,EAAE,+BAA+B,GAAG,OAAO,CAAC,MAAM,CAAC;IA4B/E,yBAAyB,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAU9D,oBAAoB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAUrD,kBAAkB,IAAI,OAAO,CAAC,IAAI,CAAC;IAMnC,aAAa,IAAI,OAAO,CAAC,qBAAqB,EAAE,CAAC;IAIvD,gBAAgB,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,GAAG,KAAK,IAAI,GAAG,IAAI;IAQtD,aAAa,CAAC,YAAY,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,GAAG,SAAS,GAAG,SAAS,EAAE,OAAO,GAAE,GAAQ,GAAG,IAAI;IAcrG,iBAAiB,IAAI,MAAM;IAO3B,KAAK,IAAI,IAAI;CAKd"}
@@ -0,0 +1,109 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.MockNotificationAdapter = void 0;
4
+ class MockNotificationAdapter {
5
+ constructor() {
6
+ this.scheduledNotifications = new Map();
7
+ this.lastNotificationId = 0;
8
+ }
9
+ async ensurePermissions() {
10
+ return true;
11
+ }
12
+ async scheduleTrigger(options) {
13
+ const notificationId = `mock-notif-${++this.lastNotificationId}`;
14
+ const notification = {
15
+ notification: {
16
+ id: notificationId,
17
+ title: options.title,
18
+ body: options.body,
19
+ data: {
20
+ occurrenceId: options.occurrenceId,
21
+ itemType: options.itemType,
22
+ itemId: options.itemId || '',
23
+ snoozeMin: String(options.snoozeMin || '')
24
+ }
25
+ },
26
+ trigger: {
27
+ type: 'TIMESTAMP',
28
+ timestamp: options.scheduledAt.getTime()
29
+ }
30
+ };
31
+ this.scheduledNotifications.set(notificationId, notification);
32
+ console.log(`📲 Mock: Scheduled notification ${notificationId} for ${options.occurrenceId}`);
33
+ return notificationId;
34
+ }
35
+ async scheduleGroupTrigger(options) {
36
+ const notificationId = `mock-group-${++this.lastNotificationId}`;
37
+ const notification = {
38
+ notification: {
39
+ id: notificationId,
40
+ title: options.title,
41
+ body: options.body,
42
+ data: {
43
+ groupKey: options.groupKey,
44
+ occurrenceIds: JSON.stringify(options.occurrenceIds),
45
+ itemType: options.itemType,
46
+ itemId: options.itemId || '',
47
+ snoozeMin: String(options.snoozeMin || '')
48
+ }
49
+ },
50
+ trigger: {
51
+ type: 'TIMESTAMP',
52
+ timestamp: options.scheduledAt.getTime()
53
+ }
54
+ };
55
+ this.scheduledNotifications.set(notificationId, notification);
56
+ console.log(`📲 Mock: Scheduled group notification ${notificationId}`);
57
+ return notificationId;
58
+ }
59
+ async cancelTriggerByOccurrence(occurrenceId) {
60
+ for (const [id, notif] of this.scheduledNotifications) {
61
+ if (notif.notification.data?.occurrenceId === occurrenceId) {
62
+ this.scheduledNotifications.delete(id);
63
+ console.log(`🗑️ Mock: Canceled notification for occurrence ${occurrenceId}`);
64
+ return;
65
+ }
66
+ }
67
+ }
68
+ async cancelTriggerByGroup(groupKey) {
69
+ for (const [id, notif] of this.scheduledNotifications) {
70
+ if (notif.notification.data?.groupKey === groupKey) {
71
+ this.scheduledNotifications.delete(id);
72
+ console.log(`🗑️ Mock: Canceled group notification ${groupKey}`);
73
+ return;
74
+ }
75
+ }
76
+ }
77
+ async cancelAllScheduled() {
78
+ const count = this.scheduledNotifications.size;
79
+ this.scheduledNotifications.clear();
80
+ console.log(`🗑️ Mock: Canceled all ${count} notifications`);
81
+ }
82
+ async listScheduled() {
83
+ return Array.from(this.scheduledNotifications.values());
84
+ }
85
+ registerHandlers(callback) {
86
+ this.eventCallback = callback;
87
+ console.log('📲 Mock: Event handlers registered');
88
+ }
89
+ simulateEvent(occurrenceId, action, payload = {}) {
90
+ if (this.eventCallback) {
91
+ this.eventCallback({
92
+ type: action,
93
+ occurrenceId,
94
+ payload
95
+ });
96
+ console.log(`📲 Mock: Simulated ${action} event for ${occurrenceId}`);
97
+ }
98
+ }
99
+ getScheduledCount() {
100
+ return this.scheduledNotifications.size;
101
+ }
102
+ reset() {
103
+ this.scheduledNotifications.clear();
104
+ this.lastNotificationId = 0;
105
+ this.eventCallback = undefined;
106
+ }
107
+ }
108
+ exports.MockNotificationAdapter = MockNotificationAdapter;
109
+ //# sourceMappingURL=MockNotificationAdapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MockNotificationAdapter.js","sourceRoot":"","sources":["../../../src/notifications/adapters/MockNotificationAdapter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,46 @@
1
+ import type { NotificationDriver, NotificationTriggerOptions, GroupNotificationTriggerOptions, ScheduledNotification, EventAction } from '../../core/types';
2
+ export interface PlatformInfo {
3
+ OS: 'ios' | 'android' | 'windows' | 'macos' | 'web';
4
+ Version?: number | string;
5
+ }
6
+ export interface NotifeeAdapterOptions {
7
+ platform?: PlatformInfo;
8
+ sounds?: {
9
+ MED?: string;
10
+ APPT?: string;
11
+ TEST?: string;
12
+ METRIC?: string;
13
+ };
14
+ }
15
+ export declare class NotifeeAdapter implements NotificationDriver {
16
+ private fgUnsub?;
17
+ private backgroundRegistered;
18
+ private handler?;
19
+ private platform;
20
+ private sounds;
21
+ constructor(options?: NotifeeAdapterOptions);
22
+ updateSounds(sounds: {
23
+ MED?: string;
24
+ APPT?: string;
25
+ TEST?: string;
26
+ METRIC?: string;
27
+ }): void;
28
+ ensurePermissions(): Promise<boolean>;
29
+ createChannelsAndCategories(): Promise<void>;
30
+ scheduleTrigger(options: NotificationTriggerOptions): Promise<string>;
31
+ scheduleGroupTrigger(options: GroupNotificationTriggerOptions): Promise<string>;
32
+ cancelTriggerByOccurrence(occurrenceId: string): Promise<void>;
33
+ cancelTriggerByGroup(groupKey: string): Promise<void>;
34
+ cancelAllScheduled(): Promise<void>;
35
+ listScheduled(): Promise<ScheduledNotification[]>;
36
+ registerHandlers(onEvent: (event: {
37
+ type: EventAction;
38
+ occurrenceId: string;
39
+ payload?: any;
40
+ }) => void): void;
41
+ private setupNotifeeListeners;
42
+ private mapEvent;
43
+ private safeCancelCurrent;
44
+ }
45
+ export default NotifeeAdapter;
46
+ //# sourceMappingURL=NotifeeAdapter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"NotifeeAdapter.d.ts","sourceRoot":"","sources":["../../../src/notifications/adapters/NotifeeAdapter.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EACV,kBAAkB,EAClB,0BAA0B,EAC1B,+BAA+B,EAC/B,qBAAqB,EACrB,WAAW,EACZ,MAAM,kBAAkB,CAAC;AAkB1B,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,KAAK,GAAG,SAAS,GAAG,SAAS,GAAG,OAAO,GAAG,KAAK,CAAC;IACpD,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;CAC3B;AAED,MAAM,WAAW,qBAAqB;IAEpC,QAAQ,CAAC,EAAE,YAAY,CAAC;IAExB,MAAM,CAAC,EAAE;QACP,GAAG,CAAC,EAAE,MAAM,CAAC;QACb,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,MAAM,CAAC,EAAE,MAAM,CAAC;KACjB,CAAC;CACH;AAED,qBAAa,cAAe,YAAW,kBAAkB;IACvD,OAAO,CAAC,OAAO,CAAC,CAAa;IAC7B,OAAO,CAAC,oBAAoB,CAAS;IACrC,OAAO,CAAC,OAAO,CAAC,CAA8E;IAC9F,OAAO,CAAC,QAAQ,CAAe;IAC/B,OAAO,CAAC,MAAM,CAAyB;gBAM3B,OAAO,GAAE,qBAA0B;IAkB/C,YAAY,CAAC,MAAM,EAAE;QAAE,GAAG,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI;IAUrF,iBAAiB,IAAI,OAAO,CAAC,OAAO,CAAC;IAUrC,2BAA2B,IAAI,OAAO,CAAC,IAAI,CAAC;IAiD5C,eAAe,CAAC,OAAO,EAAE,0BAA0B,GAAG,OAAO,CAAC,MAAM,CAAC;IAmGrE,oBAAoB,CAAC,OAAO,EAAE,+BAA+B,GAAG,OAAO,CAAC,MAAM,CAAC;IAwD/E,yBAAyB,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAc9D,oBAAoB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAcrD,kBAAkB,IAAI,OAAO,CAAC,IAAI,CAAC;IAKnC,aAAa,IAAI,OAAO,CAAC,qBAAqB,EAAE,CAAC;IAKvD,gBAAgB,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE;QAAE,IAAI,EAAE,WAAW,CAAC;QAAC,YAAY,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,GAAG,CAAA;KAAE,KAAK,IAAI,GAAG,IAAI;YAK9F,qBAAqB;YAmBrB,QAAQ;YAwGR,iBAAiB;CAQhC;AAsBD,eAAe,cAAc,CAAC"}