@dejadex/web 0.1.0 → 0.1.1
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/CHANGELOG.md +14 -0
- package/README.md +10 -2
- package/dist/identify/identifier.d.ts +12 -2
- package/dist/identify/identifier.d.ts.map +1 -1
- package/dist/identify/identifier.js +6 -1
- package/dist/identify/identifier.js.map +1 -1
- package/dist/usage/store.d.ts +6 -18
- package/dist/usage/store.d.ts.map +1 -1
- package/dist/usage/store.js +58 -8
- package/dist/usage/store.js.map +1 -1
- package/package.json +1 -1
- package/src/identify/identifier.ts +17 -5
- package/src/usage/store.ts +45 -8
package/CHANGELOG.md
CHANGED
|
@@ -3,6 +3,20 @@
|
|
|
3
3
|
All notable changes to `@dejadex/web`. Versions follow semver; before 1.0 a
|
|
4
4
|
minor version may break the client contract (`src/types.ts`), and says so here.
|
|
5
5
|
|
|
6
|
+
## 0.1.1
|
|
7
|
+
|
|
8
|
+
- **Fix:** the usage database (`dejadex-usage`) no longer blocks a host's
|
|
9
|
+
`indexedDB.deleteDatabase`. The IndexedDB store closes its connection on
|
|
10
|
+
`versionchange`; before, a host deleting it on sign-out stayed blocked for
|
|
11
|
+
the life of the page, and the previous account's queued usage could be
|
|
12
|
+
drained under the next account's session.
|
|
13
|
+
- `UsageStore.close()` (optional for stores a host writes; a no-op on the
|
|
14
|
+
memory store). After a close or a `versionchange`, every call rejects with
|
|
15
|
+
`ScannerError` `INVALID_OPTIONS` ("the usage store is closed"); nothing is
|
|
16
|
+
dropped in silence.
|
|
17
|
+
- `destroy()` also closes the usage store the identifier opened itself. A store
|
|
18
|
+
passed as `options.usageStore` belongs to the host and is left open.
|
|
19
|
+
|
|
6
20
|
## 0.1.0 — first published release
|
|
7
21
|
|
|
8
22
|
- `createIdentifier`: card crops in, catalogue ids out, on the device
|
package/README.md
CHANGED
|
@@ -21,7 +21,8 @@ npm install @dejadex/web
|
|
|
21
21
|
What protects the platform is the lease and the signed asset URLs, not the
|
|
22
22
|
SDK's code, which runs in browsers anyway. Releases are cut from a
|
|
23
23
|
`web-v<version>` tag by `.github/workflows/publish-web-sdk.yml` (npm trusted
|
|
24
|
-
publishing, no stored token)
|
|
24
|
+
publishing, no stored token), staged and then approved by a maintainer with
|
|
25
|
+
2FA; see `CHANGELOG.md`.
|
|
25
26
|
|
|
26
27
|
## Usage
|
|
27
28
|
|
|
@@ -69,7 +70,14 @@ await identifier.drainUsage((batch) => myBackend.postUsage(batch))
|
|
|
69
70
|
device engine and resolves its `DeviceEngineInfo` (backend, precision, threads,
|
|
70
71
|
measured `perCropMs`). `status()` reports the lease, the device engine and why
|
|
71
72
|
the server route is paused. `leaseRequest()` is the renewal body (see Usage).
|
|
72
|
-
`newSession()
|
|
73
|
+
`newSession()` and `pendingUsage()` are what their names say. `destroy()`
|
|
74
|
+
releases the device engine and closes the usage store the identifier opened;
|
|
75
|
+
a store passed as `usageStore` is the host's, and stays open.
|
|
76
|
+
|
|
77
|
+
**Sign-out.** Drain usage, `destroy()` the identifier, then
|
|
78
|
+
`indexedDB.deleteDatabase('dejadex-usage')`. An SDK store still open lets go
|
|
79
|
+
of the database when the delete arrives (and rejects later calls), so the
|
|
80
|
+
delete is never blocked and no queued usage carries into the next account.
|
|
73
81
|
|
|
74
82
|
### Where a call runs
|
|
75
83
|
|
|
@@ -34,7 +34,11 @@ export interface IdentifierOptions {
|
|
|
34
34
|
readonly preload?: boolean;
|
|
35
35
|
/** The page origin the lease must allow. Default `location.origin`. */
|
|
36
36
|
readonly origin?: string | null;
|
|
37
|
-
/**
|
|
37
|
+
/**
|
|
38
|
+
* Default IndexedDB (`dejadex-usage`), memory where it is unavailable. The
|
|
39
|
+
* default store is the identifier's own: `destroy()` closes it. A store passed
|
|
40
|
+
* here is the host's: `destroy()` leaves it open, and the host closes it.
|
|
41
|
+
*/
|
|
38
42
|
readonly usageStore?: UsageStore;
|
|
39
43
|
/** Background failures (a device engine that failed to load). Never called from `identify`. */
|
|
40
44
|
readonly onError?: (error: Error) => void;
|
|
@@ -74,7 +78,13 @@ export interface Identifier {
|
|
|
74
78
|
* Null asks as a device with no lease.
|
|
75
79
|
*/
|
|
76
80
|
leaseRequest(previousLeaseId?: string | null): Promise<LeaseRequest>;
|
|
77
|
-
/**
|
|
81
|
+
/**
|
|
82
|
+
* Releases the device engine and its Worker, and closes the usage store the
|
|
83
|
+
* identifier opened itself (never one passed as `options.usageStore`). Later
|
|
84
|
+
* calls resolve `unavailable`, and the usage methods reject once that store
|
|
85
|
+
* is closed. Drain usage first: what is still queued stays on the device
|
|
86
|
+
* until a later identifier drains it or the host deletes `dejadex-usage`.
|
|
87
|
+
*/
|
|
78
88
|
destroy(): Promise<void>;
|
|
79
89
|
}
|
|
80
90
|
export declare function createIdentifier(options: IdentifierOptions): Identifier;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"identifier.d.ts","sourceRoot":"","sources":["../../src/identify/identifier.ts"],"names":[],"mappings":"AAgBA,OAAO,EAAe,KAAK,aAAa,EAAE,KAAK,cAAc,EAAE,MAAM,oBAAoB,CAAA;AACzF,OAAO,KAAK,EAAE,UAAU,EAAE,KAAK,EAAe,UAAU,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAC3F,OAAO,EAAc,KAAK,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAChE,OAAO,EAA+B,KAAK,UAAU,EAAE,MAAM,mBAAmB,CAAA;AAChF,OAAO,EAAuC,KAAK,YAAY,EAAE,KAAK,YAAY,EAAE,MAAM,aAAa,CAAA;AASvG,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,cAAc,CAAA;AAClD,OAAO,EAAmC,KAAK,WAAW,EAAE,MAAM,aAAa,CAAA;AAC/E,OAAO,EAIL,KAAK,gBAAgB,EACrB,KAAK,kBAAkB,EACvB,KAAK,gBAAgB,EACrB,KAAK,mBAAmB,EACxB,KAAK,eAAe,EAErB,MAAM,YAAY,CAAA;AACnB,OAAO,EAAuB,KAAK,UAAU,EAAE,MAAM,qBAAqB,CAAA;AAC1E,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AAK7C,MAAM,WAAW,iBAAiB;IAChC,8DAA8D;IAC9D,QAAQ,CAAC,MAAM,EAAE,UAAU,CAAA;IAC3B,gFAAgF;IAChF,QAAQ,CAAC,eAAe,EAAE,SAAS,cAAc,EAAE,CAAA;IACnD,4FAA4F;IAC5F,QAAQ,CAAC,KAAK,CAAC,EAAE,UAAU,CAAA;IAC3B,gGAAgG;IAChG,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAClC,oDAAoD;IACpD,QAAQ,CAAC,cAAc,CAAC,EAAE,kBAAkB,CAAA;IAC5C,uGAAuG;IACvG,QAAQ,CAAC,kBAAkB,CAAC,EAAE,MAAM,CAAA;IACpC,qFAAqF;IACrF,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,CAAA;IACjC,QAAQ,CAAC,OAAO,CAAC,EAAE,cAAc,CAAA;IACjC;;;;OAIG;IACH,QAAQ,CAAC,MAAM,CAAC,EAAE,QAAQ,GAAG,QAAQ,GAAG,CAAC,MAAM,UAAU,CAAC,CAAA;IAC1D,mFAAmF;IACnF,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAA;IAC1B,uEAAuE;IACvE,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAC/B
|
|
1
|
+
{"version":3,"file":"identifier.d.ts","sourceRoot":"","sources":["../../src/identify/identifier.ts"],"names":[],"mappings":"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"}
|
|
@@ -86,7 +86,10 @@ export function createIdentifier(options) {
|
|
|
86
86
|
const doFetch = options.fetch ?? ((url, init) => fetch(url, init));
|
|
87
87
|
const loadEngine = options.loadEngine ?? defaultEngineLoader(options.engine);
|
|
88
88
|
const health = new ServerHealth();
|
|
89
|
-
|
|
89
|
+
// A store the identifier opened is closed by `destroy()`; the host's is not.
|
|
90
|
+
const ownStore = options.usageStore === undefined;
|
|
91
|
+
const storeReady = options.usageStore ? Promise.resolve(options.usageStore) : defaultUsageStore();
|
|
92
|
+
const meterReady = storeReady.then((store) => new UsageMeter({ store, now }));
|
|
90
93
|
let lease = null;
|
|
91
94
|
/** The constructor's lease while it is being verified; `identify` waits for it. */
|
|
92
95
|
let initialLease = null;
|
|
@@ -312,6 +315,8 @@ export function createIdentifier(options) {
|
|
|
312
315
|
engine = null;
|
|
313
316
|
engineKey = null;
|
|
314
317
|
await e?.release().catch(() => undefined);
|
|
318
|
+
if (ownStore)
|
|
319
|
+
(await storeReady).close?.();
|
|
315
320
|
},
|
|
316
321
|
};
|
|
317
322
|
if (options.lease) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"identifier.js","sourceRoot":"","sources":["../../src/identify/identifier.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"identifier.js","sourceRoot":"","sources":["../../src/identify/identifier.ts"],"names":[],"mappings":"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"}
|
package/dist/usage/store.d.ts
CHANGED
|
@@ -1,21 +1,3 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* The device's usage queue: what was counted waits here, across reloads,
|
|
3
|
-
* until the host has delivered it. IndexedDB in the browser; an in-memory
|
|
4
|
-
* store for tests and for runtimes without IndexedDB (where usage then lives
|
|
5
|
-
* only as long as the page).
|
|
6
|
-
*
|
|
7
|
-
* Two stages:
|
|
8
|
-
* - a **tally** per (lease, session) collects the cards first identified in
|
|
9
|
-
* that session and the number of calls, as answers come in;
|
|
10
|
-
* - `seal` turns every open tally into a `UsageReport` with the lease's next
|
|
11
|
-
* `seq` and a fresh `reportId`, atomically. A sealed report never changes,
|
|
12
|
-
* so delivering it twice is harmless (the service dedupes by `reportId`).
|
|
13
|
-
*
|
|
14
|
-
* Database `dejadex-usage`, version 1:
|
|
15
|
-
* tallies key `<leaseId>\n<sessionId>` → Tally
|
|
16
|
-
* reports keyPath `report.reportId`, index `order` → { order, report }
|
|
17
|
-
* meta `deviceId`, `order`, `seq:<leaseId>`, `reported:<leaseId>`
|
|
18
|
-
*/
|
|
19
1
|
import type { UsageReport } from '../types.js';
|
|
20
2
|
export interface Tally {
|
|
21
3
|
readonly leaseId: string;
|
|
@@ -42,6 +24,12 @@ export interface UsageStore {
|
|
|
42
24
|
reportedThrough(leaseId: string): Promise<number | null>;
|
|
43
25
|
/** Queued reports plus open tallies. */
|
|
44
26
|
size(): Promise<number>;
|
|
27
|
+
/**
|
|
28
|
+
* Releases what the store holds open (the IndexedDB connection). Later calls
|
|
29
|
+
* reject with `ScannerError` `INVALID_OPTIONS`. Optional for stores a host
|
|
30
|
+
* implements; the identifier closes only a store it opened itself.
|
|
31
|
+
*/
|
|
32
|
+
close?(): void;
|
|
45
33
|
}
|
|
46
34
|
export declare function randomId(bytes?: number): string;
|
|
47
35
|
export declare function memoryUsageStore(): UsageStore;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../src/usage/store.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../src/usage/store.ts"],"names":[],"mappings":"AAyBA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AAE9C,MAAM,WAAW,KAAK;IACpB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;IACxB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;IAC1B,qCAAqC;IACrC,QAAQ,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,CAAA;IACnC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,gDAAgD;IAChD,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;CACpB;AAED,MAAM,WAAW,UAAU;IACzB,yEAAyE;IACzE,QAAQ,IAAI,OAAO,CAAC,MAAM,CAAC,CAAA;IAC3B,iFAAiF;IACjF,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,MAAM,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IAC/G,iFAAiF;IACjF,IAAI,CAAC,WAAW,EAAE,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAA;IAChD,yDAAyD;IACzD,IAAI,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,WAAW,EAAE,CAAC,CAAA;IACpD,MAAM,CAAC,SAAS,EAAE,SAAS,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IACnD,uFAAuF;IACvF,YAAY,CAAC,OAAO,EAAE,SAAS,WAAW,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IAC5D,qEAAqE;IACrE,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAA;IACxD,wCAAwC;IACxC,IAAI,IAAI,OAAO,CAAC,MAAM,CAAC,CAAA;IACvB;;;;OAIG;IACH,KAAK,CAAC,IAAI,IAAI,CAAA;CACf;AAED,wBAAgB,QAAQ,CAAC,KAAK,SAAK,GAAG,MAAM,CAM3C;AAqBD,wBAAgB,gBAAgB,IAAI,UAAU,CA4C7C;AAyBD,yEAAyE;AACzE,wBAAsB,mBAAmB,CAAC,OAAO,GAAE,UAAsB,GAAG,OAAO,CAAC,UAAU,CAAC,CAiH9F;AAED,6EAA6E;AAC7E,wBAAsB,iBAAiB,IAAI,OAAO,CAAC,UAAU,CAAC,CAO7D"}
|
package/dist/usage/store.js
CHANGED
|
@@ -1,3 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The device's usage queue: what was counted waits here, across reloads,
|
|
3
|
+
* until the host has delivered it. IndexedDB in the browser; an in-memory
|
|
4
|
+
* store for tests and for runtimes without IndexedDB (where usage then lives
|
|
5
|
+
* only as long as the page).
|
|
6
|
+
*
|
|
7
|
+
* Two stages:
|
|
8
|
+
* - a **tally** per (lease, session) collects the cards first identified in
|
|
9
|
+
* that session and the number of calls, as answers come in;
|
|
10
|
+
* - `seal` turns every open tally into a `UsageReport` with the lease's next
|
|
11
|
+
* `seq` and a fresh `reportId`, atomically. A sealed report never changes,
|
|
12
|
+
* so delivering it twice is harmless (the service dedupes by `reportId`).
|
|
13
|
+
*
|
|
14
|
+
* Database `dejadex-usage`, version 1:
|
|
15
|
+
* tallies key `<leaseId>\n<sessionId>` → Tally
|
|
16
|
+
* reports keyPath `report.reportId`, index `order` → { order, report }
|
|
17
|
+
* meta `deviceId`, `order`, `seq:<leaseId>`, `reported:<leaseId>`
|
|
18
|
+
*
|
|
19
|
+
* The connection is never held against the host: on `versionchange` (the
|
|
20
|
+
* host's `indexedDB.deleteDatabase('dejadex-usage')` on sign-out, or a newer
|
|
21
|
+
* page upgrading it) the store closes itself, so the delete proceeds. A closed
|
|
22
|
+
* store rejects every later call with a `ScannerError`; nothing is dropped
|
|
23
|
+
* without the caller hearing of it.
|
|
24
|
+
*/
|
|
25
|
+
import { ScannerError } from '../errors.js';
|
|
1
26
|
export function randomId(bytes = 16) {
|
|
2
27
|
const b = new Uint8Array(bytes);
|
|
3
28
|
crypto.getRandomValues(b);
|
|
@@ -68,6 +93,8 @@ export function memoryUsageStore() {
|
|
|
68
93
|
async size() {
|
|
69
94
|
return queue.length + tallies.size;
|
|
70
95
|
},
|
|
96
|
+
/** Nothing to release: memory lives as long as the page. */
|
|
97
|
+
close() { },
|
|
71
98
|
};
|
|
72
99
|
}
|
|
73
100
|
const DB_NAME = 'dejadex-usage';
|
|
@@ -99,9 +126,29 @@ export async function indexedDbUsageStore(factory = indexedDB) {
|
|
|
99
126
|
db.createObjectStore('meta');
|
|
100
127
|
};
|
|
101
128
|
const db = await request(open);
|
|
129
|
+
/** Why the connection is gone, once it is. */
|
|
130
|
+
let closed = null;
|
|
131
|
+
const shut = (why) => {
|
|
132
|
+
if (closed !== null)
|
|
133
|
+
return;
|
|
134
|
+
closed = why;
|
|
135
|
+
db.close();
|
|
136
|
+
};
|
|
137
|
+
// Another party wants the database (a host's deleteDatabase, a newer
|
|
138
|
+
// version): let go, or its request is blocked for the life of the document.
|
|
139
|
+
db.onversionchange = () => shut('it was deleted or upgraded elsewhere');
|
|
140
|
+
// The browser closed it (storage cleared, the disk went away).
|
|
141
|
+
db.onclose = () => {
|
|
142
|
+
closed ??= 'the browser closed it';
|
|
143
|
+
};
|
|
144
|
+
const transaction = (names, mode) => {
|
|
145
|
+
if (closed !== null)
|
|
146
|
+
throw new ScannerError('INVALID_OPTIONS', `the usage store is closed: ${closed}`);
|
|
147
|
+
return db.transaction(names, mode);
|
|
148
|
+
};
|
|
102
149
|
return {
|
|
103
150
|
async deviceId() {
|
|
104
|
-
const tx =
|
|
151
|
+
const tx = transaction('meta', 'readwrite');
|
|
105
152
|
const meta = tx.objectStore('meta');
|
|
106
153
|
let id = (await request(meta.get('deviceId')));
|
|
107
154
|
if (typeof id !== 'string') {
|
|
@@ -112,7 +159,7 @@ export async function indexedDbUsageStore(factory = indexedDB) {
|
|
|
112
159
|
return id;
|
|
113
160
|
},
|
|
114
161
|
async tally(leaseId, sessionId, cardIds, calls, at) {
|
|
115
|
-
const tx =
|
|
162
|
+
const tx = transaction('tallies', 'readwrite');
|
|
116
163
|
const store = tx.objectStore('tallies');
|
|
117
164
|
const key = tallyKey(leaseId, sessionId);
|
|
118
165
|
const prev = (await request(store.get(key)));
|
|
@@ -120,7 +167,7 @@ export async function indexedDbUsageStore(factory = indexedDB) {
|
|
|
120
167
|
await done(tx);
|
|
121
168
|
},
|
|
122
169
|
async seal(newReportId) {
|
|
123
|
-
const tx =
|
|
170
|
+
const tx = transaction(['tallies', 'reports', 'meta'], 'readwrite');
|
|
124
171
|
const tallies = tx.objectStore('tallies');
|
|
125
172
|
const reports = tx.objectStore('reports');
|
|
126
173
|
const meta = tx.objectStore('meta');
|
|
@@ -144,20 +191,20 @@ export async function indexedDbUsageStore(factory = indexedDB) {
|
|
|
144
191
|
return open.length;
|
|
145
192
|
},
|
|
146
193
|
async peek(limit) {
|
|
147
|
-
const tx =
|
|
194
|
+
const tx = transaction('reports', 'readonly');
|
|
148
195
|
const rows = (await request(tx.objectStore('reports').index('order').getAll(null, limit)));
|
|
149
196
|
await done(tx);
|
|
150
197
|
return rows.map((r) => r.report);
|
|
151
198
|
},
|
|
152
199
|
async remove(ids) {
|
|
153
|
-
const tx =
|
|
200
|
+
const tx = transaction('reports', 'readwrite');
|
|
154
201
|
const store = tx.objectStore('reports');
|
|
155
202
|
for (const id of ids)
|
|
156
203
|
store.delete(id);
|
|
157
204
|
await done(tx);
|
|
158
205
|
},
|
|
159
206
|
async markReported(reports) {
|
|
160
|
-
const tx =
|
|
207
|
+
const tx = transaction('meta', 'readwrite');
|
|
161
208
|
const meta = tx.objectStore('meta');
|
|
162
209
|
const top = new Map();
|
|
163
210
|
for (const r of reports)
|
|
@@ -171,17 +218,20 @@ export async function indexedDbUsageStore(factory = indexedDB) {
|
|
|
171
218
|
await done(tx);
|
|
172
219
|
},
|
|
173
220
|
async reportedThrough(leaseId) {
|
|
174
|
-
const tx =
|
|
221
|
+
const tx = transaction('meta', 'readonly');
|
|
175
222
|
const v = (await request(tx.objectStore('meta').get(`reported:${leaseId}`)));
|
|
176
223
|
await done(tx);
|
|
177
224
|
return v ?? null;
|
|
178
225
|
},
|
|
179
226
|
async size() {
|
|
180
|
-
const tx =
|
|
227
|
+
const tx = transaction(['reports', 'tallies'], 'readonly');
|
|
181
228
|
const [a, b] = await Promise.all([request(tx.objectStore('reports').count()), request(tx.objectStore('tallies').count())]);
|
|
182
229
|
await done(tx);
|
|
183
230
|
return a + b;
|
|
184
231
|
},
|
|
232
|
+
close() {
|
|
233
|
+
shut('close() was called');
|
|
234
|
+
},
|
|
185
235
|
};
|
|
186
236
|
}
|
|
187
237
|
/** IndexedDB where it opens, else memory (private windows can refuse it). */
|
package/dist/usage/store.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"store.js","sourceRoot":"","sources":["../../src/usage/store.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"store.js","sourceRoot":"","sources":["../../src/usage/store.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -72,7 +72,11 @@ export interface IdentifierOptions {
|
|
|
72
72
|
readonly preload?: boolean
|
|
73
73
|
/** The page origin the lease must allow. Default `location.origin`. */
|
|
74
74
|
readonly origin?: string | null
|
|
75
|
-
/**
|
|
75
|
+
/**
|
|
76
|
+
* Default IndexedDB (`dejadex-usage`), memory where it is unavailable. The
|
|
77
|
+
* default store is the identifier's own: `destroy()` closes it. A store passed
|
|
78
|
+
* here is the host's: `destroy()` leaves it open, and the host closes it.
|
|
79
|
+
*/
|
|
76
80
|
readonly usageStore?: UsageStore
|
|
77
81
|
/** Background failures (a device engine that failed to load). Never called from `identify`. */
|
|
78
82
|
readonly onError?: (error: Error) => void
|
|
@@ -114,7 +118,13 @@ export interface Identifier {
|
|
|
114
118
|
* Null asks as a device with no lease.
|
|
115
119
|
*/
|
|
116
120
|
leaseRequest(previousLeaseId?: string | null): Promise<LeaseRequest>
|
|
117
|
-
/**
|
|
121
|
+
/**
|
|
122
|
+
* Releases the device engine and its Worker, and closes the usage store the
|
|
123
|
+
* identifier opened itself (never one passed as `options.usageStore`). Later
|
|
124
|
+
* calls resolve `unavailable`, and the usage methods reject once that store
|
|
125
|
+
* is closed. Drain usage first: what is still queued stays on the device
|
|
126
|
+
* until a later identifier drains it or the host deletes `dejadex-usage`.
|
|
127
|
+
*/
|
|
118
128
|
destroy(): Promise<void>
|
|
119
129
|
}
|
|
120
130
|
|
|
@@ -176,9 +186,10 @@ export function createIdentifier(options: IdentifierOptions): Identifier {
|
|
|
176
186
|
const doFetch: ServerFetch = options.fetch ?? ((url, init) => fetch(url, init))
|
|
177
187
|
const loadEngine = options.loadEngine ?? defaultEngineLoader(options.engine)
|
|
178
188
|
const health = new ServerHealth()
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
)
|
|
189
|
+
// A store the identifier opened is closed by `destroy()`; the host's is not.
|
|
190
|
+
const ownStore = options.usageStore === undefined
|
|
191
|
+
const storeReady: Promise<UsageStore> = options.usageStore ? Promise.resolve(options.usageStore) : defaultUsageStore()
|
|
192
|
+
const meterReady: Promise<UsageMeter> = storeReady.then((store) => new UsageMeter({ store, now }))
|
|
182
193
|
|
|
183
194
|
let lease: Lease | null = null
|
|
184
195
|
/** The constructor's lease while it is being verified; `identify` waits for it. */
|
|
@@ -401,6 +412,7 @@ export function createIdentifier(options: IdentifierOptions): Identifier {
|
|
|
401
412
|
engine = null
|
|
402
413
|
engineKey = null
|
|
403
414
|
await e?.release().catch(() => undefined)
|
|
415
|
+
if (ownStore) (await storeReady).close?.()
|
|
404
416
|
},
|
|
405
417
|
}
|
|
406
418
|
|
package/src/usage/store.ts
CHANGED
|
@@ -15,7 +15,14 @@
|
|
|
15
15
|
* tallies key `<leaseId>\n<sessionId>` → Tally
|
|
16
16
|
* reports keyPath `report.reportId`, index `order` → { order, report }
|
|
17
17
|
* meta `deviceId`, `order`, `seq:<leaseId>`, `reported:<leaseId>`
|
|
18
|
+
*
|
|
19
|
+
* The connection is never held against the host: on `versionchange` (the
|
|
20
|
+
* host's `indexedDB.deleteDatabase('dejadex-usage')` on sign-out, or a newer
|
|
21
|
+
* page upgrading it) the store closes itself, so the delete proceeds. A closed
|
|
22
|
+
* store rejects every later call with a `ScannerError`; nothing is dropped
|
|
23
|
+
* without the caller hearing of it.
|
|
18
24
|
*/
|
|
25
|
+
import { ScannerError } from '../errors.js'
|
|
19
26
|
import type { UsageReport } from '../types.js'
|
|
20
27
|
|
|
21
28
|
export interface Tally {
|
|
@@ -44,6 +51,12 @@ export interface UsageStore {
|
|
|
44
51
|
reportedThrough(leaseId: string): Promise<number | null>
|
|
45
52
|
/** Queued reports plus open tallies. */
|
|
46
53
|
size(): Promise<number>
|
|
54
|
+
/**
|
|
55
|
+
* Releases what the store holds open (the IndexedDB connection). Later calls
|
|
56
|
+
* reject with `ScannerError` `INVALID_OPTIONS`. Optional for stores a host
|
|
57
|
+
* implements; the identifier closes only a store it opened itself.
|
|
58
|
+
*/
|
|
59
|
+
close?(): void
|
|
47
60
|
}
|
|
48
61
|
|
|
49
62
|
export function randomId(bytes = 16): string {
|
|
@@ -114,6 +127,8 @@ export function memoryUsageStore(): UsageStore {
|
|
|
114
127
|
async size() {
|
|
115
128
|
return queue.length + tallies.size
|
|
116
129
|
},
|
|
130
|
+
/** Nothing to release: memory lives as long as the page. */
|
|
131
|
+
close() {},
|
|
117
132
|
}
|
|
118
133
|
}
|
|
119
134
|
|
|
@@ -153,9 +168,28 @@ export async function indexedDbUsageStore(factory: IDBFactory = indexedDB): Prom
|
|
|
153
168
|
}
|
|
154
169
|
const db = await request(open)
|
|
155
170
|
|
|
171
|
+
/** Why the connection is gone, once it is. */
|
|
172
|
+
let closed: string | null = null
|
|
173
|
+
const shut = (why: string) => {
|
|
174
|
+
if (closed !== null) return
|
|
175
|
+
closed = why
|
|
176
|
+
db.close()
|
|
177
|
+
}
|
|
178
|
+
// Another party wants the database (a host's deleteDatabase, a newer
|
|
179
|
+
// version): let go, or its request is blocked for the life of the document.
|
|
180
|
+
db.onversionchange = () => shut('it was deleted or upgraded elsewhere')
|
|
181
|
+
// The browser closed it (storage cleared, the disk went away).
|
|
182
|
+
db.onclose = () => {
|
|
183
|
+
closed ??= 'the browser closed it'
|
|
184
|
+
}
|
|
185
|
+
const transaction = (names: string | string[], mode: IDBTransactionMode): IDBTransaction => {
|
|
186
|
+
if (closed !== null) throw new ScannerError('INVALID_OPTIONS', `the usage store is closed: ${closed}`)
|
|
187
|
+
return db.transaction(names, mode)
|
|
188
|
+
}
|
|
189
|
+
|
|
156
190
|
return {
|
|
157
191
|
async deviceId() {
|
|
158
|
-
const tx =
|
|
192
|
+
const tx = transaction('meta', 'readwrite')
|
|
159
193
|
const meta = tx.objectStore('meta')
|
|
160
194
|
let id = (await request(meta.get('deviceId'))) as unknown
|
|
161
195
|
if (typeof id !== 'string') {
|
|
@@ -166,7 +200,7 @@ export async function indexedDbUsageStore(factory: IDBFactory = indexedDB): Prom
|
|
|
166
200
|
return id as string
|
|
167
201
|
},
|
|
168
202
|
async tally(leaseId, sessionId, cardIds, calls, at) {
|
|
169
|
-
const tx =
|
|
203
|
+
const tx = transaction('tallies', 'readwrite')
|
|
170
204
|
const store = tx.objectStore('tallies')
|
|
171
205
|
const key = tallyKey(leaseId, sessionId)
|
|
172
206
|
const prev = (await request(store.get(key))) as Tally | undefined
|
|
@@ -174,7 +208,7 @@ export async function indexedDbUsageStore(factory: IDBFactory = indexedDB): Prom
|
|
|
174
208
|
await done(tx)
|
|
175
209
|
},
|
|
176
210
|
async seal(newReportId) {
|
|
177
|
-
const tx =
|
|
211
|
+
const tx = transaction(['tallies', 'reports', 'meta'], 'readwrite')
|
|
178
212
|
const tallies = tx.objectStore('tallies')
|
|
179
213
|
const reports = tx.objectStore('reports')
|
|
180
214
|
const meta = tx.objectStore('meta')
|
|
@@ -196,19 +230,19 @@ export async function indexedDbUsageStore(factory: IDBFactory = indexedDB): Prom
|
|
|
196
230
|
return open.length
|
|
197
231
|
},
|
|
198
232
|
async peek(limit) {
|
|
199
|
-
const tx =
|
|
233
|
+
const tx = transaction('reports', 'readonly')
|
|
200
234
|
const rows = (await request(tx.objectStore('reports').index('order').getAll(null, limit))) as QueuedRow[]
|
|
201
235
|
await done(tx)
|
|
202
236
|
return rows.map((r) => r.report)
|
|
203
237
|
},
|
|
204
238
|
async remove(ids) {
|
|
205
|
-
const tx =
|
|
239
|
+
const tx = transaction('reports', 'readwrite')
|
|
206
240
|
const store = tx.objectStore('reports')
|
|
207
241
|
for (const id of ids) store.delete(id)
|
|
208
242
|
await done(tx)
|
|
209
243
|
},
|
|
210
244
|
async markReported(reports) {
|
|
211
|
-
const tx =
|
|
245
|
+
const tx = transaction('meta', 'readwrite')
|
|
212
246
|
const meta = tx.objectStore('meta')
|
|
213
247
|
const top = new Map<string, number>()
|
|
214
248
|
for (const r of reports) top.set(r.leaseId, Math.max(top.get(r.leaseId) ?? 0, r.seq))
|
|
@@ -220,17 +254,20 @@ export async function indexedDbUsageStore(factory: IDBFactory = indexedDB): Prom
|
|
|
220
254
|
await done(tx)
|
|
221
255
|
},
|
|
222
256
|
async reportedThrough(leaseId) {
|
|
223
|
-
const tx =
|
|
257
|
+
const tx = transaction('meta', 'readonly')
|
|
224
258
|
const v = (await request(tx.objectStore('meta').get(`reported:${leaseId}`))) as number | undefined
|
|
225
259
|
await done(tx)
|
|
226
260
|
return v ?? null
|
|
227
261
|
},
|
|
228
262
|
async size() {
|
|
229
|
-
const tx =
|
|
263
|
+
const tx = transaction(['reports', 'tallies'], 'readonly')
|
|
230
264
|
const [a, b] = await Promise.all([request(tx.objectStore('reports').count()), request(tx.objectStore('tallies').count())])
|
|
231
265
|
await done(tx)
|
|
232
266
|
return a + b
|
|
233
267
|
},
|
|
268
|
+
close() {
|
|
269
|
+
shut('close() was called')
|
|
270
|
+
},
|
|
234
271
|
}
|
|
235
272
|
}
|
|
236
273
|
|