@proappstore/sdk 1.16.42 → 1.16.43
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 +20 -0
- package/dist/actions.d.ts +6 -1
- package/dist/actions.d.ts.map +1 -1
- package/dist/actions.js +6 -1
- package/dist/actions.js.map +1 -1
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +13 -1
- package/dist/index.js.map +1 -1
- package/dist/monitoring.d.ts +58 -0
- package/dist/monitoring.d.ts.map +1 -0
- package/dist/monitoring.js +146 -0
- package/dist/monitoring.js.map +1 -0
- package/dist/types.d.ts +7 -0
- package/dist/types.d.ts.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -598,6 +598,26 @@ are enforced by the platform before SQL reaches the data worker.
|
|
|
598
598
|
|
|
599
599
|
Tables are user-defined (create them via `db.execute('CREATE TABLE IF NOT EXISTS ...')`). The schema is entirely up to the app developer.
|
|
600
600
|
|
|
601
|
+
## Monitoring (`app.logs`)
|
|
602
|
+
|
|
603
|
+
Runtime monitoring is **on by default**. `initPro()` captures uncaught `error` /
|
|
604
|
+
`unhandledrejection` events and records failed `app.actions.call()` (action name +
|
|
605
|
+
HTTP status only), batching them to `POST /v1/apps/:appId/logs`. Owners read them
|
|
606
|
+
back (owner-only) via `GET /v1/apps/:appId/logs` / the dashboard.
|
|
607
|
+
|
|
608
|
+
```ts
|
|
609
|
+
app.logs.error('billing', 'checkout failed', { code }); // your own entries
|
|
610
|
+
app.logs.capture(err, 'payments'); // a caught exception
|
|
611
|
+
```
|
|
612
|
+
|
|
613
|
+
Entries include route, auth mode, and any `monitoring.build` metadata. The SDK
|
|
614
|
+
**never** logs tokens, credentials, SQL params, or request bodies. Works in both
|
|
615
|
+
`legacy-bearer` and `platform-cookie` modes; flushes on an interval and on
|
|
616
|
+
`pagehide`. Opt out with `initPro({ monitoring: { auto: false } })`.
|
|
617
|
+
|
|
618
|
+
Ingestion is hardened (issue #108): the app must exist and each (app, user) has a
|
|
619
|
+
daily ingest quota, so logs can't be spoofed onto other apps or flooded.
|
|
620
|
+
|
|
601
621
|
## License
|
|
602
622
|
|
|
603
623
|
MIT.
|
package/dist/actions.d.ts
CHANGED
|
@@ -2,11 +2,16 @@ interface AuthLike {
|
|
|
2
2
|
handleUnauthorized(): void;
|
|
3
3
|
authenticatedFetch(input: string | URL, init?: RequestInit): Promise<Response>;
|
|
4
4
|
}
|
|
5
|
+
/** Minimal logger surface (satisfied by Monitoring) — failures only, never params. */
|
|
6
|
+
interface LoggerLike {
|
|
7
|
+
log(level: 'error', category: string, message: string, data?: Record<string, unknown>): void;
|
|
8
|
+
}
|
|
5
9
|
export declare class Actions {
|
|
6
10
|
private readonly appId;
|
|
7
11
|
private readonly apiBase;
|
|
8
12
|
private readonly auth;
|
|
9
|
-
|
|
13
|
+
private readonly logger?;
|
|
14
|
+
constructor(appId: string, apiBase: string, auth: AuthLike, logger?: LoggerLike | undefined);
|
|
10
15
|
call<T = unknown>(name: string, params?: Record<string, unknown>): Promise<T>;
|
|
11
16
|
callPublic<T = unknown>(name: string, params?: Record<string, unknown>): Promise<T>;
|
|
12
17
|
}
|
package/dist/actions.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"actions.d.ts","sourceRoot":"","sources":["../src/actions.ts"],"names":[],"mappings":"AAAA,UAAU,QAAQ;IAChB,kBAAkB,IAAI,IAAI,CAAC;IAC3B,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,GAAG,EAAE,IAAI,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;CAChF;AAED,qBAAa,OAAO;IAEhB,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,OAAO,CAAC,QAAQ,CAAC,IAAI;
|
|
1
|
+
{"version":3,"file":"actions.d.ts","sourceRoot":"","sources":["../src/actions.ts"],"names":[],"mappings":"AAAA,UAAU,QAAQ;IAChB,kBAAkB,IAAI,IAAI,CAAC;IAC3B,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,GAAG,EAAE,IAAI,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;CAChF;AAED,sFAAsF;AACtF,UAAU,UAAU;IAClB,GAAG,CAAC,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;CAC9F;AAED,qBAAa,OAAO;IAEhB,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,OAAO,CAAC,QAAQ,CAAC,IAAI;IACrB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC;gBAHP,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,QAAQ,EACd,MAAM,CAAC,EAAE,UAAU,YAAA;IAGhC,IAAI,CAAC,CAAC,GAAG,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,GAAG,OAAO,CAAC,CAAC,CAAC;IAuBjF,UAAU,CAAC,CAAC,GAAG,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,GAAG,OAAO,CAAC,CAAC,CAAC;CAe9F"}
|
package/dist/actions.js
CHANGED
|
@@ -2,10 +2,12 @@ export class Actions {
|
|
|
2
2
|
appId;
|
|
3
3
|
apiBase;
|
|
4
4
|
auth;
|
|
5
|
-
|
|
5
|
+
logger;
|
|
6
|
+
constructor(appId, apiBase, auth, logger) {
|
|
6
7
|
this.appId = appId;
|
|
7
8
|
this.apiBase = apiBase;
|
|
8
9
|
this.auth = auth;
|
|
10
|
+
this.logger = logger;
|
|
9
11
|
}
|
|
10
12
|
async call(name, params = {}) {
|
|
11
13
|
const response = await this.auth.authenticatedFetch(`${this.apiBase}/v1/apps/${encodeURIComponent(this.appId)}/actions/${encodeURIComponent(name)}`, {
|
|
@@ -14,11 +16,14 @@ export class Actions {
|
|
|
14
16
|
body: JSON.stringify({ params }),
|
|
15
17
|
});
|
|
16
18
|
if (response.status === 401) {
|
|
19
|
+
// #106: record the failure (action name + status only — never the params).
|
|
20
|
+
this.logger?.log('error', 'action', `action ${name} unauthorized`, { action: name, status: 401 });
|
|
17
21
|
this.auth.handleUnauthorized();
|
|
18
22
|
throw new Error('Not signed in.');
|
|
19
23
|
}
|
|
20
24
|
if (!response.ok) {
|
|
21
25
|
const text = await response.text().catch(() => '');
|
|
26
|
+
this.logger?.log('error', 'action', `action ${name} failed`, { action: name, status: response.status });
|
|
22
27
|
throw new Error(`actions.${name} failed: ${response.status} ${text}`);
|
|
23
28
|
}
|
|
24
29
|
return (await response.json());
|
package/dist/actions.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"actions.js","sourceRoot":"","sources":["../src/actions.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"actions.js","sourceRoot":"","sources":["../src/actions.ts"],"names":[],"mappings":"AAUA,MAAM,OAAO,OAAO;IAEC;IACA;IACA;IACA;IAJnB,YACmB,KAAa,EACb,OAAe,EACf,IAAc,EACd,MAAmB;QAHnB,UAAK,GAAL,KAAK,CAAQ;QACb,YAAO,GAAP,OAAO,CAAQ;QACf,SAAI,GAAJ,IAAI,CAAU;QACd,WAAM,GAAN,MAAM,CAAa;IACnC,CAAC;IAEJ,KAAK,CAAC,IAAI,CAAc,IAAY,EAAE,SAAkC,EAAE;QACxE,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,kBAAkB,CACjD,GAAG,IAAI,CAAC,OAAO,YAAY,kBAAkB,CAAC,IAAI,CAAC,KAAK,CAAC,YAAY,kBAAkB,CAAC,IAAI,CAAC,EAAE,EAC/F;YACE,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;YAC/C,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;SACjC,CACF,CAAC;QACF,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;YAC5B,2EAA2E;YAC3E,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,OAAO,EAAE,QAAQ,EAAE,UAAU,IAAI,eAAe,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC;YAClG,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE,CAAC;YAC/B,MAAM,IAAI,KAAK,CAAC,gBAAgB,CAAC,CAAC;QACpC,CAAC;QACD,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;YACnD,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,OAAO,EAAE,QAAQ,EAAE,UAAU,IAAI,SAAS,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;YACxG,MAAM,IAAI,KAAK,CAAC,WAAW,IAAI,YAAY,QAAQ,CAAC,MAAM,IAAI,IAAI,EAAE,CAAC,CAAC;QACxE,CAAC;QACD,OAAO,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAM,CAAC;IACtC,CAAC;IAED,KAAK,CAAC,UAAU,CAAc,IAAY,EAAE,SAAkC,EAAE;QAC9E,MAAM,QAAQ,GAAG,MAAM,KAAK,CAC1B,GAAG,IAAI,CAAC,OAAO,YAAY,kBAAkB,CAAC,IAAI,CAAC,KAAK,CAAC,YAAY,kBAAkB,CAAC,IAAI,CAAC,EAAE,EAC/F;YACE,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;YAC/C,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;SACjC,CACF,CAAC;QACF,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;YACnD,MAAM,IAAI,KAAK,CAAC,WAAW,IAAI,YAAY,QAAQ,CAAC,MAAM,IAAI,IAAI,EAAE,CAAC,CAAC;QACxE,CAAC;QACD,OAAO,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAM,CAAC;IACtC,CAAC;CACF"}
|
package/dist/index.d.ts
CHANGED
|
@@ -17,6 +17,7 @@ import { Email } from './email.js';
|
|
|
17
17
|
import { Webhooks } from './webhooks.js';
|
|
18
18
|
import { Invites } from './invites.js';
|
|
19
19
|
import { Actions } from './actions.js';
|
|
20
|
+
import { Monitoring } from './monitoring.js';
|
|
20
21
|
import type { ProInitOptions } from './types.js';
|
|
21
22
|
export type { User, Unsubscribe } from './base-types.js';
|
|
22
23
|
export type { AuthMode, AuthProvider } from './auth.js';
|
|
@@ -66,6 +67,8 @@ export declare class ProAppStore {
|
|
|
66
67
|
readonly webhooks: Webhooks;
|
|
67
68
|
readonly invites: Invites;
|
|
68
69
|
readonly actions: Actions;
|
|
70
|
+
/** Runtime monitoring — auto-captures errors + records failed ops to app_logs. */
|
|
71
|
+
readonly logs: Monitoring;
|
|
69
72
|
constructor(opts: ProInitOptions);
|
|
70
73
|
}
|
|
71
74
|
/** Create a new ProAppStore SDK instance. Includes all free + pro features. */
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,EAAE,EAAE,MAAM,SAAS,CAAC;AAC7B,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAE,EAAE,EAAE,MAAM,SAAS,CAAC;AAC7B,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AACnC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAC/B,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAGjD,YAAY,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AACzD,YAAY,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AACxD,YAAY,EAAE,eAAe,EAAE,IAAI,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAC/E,YAAY,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAC9D,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAC3C,YAAY,EAAE,MAAM,EAAE,cAAc,EAAE,mBAAmB,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC9F,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAEvC,YAAY,EACV,cAAc,EACd,YAAY,EACZ,kBAAkB,IAAI,sBAAsB,EAC5C,eAAe,EACf,WAAW,GACZ,MAAM,YAAY,CAAC;AAEpB,YAAY,EAAE,WAAW,EAAE,aAAa,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AACpF,YAAY,EAAE,mBAAmB,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAC1E,YAAY,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAC9C,YAAY,EACV,cAAc,EACd,eAAe,EACf,WAAW,EACX,eAAe,EACf,cAAc,EACd,YAAY,EACZ,WAAW,GACZ,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,YAAY,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC/C,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,YAAY,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAItE,OAAO,EAAE,OAAO,EAAE,eAAe,EAAE,OAAO,EAAE,gBAAgB,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAE3F,OAAO,EAAE,UAAU,EAAE,kBAAkB,EAAE,UAAU,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAC7F,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AACpD,YAAY,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACtD,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,YAAY,EAAE,aAAa,EAAE,qBAAqB,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACjF,OAAO,EACL,MAAM,EAAE,WAAW,EAAE,cAAc,EAAE,YAAY,EAAE,WAAW,EAC9D,QAAQ,EAAE,kBAAkB,EAAE,WAAW,EAAE,aAAa,EAAE,UAAU,EACpE,cAAc,GACf,MAAM,SAAS,CAAC;AAEjB;;GAEG;AACH,qBAAa,WAAW;IACtB,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC;IACpB,QAAQ,CAAC,EAAE,EAAE,EAAE,CAAC;IAChB,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC;IAC5B,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC;IACtB,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC;IACtB,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC;IACzB,QAAQ,CAAC,YAAY,EAAE,eAAe,CAAC;IACvC,QAAQ,CAAC,OAAO,EAAE,UAAU,CAAC;IAC7B,QAAQ,CAAC,EAAE,EAAE,QAAQ,CAAC;IACtB,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC;IACpB,QAAQ,CAAC,aAAa,EAAE,aAAa,CAAC;IACtC,QAAQ,CAAC,GAAG,EAAE,GAAG,CAAC;IAClB,QAAQ,CAAC,EAAE,EAAE,EAAE,CAAC;IAChB,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC;IACtB,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC;IACtB,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC;IAC5B,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;gBAEd,IAAI,EAAE,cAAc;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -19,6 +19,7 @@ import { Email } from './email.js';
|
|
|
19
19
|
import { Webhooks } from './webhooks.js';
|
|
20
20
|
import { Invites } from './invites.js';
|
|
21
21
|
import { Actions } from './actions.js';
|
|
22
|
+
import { Monitoring } from './monitoring.js';
|
|
22
23
|
export { DEFAULT_ROLES } from './roles.js';
|
|
23
24
|
export { Actions } from './actions.js';
|
|
24
25
|
export { TenantScope } from './tenant.js';
|
|
@@ -56,6 +57,8 @@ export class ProAppStore {
|
|
|
56
57
|
webhooks;
|
|
57
58
|
invites;
|
|
58
59
|
actions;
|
|
60
|
+
/** Runtime monitoring — auto-captures errors + records failed ops to app_logs. */
|
|
61
|
+
logs;
|
|
59
62
|
constructor(opts) {
|
|
60
63
|
const apiBase = opts.proApiBase ?? 'https://api.proappstore.online';
|
|
61
64
|
const authMode = opts.authMode ?? 'legacy-bearer';
|
|
@@ -78,7 +81,9 @@ export class ProAppStore {
|
|
|
78
81
|
this.email = new Email(opts.appId, apiBase, this.auth);
|
|
79
82
|
this.webhooks = new Webhooks(opts.appId, apiBase, this.auth);
|
|
80
83
|
this.invites = new Invites(opts.appId, apiBase, this.auth);
|
|
81
|
-
this.
|
|
84
|
+
this.logs = new Monitoring(opts.appId, apiBase, this.auth, opts.monitoring?.build);
|
|
85
|
+
// Actions reports failed calls to the logger (#106).
|
|
86
|
+
this.actions = new Actions(opts.appId, apiBase, this.auth, this.logs);
|
|
82
87
|
// Auto-start telemetry unless the app opts out. Wrapped in try-catch
|
|
83
88
|
// because localStorage can throw in incognito, sandboxed iframes, or
|
|
84
89
|
// when storage quota is exceeded.
|
|
@@ -88,6 +93,13 @@ export class ProAppStore {
|
|
|
88
93
|
}
|
|
89
94
|
catch { /* non-fatal — app runs without usage tracking */ }
|
|
90
95
|
}
|
|
96
|
+
// Auto-capture runtime errors → app_logs unless the app opts out (#105).
|
|
97
|
+
if (opts.monitoring?.auto !== false) {
|
|
98
|
+
try {
|
|
99
|
+
this.logs.start();
|
|
100
|
+
}
|
|
101
|
+
catch { /* non-fatal — app runs without monitoring */ }
|
|
102
|
+
}
|
|
91
103
|
}
|
|
92
104
|
}
|
|
93
105
|
/** Create a new ProAppStore SDK instance. Includes all free + pro features. */
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,4EAA4E;AAC5E,uEAAuE;AACvE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,EAAE,EAAE,MAAM,SAAS,CAAC;AAC7B,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAE,EAAE,EAAE,MAAM,SAAS,CAAC;AAC7B,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AACnC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAC/B,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Runtime monitoring — batches client log entries to
|
|
3
|
+
* `POST /v1/apps/:appId/logs` so app owners can inspect real user-facing
|
|
4
|
+
* failures after the fact (#105/#106).
|
|
5
|
+
*
|
|
6
|
+
* Auto-started by `initPro()` unless `monitoring.auto === false`. On start it
|
|
7
|
+
* captures uncaught `error` and `unhandledrejection` events; the SDK also feeds
|
|
8
|
+
* failed platform operations (e.g. `app.actions.call`) in via `log()`.
|
|
9
|
+
*
|
|
10
|
+
* Design (mirrors the Usage telemetry module):
|
|
11
|
+
* - **Browser-only / SSR-safe.** Every method no-ops without `window`.
|
|
12
|
+
* - **Silent.** Monitoring must never break an app — all network paths catch.
|
|
13
|
+
* - **Batched.** Entries queue and flush on an interval + on `pagehide`
|
|
14
|
+
* (sendBeacon/keepalive so the last batch survives unload).
|
|
15
|
+
* - **No secrets/PII.** Auto-capture takes only message + stack + source; the
|
|
16
|
+
* SDK never logs request bodies, SQL params, tokens, or credential values.
|
|
17
|
+
*/
|
|
18
|
+
interface AuthLike {
|
|
19
|
+
token: string | null;
|
|
20
|
+
isSignedIn?: boolean;
|
|
21
|
+
usesPlatformCookie?: boolean;
|
|
22
|
+
}
|
|
23
|
+
export interface MonitoringOptions {
|
|
24
|
+
/** Default true. Set false to disable auto-capture + auto-flush. */
|
|
25
|
+
auto?: boolean;
|
|
26
|
+
/** Build metadata attached to every entry (commit, version, …). */
|
|
27
|
+
build?: Record<string, unknown>;
|
|
28
|
+
}
|
|
29
|
+
export type LogLevel = 'debug' | 'info' | 'warn' | 'error';
|
|
30
|
+
export declare class Monitoring {
|
|
31
|
+
private readonly appId;
|
|
32
|
+
private readonly apiBase;
|
|
33
|
+
private readonly auth;
|
|
34
|
+
private readonly build?;
|
|
35
|
+
private queue;
|
|
36
|
+
private running;
|
|
37
|
+
private timer;
|
|
38
|
+
private onError;
|
|
39
|
+
private onRejection;
|
|
40
|
+
private onPageHide;
|
|
41
|
+
constructor(appId: string, apiBase: string, auth: AuthLike, build?: Record<string, unknown> | undefined);
|
|
42
|
+
/** Attach auto-capture + periodic flush. Idempotent. */
|
|
43
|
+
start(): void;
|
|
44
|
+
/** Detach handlers + stop flushing. Idempotent. Does not flush. */
|
|
45
|
+
stop(): void;
|
|
46
|
+
/** Queue a log entry. Cheap; no network until the next flush. */
|
|
47
|
+
log(level: LogLevel, category: string, message: string, data?: Record<string, unknown>): void;
|
|
48
|
+
error(category: string, message: string, data?: Record<string, unknown>): void;
|
|
49
|
+
warn(category: string, message: string, data?: Record<string, unknown>): void;
|
|
50
|
+
info(category: string, message: string, data?: Record<string, unknown>): void;
|
|
51
|
+
/** Log a caught exception with its stack. */
|
|
52
|
+
capture(err: unknown, category?: string): void;
|
|
53
|
+
/** Send queued entries. `keepalive` for page-close paths (sendBeacon). */
|
|
54
|
+
flush(keepalive?: boolean): void;
|
|
55
|
+
private isAuthenticated;
|
|
56
|
+
}
|
|
57
|
+
export {};
|
|
58
|
+
//# sourceMappingURL=monitoring.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"monitoring.d.ts","sourceRoot":"","sources":["../src/monitoring.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,UAAU,QAAQ;IAChB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,kBAAkB,CAAC,EAAE,OAAO,CAAC;CAC9B;AAED,MAAM,WAAW,iBAAiB;IAChC,oEAAoE;IACpE,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,mEAAmE;IACnE,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACjC;AAED,MAAM,MAAM,QAAQ,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;AAsB3D,qBAAa,UAAU;IASnB,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,OAAO,CAAC,QAAQ,CAAC,IAAI;IACrB,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC;IAXzB,OAAO,CAAC,KAAK,CAAmB;IAChC,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,KAAK,CAA+C;IAC5D,OAAO,CAAC,OAAO,CAA0C;IACzD,OAAO,CAAC,WAAW,CAAqD;IACxE,OAAO,CAAC,UAAU,CAA6B;gBAG5B,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,QAAQ,EACd,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,YAAA;IAGlD,wDAAwD;IACxD,KAAK,IAAI,IAAI;IAqBb,mEAAmE;IACnE,IAAI,IAAI,IAAI;IAYZ,iEAAiE;IACjE,GAAG,CAAC,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAc7F,KAAK,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAC9E,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAC7E,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAE7E,6CAA6C;IAC7C,OAAO,CAAC,GAAG,EAAE,OAAO,EAAE,QAAQ,SAAY,GAAG,IAAI;IAKjD,0EAA0E;IAC1E,KAAK,CAAC,SAAS,UAAQ,GAAG,IAAI;IA6B9B,OAAO,CAAC,eAAe;CAGxB"}
|
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Runtime monitoring — batches client log entries to
|
|
3
|
+
* `POST /v1/apps/:appId/logs` so app owners can inspect real user-facing
|
|
4
|
+
* failures after the fact (#105/#106).
|
|
5
|
+
*
|
|
6
|
+
* Auto-started by `initPro()` unless `monitoring.auto === false`. On start it
|
|
7
|
+
* captures uncaught `error` and `unhandledrejection` events; the SDK also feeds
|
|
8
|
+
* failed platform operations (e.g. `app.actions.call`) in via `log()`.
|
|
9
|
+
*
|
|
10
|
+
* Design (mirrors the Usage telemetry module):
|
|
11
|
+
* - **Browser-only / SSR-safe.** Every method no-ops without `window`.
|
|
12
|
+
* - **Silent.** Monitoring must never break an app — all network paths catch.
|
|
13
|
+
* - **Batched.** Entries queue and flush on an interval + on `pagehide`
|
|
14
|
+
* (sendBeacon/keepalive so the last batch survives unload).
|
|
15
|
+
* - **No secrets/PII.** Auto-capture takes only message + stack + source; the
|
|
16
|
+
* SDK never logs request bodies, SQL params, tokens, or credential values.
|
|
17
|
+
*/
|
|
18
|
+
const FLUSH_MS = 15_000;
|
|
19
|
+
const MAX_QUEUE = 100;
|
|
20
|
+
const MAX_MESSAGE = 2000;
|
|
21
|
+
const MAX_STACK = 4000;
|
|
22
|
+
function hasBrowser() {
|
|
23
|
+
return typeof window !== 'undefined';
|
|
24
|
+
}
|
|
25
|
+
function trunc(s, max) {
|
|
26
|
+
return typeof s === 'string' ? s.slice(0, max) : '';
|
|
27
|
+
}
|
|
28
|
+
export class Monitoring {
|
|
29
|
+
appId;
|
|
30
|
+
apiBase;
|
|
31
|
+
auth;
|
|
32
|
+
build;
|
|
33
|
+
queue = [];
|
|
34
|
+
running = false;
|
|
35
|
+
timer = null;
|
|
36
|
+
onError = null;
|
|
37
|
+
onRejection = null;
|
|
38
|
+
onPageHide = null;
|
|
39
|
+
constructor(appId, apiBase, auth, build) {
|
|
40
|
+
this.appId = appId;
|
|
41
|
+
this.apiBase = apiBase;
|
|
42
|
+
this.auth = auth;
|
|
43
|
+
this.build = build;
|
|
44
|
+
}
|
|
45
|
+
/** Attach auto-capture + periodic flush. Idempotent. */
|
|
46
|
+
start() {
|
|
47
|
+
if (this.running || !hasBrowser())
|
|
48
|
+
return;
|
|
49
|
+
this.running = true;
|
|
50
|
+
this.onError = (e) => this.log('error', 'runtime', e.message || 'uncaught error', {
|
|
51
|
+
stack: trunc(e.error?.stack, MAX_STACK), source: e.filename, line: e.lineno, col: e.colno,
|
|
52
|
+
});
|
|
53
|
+
this.onRejection = (e) => {
|
|
54
|
+
const r = e.reason;
|
|
55
|
+
this.log('error', 'unhandledrejection', trunc(r?.message ?? String(e.reason ?? 'rejection'), MAX_MESSAGE), {
|
|
56
|
+
stack: trunc(r?.stack, MAX_STACK),
|
|
57
|
+
});
|
|
58
|
+
};
|
|
59
|
+
this.onPageHide = () => this.flush(true);
|
|
60
|
+
window.addEventListener('error', this.onError);
|
|
61
|
+
window.addEventListener('unhandledrejection', this.onRejection);
|
|
62
|
+
window.addEventListener('pagehide', this.onPageHide);
|
|
63
|
+
this.timer = setInterval(() => this.flush(false), FLUSH_MS);
|
|
64
|
+
}
|
|
65
|
+
/** Detach handlers + stop flushing. Idempotent. Does not flush. */
|
|
66
|
+
stop() {
|
|
67
|
+
if (!this.running)
|
|
68
|
+
return;
|
|
69
|
+
this.running = false;
|
|
70
|
+
if (this.timer) {
|
|
71
|
+
clearInterval(this.timer);
|
|
72
|
+
this.timer = null;
|
|
73
|
+
}
|
|
74
|
+
if (hasBrowser()) {
|
|
75
|
+
if (this.onError)
|
|
76
|
+
window.removeEventListener('error', this.onError);
|
|
77
|
+
if (this.onRejection)
|
|
78
|
+
window.removeEventListener('unhandledrejection', this.onRejection);
|
|
79
|
+
if (this.onPageHide)
|
|
80
|
+
window.removeEventListener('pagehide', this.onPageHide);
|
|
81
|
+
}
|
|
82
|
+
this.onError = this.onRejection = this.onPageHide = null;
|
|
83
|
+
}
|
|
84
|
+
/** Queue a log entry. Cheap; no network until the next flush. */
|
|
85
|
+
log(level, category, message, data) {
|
|
86
|
+
const route = hasBrowser() && window.location ? window.location.pathname : undefined;
|
|
87
|
+
const entry = {
|
|
88
|
+
ts: Date.now(),
|
|
89
|
+
level,
|
|
90
|
+
category: category.slice(0, 64),
|
|
91
|
+
message: trunc(message, MAX_MESSAGE),
|
|
92
|
+
data: { mode: this.auth.usesPlatformCookie ? 'platform-cookie' : 'legacy-bearer', ...(route ? { route } : {}), ...data },
|
|
93
|
+
};
|
|
94
|
+
this.queue.push(entry);
|
|
95
|
+
// Bound memory: drop the oldest if a burst outruns the flush interval.
|
|
96
|
+
if (this.queue.length > MAX_QUEUE)
|
|
97
|
+
this.queue.splice(0, this.queue.length - MAX_QUEUE);
|
|
98
|
+
}
|
|
99
|
+
error(category, message, data) { this.log('error', category, message, data); }
|
|
100
|
+
warn(category, message, data) { this.log('warn', category, message, data); }
|
|
101
|
+
info(category, message, data) { this.log('info', category, message, data); }
|
|
102
|
+
/** Log a caught exception with its stack. */
|
|
103
|
+
capture(err, category = 'runtime') {
|
|
104
|
+
const e = err;
|
|
105
|
+
this.log('error', category, trunc(e?.message ?? String(err), MAX_MESSAGE), { stack: trunc(e?.stack, MAX_STACK) });
|
|
106
|
+
}
|
|
107
|
+
/** Send queued entries. `keepalive` for page-close paths (sendBeacon). */
|
|
108
|
+
flush(keepalive = false) {
|
|
109
|
+
if (!this.queue.length || !this.isAuthenticated())
|
|
110
|
+
return;
|
|
111
|
+
const entries = this.queue.splice(0, this.queue.length).map((e) => ({
|
|
112
|
+
...e,
|
|
113
|
+
...(this.build ? { build: this.build } : {}),
|
|
114
|
+
}));
|
|
115
|
+
const body = JSON.stringify({ entries });
|
|
116
|
+
const url = this.auth.usesPlatformCookie
|
|
117
|
+
? `/.pas/api/v1/apps/${encodeURIComponent(this.appId)}/logs`
|
|
118
|
+
: `${this.apiBase}/v1/apps/${encodeURIComponent(this.appId)}/logs`;
|
|
119
|
+
if (keepalive && typeof navigator !== 'undefined' && typeof navigator.sendBeacon === 'function') {
|
|
120
|
+
try {
|
|
121
|
+
if (navigator.sendBeacon(url, new Blob([body], { type: 'application/json' })))
|
|
122
|
+
return;
|
|
123
|
+
}
|
|
124
|
+
catch { /* fall through */ }
|
|
125
|
+
}
|
|
126
|
+
try {
|
|
127
|
+
const headers = { 'Content-Type': 'application/json' };
|
|
128
|
+
const init = { method: 'POST', headers, body, keepalive };
|
|
129
|
+
if (this.auth.usesPlatformCookie) {
|
|
130
|
+
init.credentials = 'same-origin';
|
|
131
|
+
}
|
|
132
|
+
else {
|
|
133
|
+
if (!this.auth.token) {
|
|
134
|
+
return;
|
|
135
|
+
}
|
|
136
|
+
headers.Authorization = `Bearer ${this.auth.token}`;
|
|
137
|
+
}
|
|
138
|
+
void fetch(url, init).catch(() => { });
|
|
139
|
+
}
|
|
140
|
+
catch { /* monitoring never breaks an app */ }
|
|
141
|
+
}
|
|
142
|
+
isAuthenticated() {
|
|
143
|
+
return this.auth.usesPlatformCookie ? this.auth.isSignedIn === true : !!this.auth.token;
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
//# sourceMappingURL=monitoring.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"monitoring.js","sourceRoot":"","sources":["../src/monitoring.ts"],"names":[],"mappings":"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"}
|
package/dist/types.d.ts
CHANGED
|
@@ -21,6 +21,13 @@ export interface ProInitOptions {
|
|
|
21
21
|
/** Default true. Set false to disable the auto-heartbeat in this app. */
|
|
22
22
|
auto?: boolean;
|
|
23
23
|
};
|
|
24
|
+
/** Runtime monitoring. Auto error-capture → app_logs is on by default. */
|
|
25
|
+
monitoring?: {
|
|
26
|
+
/** Default true. Set false to disable auto error-capture + auto-flush. */
|
|
27
|
+
auto?: boolean;
|
|
28
|
+
/** Build metadata (commit, version, …) attached to every log entry. */
|
|
29
|
+
build?: Record<string, unknown>;
|
|
30
|
+
};
|
|
24
31
|
}
|
|
25
32
|
export type SubscriptionStatus = 'active' | 'past_due' | 'canceled' | 'incomplete';
|
|
26
33
|
export interface Subscription {
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd;;;;;;;;;;OAUG;IACH,QAAQ,CAAC,EAAE,eAAe,GAAG,iBAAiB,CAAC;IAC/C,kDAAkD;IAClD,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,8GAA8G;IAC9G,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,gEAAgE;IAChE,KAAK,CAAC,EAAE;QACN,yEAAyE;QACzE,IAAI,CAAC,EAAE,OAAO,CAAC;KAChB,CAAC;CACH;AAED,MAAM,MAAM,kBAAkB,GAAG,QAAQ,GAAG,UAAU,GAAG,UAAU,GAAG,YAAY,CAAC;AAEnF,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,kBAAkB,CAAC;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,gEAAgE;IAChE,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,sDAAsD;IACtD,gBAAgB,EAAE,MAAM,CAAC;IACzB,2DAA2D;IAC3D,iBAAiB,EAAE,OAAO,CAAC;CAC5B;AAED,MAAM,WAAW,mBAAmB;IAClC,UAAU,EAAE;QACV,OAAO,EAAE,MAAM,CAAC;QAChB,QAAQ,EAAE,MAAM,CAAC;QACjB,OAAO,EAAE,MAAM,CAAC;KACjB,GAAG,IAAI,CAAC;CACV;AAED,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,8EAA8E;IAC9E,UAAU,EAAE,MAAM,CAAC;IACnB,sDAAsD;IACtD,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,WAAW;IAC1B,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;CAC1B"}
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd;;;;;;;;;;OAUG;IACH,QAAQ,CAAC,EAAE,eAAe,GAAG,iBAAiB,CAAC;IAC/C,kDAAkD;IAClD,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,8GAA8G;IAC9G,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,gEAAgE;IAChE,KAAK,CAAC,EAAE;QACN,yEAAyE;QACzE,IAAI,CAAC,EAAE,OAAO,CAAC;KAChB,CAAC;IACF,0EAA0E;IAC1E,UAAU,CAAC,EAAE;QACX,0EAA0E;QAC1E,IAAI,CAAC,EAAE,OAAO,CAAC;QACf,uEAAuE;QACvE,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;KACjC,CAAC;CACH;AAED,MAAM,MAAM,kBAAkB,GAAG,QAAQ,GAAG,UAAU,GAAG,UAAU,GAAG,YAAY,CAAC;AAEnF,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,kBAAkB,CAAC;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,gEAAgE;IAChE,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,sDAAsD;IACtD,gBAAgB,EAAE,MAAM,CAAC;IACzB,2DAA2D;IAC3D,iBAAiB,EAAE,OAAO,CAAC;CAC5B;AAED,MAAM,WAAW,mBAAmB;IAClC,UAAU,EAAE;QACV,OAAO,EAAE,MAAM,CAAC;QAChB,QAAQ,EAAE,MAAM,CAAC;QACjB,OAAO,EAAE,MAAM,CAAC;KACjB,GAAG,IAAI,CAAC;CACV;AAED,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,8EAA8E;IAC9E,UAAU,EAAE,MAAM,CAAC;IACnB,sDAAsD;IACtD,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,WAAW;IAC1B,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;CAC1B"}
|