@oratis/lisa 0.11.1 → 0.14.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/agent.d.ts +2 -0
- package/dist/agent.d.ts.map +1 -1
- package/dist/agent.js +20 -1
- package/dist/agent.js.map +1 -1
- package/dist/agents/pty.d.ts.map +1 -1
- package/dist/agents/pty.js +13 -2
- package/dist/agents/pty.js.map +1 -1
- package/dist/autonomy/state.d.ts +14 -0
- package/dist/autonomy/state.d.ts.map +1 -0
- package/dist/autonomy/state.js +54 -0
- package/dist/autonomy/state.js.map +1 -0
- package/dist/cli/mail.d.ts +2 -0
- package/dist/cli/mail.d.ts.map +1 -0
- package/dist/cli/mail.js +209 -0
- package/dist/cli/mail.js.map +1 -0
- package/dist/cli/pair.d.ts +15 -0
- package/dist/cli/pair.d.ts.map +1 -0
- package/dist/cli/pair.js +152 -0
- package/dist/cli/pair.js.map +1 -0
- package/dist/cli.js +22 -14
- package/dist/cli.js.map +1 -1
- package/dist/consent/store.d.ts +2 -2
- package/dist/consent/store.d.ts.map +1 -1
- package/dist/consent/store.js +3 -2
- package/dist/consent/store.js.map +1 -1
- package/dist/edition.d.ts +24 -0
- package/dist/edition.d.ts.map +1 -0
- package/dist/edition.js +19 -0
- package/dist/edition.js.map +1 -0
- package/dist/heartbeat/runner.d.ts.map +1 -1
- package/dist/heartbeat/runner.js +8 -0
- package/dist/heartbeat/runner.js.map +1 -1
- package/dist/idle/runner.d.ts.map +1 -1
- package/dist/idle/runner.js +7 -0
- package/dist/idle/runner.js.map +1 -1
- package/dist/mail/accounts.d.ts +20 -0
- package/dist/mail/accounts.d.ts.map +1 -0
- package/dist/mail/accounts.js +113 -0
- package/dist/mail/accounts.js.map +1 -0
- package/dist/mail/alerts.d.ts +29 -0
- package/dist/mail/alerts.d.ts.map +1 -0
- package/dist/mail/alerts.js +40 -0
- package/dist/mail/alerts.js.map +1 -0
- package/dist/mail/classify.d.ts +26 -0
- package/dist/mail/classify.d.ts.map +1 -0
- package/dist/mail/classify.js +191 -0
- package/dist/mail/classify.js.map +1 -0
- package/dist/mail/connectors/gmail.d.ts +55 -0
- package/dist/mail/connectors/gmail.d.ts.map +1 -0
- package/dist/mail/connectors/gmail.js +87 -0
- package/dist/mail/connectors/gmail.js.map +1 -0
- package/dist/mail/connectors/imap.d.ts +13 -0
- package/dist/mail/connectors/imap.d.ts.map +1 -0
- package/dist/mail/connectors/imap.js +136 -0
- package/dist/mail/connectors/imap.js.map +1 -0
- package/dist/mail/digest.d.ts +21 -0
- package/dist/mail/digest.d.ts.map +1 -0
- package/dist/mail/digest.js +89 -0
- package/dist/mail/digest.js.map +1 -0
- package/dist/mail/google-oauth.d.ts +50 -0
- package/dist/mail/google-oauth.d.ts.map +1 -0
- package/dist/mail/google-oauth.js +74 -0
- package/dist/mail/google-oauth.js.map +1 -0
- package/dist/mail/hosts.d.ts +3 -0
- package/dist/mail/hosts.d.ts.map +1 -0
- package/dist/mail/hosts.js +19 -0
- package/dist/mail/hosts.js.map +1 -0
- package/dist/mail/scheduler.d.ts +9 -0
- package/dist/mail/scheduler.d.ts.map +1 -0
- package/dist/mail/scheduler.js +21 -0
- package/dist/mail/scheduler.js.map +1 -0
- package/dist/mail/service.d.ts +32 -0
- package/dist/mail/service.d.ts.map +1 -0
- package/dist/mail/service.js +129 -0
- package/dist/mail/service.js.map +1 -0
- package/dist/mail/store.d.ts +7 -0
- package/dist/mail/store.d.ts.map +1 -0
- package/dist/mail/store.js +58 -0
- package/dist/mail/store.js.map +1 -0
- package/dist/mail/types.d.ts +114 -0
- package/dist/mail/types.d.ts.map +1 -0
- package/dist/mail/types.js +26 -0
- package/dist/mail/types.js.map +1 -0
- package/dist/providers/anthropic.d.ts.map +1 -1
- package/dist/providers/anthropic.js +43 -21
- package/dist/providers/anthropic.js.map +1 -1
- package/dist/providers/gemini.d.ts.map +1 -1
- package/dist/providers/gemini.js +67 -64
- package/dist/providers/gemini.js.map +1 -1
- package/dist/providers/openai.d.ts.map +1 -1
- package/dist/providers/openai.js +77 -71
- package/dist/providers/openai.js.map +1 -1
- package/dist/providers/registry.d.ts +10 -0
- package/dist/providers/registry.d.ts.map +1 -1
- package/dist/providers/registry.js +26 -0
- package/dist/providers/registry.js.map +1 -1
- package/dist/providers/stream-retry.d.ts +37 -0
- package/dist/providers/stream-retry.d.ts.map +1 -0
- package/dist/providers/stream-retry.js +92 -0
- package/dist/providers/stream-retry.js.map +1 -0
- package/dist/providers/types.d.ts +3 -0
- package/dist/providers/types.d.ts.map +1 -1
- package/dist/subagent.d.ts +2 -0
- package/dist/subagent.d.ts.map +1 -1
- package/dist/subagent.js +1 -0
- package/dist/subagent.js.map +1 -1
- package/dist/web/cloudAuth.d.ts +57 -0
- package/dist/web/cloudAuth.d.ts.map +1 -0
- package/dist/web/cloudAuth.js +139 -0
- package/dist/web/cloudAuth.js.map +1 -0
- package/dist/web/island.d.ts.map +1 -1
- package/dist/web/island.js +1 -0
- package/dist/web/island.js.map +1 -1
- package/dist/web/lisa-client.d.ts +1 -1
- package/dist/web/lisa-client.d.ts.map +1 -1
- package/dist/web/lisa-client.js +703 -40
- package/dist/web/lisa-client.js.map +1 -1
- package/dist/web/lisa-css.d.ts +1 -1
- package/dist/web/lisa-css.d.ts.map +1 -1
- package/dist/web/lisa-css.js +568 -43
- package/dist/web/lisa-css.js.map +1 -1
- package/dist/web/lisa-html.d.ts +1 -1
- package/dist/web/lisa-html.d.ts.map +1 -1
- package/dist/web/lisa-html.js +71 -21
- package/dist/web/lisa-html.js.map +1 -1
- package/dist/web/pairing.d.ts +37 -0
- package/dist/web/pairing.d.ts.map +1 -0
- package/dist/web/pairing.js +79 -0
- package/dist/web/pairing.js.map +1 -0
- package/dist/web/push.d.ts +91 -0
- package/dist/web/push.d.ts.map +1 -1
- package/dist/web/push.js +250 -9
- package/dist/web/push.js.map +1 -1
- package/dist/web/qr-svg.d.ts +11 -0
- package/dist/web/qr-svg.d.ts.map +1 -0
- package/dist/web/qr-svg.js +41 -0
- package/dist/web/qr-svg.js.map +1 -0
- package/dist/web/server.d.ts +1 -1
- package/dist/web/server.d.ts.map +1 -1
- package/dist/web/server.js +378 -14
- package/dist/web/server.js.map +1 -1
- package/package.json +4 -1
|
@@ -23,6 +23,9 @@ export interface ProviderRunOpts {
|
|
|
23
23
|
maxTokens?: number;
|
|
24
24
|
thinking?: boolean;
|
|
25
25
|
compaction?: boolean;
|
|
26
|
+
/** Thinking-depth / token-spend lever (Anthropic `output_config.effort`).
|
|
27
|
+
* Omitted ⇒ API default ("high"). Subagents use "low" for cheap work. */
|
|
28
|
+
effort?: "low" | "medium" | "high" | "xhigh" | "max";
|
|
26
29
|
handlers?: ProviderStreamHandlers;
|
|
27
30
|
signal?: AbortSignal;
|
|
28
31
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/providers/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,SAAS,MAAM,mBAAmB,CAAC;AAC/C,OAAO,KAAK,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAEjE,MAAM,WAAW,aAAa;IAC5B,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,eAAe,EAAE,MAAM,CAAC;IACxB,gBAAgB,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,SAAS,CAAC,YAAY,EAAE,CAAC;IAClC,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,aAAa,CAAC;CACtB;AAED,MAAM,WAAW,sBAAsB;IACrC,WAAW,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACrC,eAAe,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;CAC1C;AAED,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,EAAE,MAAM,CAAC;IACrB,KAAK,EAAE,cAAc,EAAE,CAAC;IACxB,QAAQ,EAAE,aAAa,EAAE,CAAC;IAC1B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,QAAQ,CAAC,EAAE,sBAAsB,CAAC;IAClC,MAAM,CAAC,EAAE,WAAW,CAAC;CACtB;AAED,MAAM,WAAW,QAAQ;IACvB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,OAAO,CAAC,IAAI,EAAE,eAAe,GAAG,OAAO,CAAC,cAAc,CAAC,CAAC;CACzD"}
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/providers/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,SAAS,MAAM,mBAAmB,CAAC;AAC/C,OAAO,KAAK,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAEjE,MAAM,WAAW,aAAa;IAC5B,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,eAAe,EAAE,MAAM,CAAC;IACxB,gBAAgB,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,SAAS,CAAC,YAAY,EAAE,CAAC;IAClC,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,aAAa,CAAC;CACtB;AAED,MAAM,WAAW,sBAAsB;IACrC,WAAW,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACrC,eAAe,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;CAC1C;AAED,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,EAAE,MAAM,CAAC;IACrB,KAAK,EAAE,cAAc,EAAE,CAAC;IACxB,QAAQ,EAAE,aAAa,EAAE,CAAC;IAC1B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB;8EAC0E;IAC1E,MAAM,CAAC,EAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,GAAG,OAAO,GAAG,KAAK,CAAC;IACrD,QAAQ,CAAC,EAAE,sBAAsB,CAAC;IAClC,MAAM,CAAC,EAAE,WAAW,CAAC;CACtB;AAED,MAAM,WAAW,QAAQ;IACvB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,OAAO,CAAC,IAAI,EAAE,eAAe,GAAG,OAAO,CAAC,cAAc,CAAC,CAAC;CACzD"}
|
package/dist/subagent.d.ts
CHANGED
|
@@ -9,6 +9,8 @@ export interface SubagentOptions {
|
|
|
9
9
|
model?: string;
|
|
10
10
|
log?: (msg: string) => void;
|
|
11
11
|
thinking?: boolean;
|
|
12
|
+
/** Thinking-depth lever; defaults to "low" — subagents are cheap parallel work. */
|
|
13
|
+
effort?: "low" | "medium" | "high" | "xhigh" | "max";
|
|
12
14
|
/** Cumulative (input+output) token ceiling; stops the run early when reached. */
|
|
13
15
|
budgetTokens?: number;
|
|
14
16
|
/** Injectable provider (tests); defaults to providerForModel(model). */
|
package/dist/subagent.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"subagent.d.ts","sourceRoot":"","sources":["../src/subagent.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAEjD,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,MAAM,CAAC;IACrB,KAAK,EAAE,cAAc,EAAE,CAAC;IACxB,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,WAAW,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IAC5B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,iFAAiF;IACjF,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,wEAAwE;IACxE,QAAQ,CAAC,EAAE,QAAQ,CAAC;CACrB;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,2FAA2F;IAC3F,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,wBAAsB,WAAW,CAAC,IAAI,EAAE,eAAe,GAAG,OAAO,CAAC,cAAc,CAAC,
|
|
1
|
+
{"version":3,"file":"subagent.d.ts","sourceRoot":"","sources":["../src/subagent.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAEjD,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,MAAM,CAAC;IACrB,KAAK,EAAE,cAAc,EAAE,CAAC;IACxB,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,WAAW,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IAC5B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,mFAAmF;IACnF,MAAM,CAAC,EAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,GAAG,OAAO,GAAG,KAAK,CAAC;IACrD,iFAAiF;IACjF,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,wEAAwE;IACxE,QAAQ,CAAC,EAAE,QAAQ,CAAC;CACrB;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,2FAA2F;IAC3F,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,wBAAsB,WAAW,CAAC,IAAI,EAAE,eAAe,GAAG,OAAO,CAAC,cAAc,CAAC,CA+BhF"}
|
package/dist/subagent.js
CHANGED
package/dist/subagent.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"subagent.js","sourceRoot":"","sources":["../src/subagent.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"subagent.js","sourceRoot":"","sources":["../src/subagent.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AA8B3D,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,IAAqB;IACrD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,aAAa,CAAC;IAC1C,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,IAAI,gBAAgB,CAAC,KAAK,CAAC,CAAC;IAC1D,IAAI,aAAa,GAAG,CAAC,CAAC;IACtB,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC;QAC5B,QAAQ;QACR,YAAY,EAAE,IAAI,CAAC,YAAY;QAC/B,KAAK,EAAE,IAAI,CAAC,KAAK;QACjB,OAAO,EAAE;YACP,GAAG,EAAE,IAAI,CAAC,GAAG;YACb,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,GAAG,EAAE,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC;SAC5B;QACD,OAAO,EAAE,EAAE;QACX,WAAW,EAAE,IAAI,CAAC,MAAM;QACxB,KAAK;QACL,QAAQ,EAAE,IAAI,CAAC,QAAQ,IAAI,KAAK;QAChC,MAAM,EAAE,IAAI,CAAC,MAAM,IAAI,KAAK;QAC5B,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE;YACjB,IAAI,KAAK,CAAC,IAAI,KAAK,iBAAiB;gBAAE,aAAa,EAAE,CAAC;QACxD,CAAC;QACD,aAAa,EAAE,EAAE;QACjB,YAAY,EAAE,IAAI,CAAC,YAAY;KAChC,CAAC,CAAC;IACH,OAAO;QACL,IAAI,EAAE,MAAM,CAAC,SAAS;QACtB,aAAa;QACb,WAAW,EAAE,MAAM,CAAC,WAAW;QAC/B,YAAY,EAAE,MAAM,CAAC,YAAY;QACjC,UAAU,EAAE,MAAM,CAAC,UAAU;KAC9B,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
/** A single JSON Web Key from Apple's JWKS (the RSA fields we use). */
|
|
2
|
+
export interface AppleJWK {
|
|
3
|
+
kty: string;
|
|
4
|
+
kid: string;
|
|
5
|
+
use?: string;
|
|
6
|
+
alg?: string;
|
|
7
|
+
n: string;
|
|
8
|
+
e: string;
|
|
9
|
+
}
|
|
10
|
+
/** The verified subset of an Apple identity token we act on. */
|
|
11
|
+
export interface AppleIdentity {
|
|
12
|
+
/** Stable, team-scoped user id (`sub`). The account key if/when we go multi-tenant. */
|
|
13
|
+
sub: string;
|
|
14
|
+
/** Present only when the user shared it (first sign-in, or always for real email). */
|
|
15
|
+
email?: string;
|
|
16
|
+
/** Whether Apple marked the email verified ("true"/"false" string in the JWT). */
|
|
17
|
+
emailVerified?: boolean;
|
|
18
|
+
}
|
|
19
|
+
export interface VerifyAppleOptions {
|
|
20
|
+
/** Expected `aud` — the app's bundle id (e.g. `ai.meetlisa.main`). */
|
|
21
|
+
audience: string;
|
|
22
|
+
/** Returns Apple's current signing keys. Injected so tests run offline. */
|
|
23
|
+
fetchKeys: () => Promise<AppleJWK[]>;
|
|
24
|
+
/** Clock seam for tests (ms since epoch). Defaults to Date.now(). */
|
|
25
|
+
now?: () => number;
|
|
26
|
+
/** Leeway for clock skew, seconds (default 60). */
|
|
27
|
+
clockToleranceSec?: number;
|
|
28
|
+
}
|
|
29
|
+
export declare class AppleAuthError extends Error {
|
|
30
|
+
constructor(message: string);
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Verify an Apple identity-token JWT. Throws `AppleAuthError` on any failure
|
|
34
|
+
* (bad signature, wrong issuer/audience, expired). Returns the identity on success.
|
|
35
|
+
*/
|
|
36
|
+
export declare function verifyAppleIdentityToken(idToken: string, opts: VerifyAppleOptions): Promise<AppleIdentity>;
|
|
37
|
+
/** Fetch Apple's signing keys, cached for an hour. The default `fetchKeys`. */
|
|
38
|
+
export declare function fetchAppleKeys(now?: () => number): Promise<AppleJWK[]>;
|
|
39
|
+
export interface AppleSignInConfig {
|
|
40
|
+
/** Whether the endpoint is live. Off unless `LISA_CLOUD_APPLE_SIGNIN` is truthy. */
|
|
41
|
+
enabled: boolean;
|
|
42
|
+
/** Expected token audience — the app bundle id. */
|
|
43
|
+
audience: string;
|
|
44
|
+
/** Optional allowlist of Apple `sub`s; empty = any verified Apple ID may sign in. */
|
|
45
|
+
allowedSubs: string[];
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Read the Sign in with Apple config from the environment. Default-OFF: with
|
|
49
|
+
* `LISA_CLOUD_APPLE_SIGNIN` unset the endpoint reports disabled and never hands
|
|
50
|
+
* back the session token. `LISA_CLOUD_APPLE_AUD` overrides the expected bundle id
|
|
51
|
+
* (default `ai.meetlisa.main`); `LISA_CLOUD_APPLE_SUBS` is a comma-separated
|
|
52
|
+
* allowlist (set it to the reviewer's `sub` to restrict the shared demo).
|
|
53
|
+
*/
|
|
54
|
+
export declare function appleSignInConfig(env?: NodeJS.ProcessEnv): AppleSignInConfig;
|
|
55
|
+
/** True when `sub` is permitted by the (possibly empty) allowlist. */
|
|
56
|
+
export declare function subAllowed(sub: string, cfg: AppleSignInConfig): boolean;
|
|
57
|
+
//# sourceMappingURL=cloudAuth.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cloudAuth.d.ts","sourceRoot":"","sources":["../../src/web/cloudAuth.ts"],"names":[],"mappings":"AAuBA,uEAAuE;AACvE,MAAM,WAAW,QAAQ;IACvB,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;CACX;AAED,gEAAgE;AAChE,MAAM,WAAW,aAAa;IAC5B,uFAAuF;IACvF,GAAG,EAAE,MAAM,CAAC;IACZ,sFAAsF;IACtF,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,kFAAkF;IAClF,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AAED,MAAM,WAAW,kBAAkB;IACjC,sEAAsE;IACtE,QAAQ,EAAE,MAAM,CAAC;IACjB,2EAA2E;IAC3E,SAAS,EAAE,MAAM,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC;IACrC,qEAAqE;IACrE,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;IACnB,mDAAmD;IACnD,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED,qBAAa,cAAe,SAAQ,KAAK;gBAC3B,OAAO,EAAE,MAAM;CAI5B;AAiBD;;;GAGG;AACH,wBAAsB,wBAAwB,CAC5C,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,kBAAkB,GACvB,OAAO,CAAC,aAAa,CAAC,CAiDxB;AAMD,+EAA+E;AAC/E,wBAAsB,cAAc,CAAC,GAAG,GAAE,MAAM,MAAiB,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC,CAStF;AAID,MAAM,WAAW,iBAAiB;IAChC,oFAAoF;IACpF,OAAO,EAAE,OAAO,CAAC;IACjB,mDAAmD;IACnD,QAAQ,EAAE,MAAM,CAAC;IACjB,qFAAqF;IACrF,WAAW,EAAE,MAAM,EAAE,CAAC;CACvB;AAQD;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,iBAAiB,CASzF;AAED,sEAAsE;AACtE,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,iBAAiB,GAAG,OAAO,CAEvE"}
|
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Sign in with Apple — identity-token verification for the hosted LISA Cloud
|
|
3
|
+
* edition (docs/PLAN_CLOUD_v1.0.md §"Auth + account lifecycle", milestone M4 of
|
|
4
|
+
* docs/PLAN_IOS_ONBOARDING_v1.0.md).
|
|
5
|
+
*
|
|
6
|
+
* The iOS app runs the native Sign in with Apple flow and POSTs the resulting
|
|
7
|
+
* **identity token** (a JWT signed by Apple) to `POST /api/auth/apple`. We verify
|
|
8
|
+
* it here against Apple's published public keys and, on success, hand back the
|
|
9
|
+
* cloud session token so the phone can authenticate like any other client.
|
|
10
|
+
*
|
|
11
|
+
* Scope is deliberately single-tenant (matches the deployed M0/C2 demo: one
|
|
12
|
+
* shared soul behind one `LISA_WEB_TOKEN`). Verifying Apple's signature lets a
|
|
13
|
+
* reviewer — or any operator-approved Apple ID — sign in instead of pasting the
|
|
14
|
+
* token, which is the App Store reviewability unlock. Per-`uid` isolation +
|
|
15
|
+
* Firebase + account deletion stay deferred C3 work; this module does NOT mint
|
|
16
|
+
* per-user state.
|
|
17
|
+
*
|
|
18
|
+
* No external dependencies: Apple uses RS256, which Node verifies natively from
|
|
19
|
+
* a JWK via `node:crypto`. The verifier is pure (JWKS fetch + clock injected) so
|
|
20
|
+
* it unit-tests offline — see cloudAuth.test.ts.
|
|
21
|
+
*/
|
|
22
|
+
import crypto from "node:crypto";
|
|
23
|
+
export class AppleAuthError extends Error {
|
|
24
|
+
constructor(message) {
|
|
25
|
+
super(message);
|
|
26
|
+
this.name = "AppleAuthError";
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
const APPLE_ISSUER = "https://appleid.apple.com";
|
|
30
|
+
const APPLE_KEYS_URL = "https://appleid.apple.com/auth/keys";
|
|
31
|
+
function b64urlToBuffer(s) {
|
|
32
|
+
return Buffer.from(s, "base64url");
|
|
33
|
+
}
|
|
34
|
+
function decodeJson(segment) {
|
|
35
|
+
try {
|
|
36
|
+
return JSON.parse(b64urlToBuffer(segment).toString("utf8"));
|
|
37
|
+
}
|
|
38
|
+
catch {
|
|
39
|
+
throw new AppleAuthError("malformed token segment");
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Verify an Apple identity-token JWT. Throws `AppleAuthError` on any failure
|
|
44
|
+
* (bad signature, wrong issuer/audience, expired). Returns the identity on success.
|
|
45
|
+
*/
|
|
46
|
+
export async function verifyAppleIdentityToken(idToken, opts) {
|
|
47
|
+
const now = opts.now ?? Date.now;
|
|
48
|
+
const tolerance = opts.clockToleranceSec ?? 60;
|
|
49
|
+
const parts = idToken.split(".");
|
|
50
|
+
if (parts.length !== 3)
|
|
51
|
+
throw new AppleAuthError("not a JWT");
|
|
52
|
+
const headerB64 = parts[0];
|
|
53
|
+
const payloadB64 = parts[1];
|
|
54
|
+
const sigB64 = parts[2];
|
|
55
|
+
const header = decodeJson(headerB64);
|
|
56
|
+
if (header.alg !== "RS256")
|
|
57
|
+
throw new AppleAuthError(`unexpected alg ${String(header.alg)}`);
|
|
58
|
+
const kid = typeof header.kid === "string" ? header.kid : null;
|
|
59
|
+
if (!kid)
|
|
60
|
+
throw new AppleAuthError("missing key id");
|
|
61
|
+
const keys = await opts.fetchKeys();
|
|
62
|
+
const jwk = keys.find((k) => k.kid === kid && k.kty === "RSA");
|
|
63
|
+
if (!jwk)
|
|
64
|
+
throw new AppleAuthError("no matching Apple signing key");
|
|
65
|
+
// RS256 = RSASSA-PKCS1-v1_5 over SHA-256. Node imports the JWK directly.
|
|
66
|
+
const pubKey = crypto.createPublicKey({ key: jwk, format: "jwk" });
|
|
67
|
+
const signingInput = Buffer.from(`${headerB64}.${payloadB64}`, "utf8");
|
|
68
|
+
const ok = crypto.verify("RSA-SHA256", signingInput, pubKey, b64urlToBuffer(sigB64));
|
|
69
|
+
if (!ok)
|
|
70
|
+
throw new AppleAuthError("bad signature");
|
|
71
|
+
const claims = decodeJson(payloadB64);
|
|
72
|
+
if (claims.iss !== APPLE_ISSUER)
|
|
73
|
+
throw new AppleAuthError("wrong issuer");
|
|
74
|
+
// `aud` may be a string or array.
|
|
75
|
+
const aud = claims.aud;
|
|
76
|
+
const audOk = Array.isArray(aud) ? aud.includes(opts.audience) : aud === opts.audience;
|
|
77
|
+
if (!audOk)
|
|
78
|
+
throw new AppleAuthError("wrong audience");
|
|
79
|
+
const nowSec = Math.floor(now() / 1000);
|
|
80
|
+
const exp = typeof claims.exp === "number" ? claims.exp : 0;
|
|
81
|
+
if (exp + tolerance < nowSec)
|
|
82
|
+
throw new AppleAuthError("token expired");
|
|
83
|
+
const iat = typeof claims.iat === "number" ? claims.iat : 0;
|
|
84
|
+
if (iat - tolerance > nowSec)
|
|
85
|
+
throw new AppleAuthError("token not yet valid");
|
|
86
|
+
const sub = typeof claims.sub === "string" ? claims.sub : "";
|
|
87
|
+
if (!sub)
|
|
88
|
+
throw new AppleAuthError("missing subject");
|
|
89
|
+
const email = typeof claims.email === "string" ? claims.email : undefined;
|
|
90
|
+
const emailVerified = claims.email_verified === true || claims.email_verified === "true" ? true
|
|
91
|
+
: claims.email_verified === false || claims.email_verified === "false" ? false
|
|
92
|
+
: undefined;
|
|
93
|
+
return { sub, email, emailVerified };
|
|
94
|
+
}
|
|
95
|
+
// ── Apple JWKS fetch (cached) ───────────────────────────────────────────────
|
|
96
|
+
let keyCache = null;
|
|
97
|
+
const KEY_TTL_MS = 60 * 60 * 1000; // Apple rotates infrequently; an hour is safe.
|
|
98
|
+
/** Fetch Apple's signing keys, cached for an hour. The default `fetchKeys`. */
|
|
99
|
+
export async function fetchAppleKeys(now = Date.now) {
|
|
100
|
+
if (keyCache && now() - keyCache.at < KEY_TTL_MS)
|
|
101
|
+
return keyCache.keys;
|
|
102
|
+
const res = await fetch(APPLE_KEYS_URL);
|
|
103
|
+
if (!res.ok)
|
|
104
|
+
throw new AppleAuthError(`Apple JWKS fetch failed (${res.status})`);
|
|
105
|
+
const body = (await res.json());
|
|
106
|
+
const keys = Array.isArray(body.keys) ? body.keys : [];
|
|
107
|
+
if (keys.length === 0)
|
|
108
|
+
throw new AppleAuthError("Apple JWKS empty");
|
|
109
|
+
keyCache = { keys, at: now() };
|
|
110
|
+
return keys;
|
|
111
|
+
}
|
|
112
|
+
function truthy(v) {
|
|
113
|
+
if (!v)
|
|
114
|
+
return false;
|
|
115
|
+
const s = v.trim().toLowerCase();
|
|
116
|
+
return s === "1" || s === "true" || s === "yes" || s === "on";
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* Read the Sign in with Apple config from the environment. Default-OFF: with
|
|
120
|
+
* `LISA_CLOUD_APPLE_SIGNIN` unset the endpoint reports disabled and never hands
|
|
121
|
+
* back the session token. `LISA_CLOUD_APPLE_AUD` overrides the expected bundle id
|
|
122
|
+
* (default `ai.meetlisa.main`); `LISA_CLOUD_APPLE_SUBS` is a comma-separated
|
|
123
|
+
* allowlist (set it to the reviewer's `sub` to restrict the shared demo).
|
|
124
|
+
*/
|
|
125
|
+
export function appleSignInConfig(env = process.env) {
|
|
126
|
+
return {
|
|
127
|
+
enabled: truthy(env.LISA_CLOUD_APPLE_SIGNIN),
|
|
128
|
+
audience: env.LISA_CLOUD_APPLE_AUD?.trim() || "ai.meetlisa.main",
|
|
129
|
+
allowedSubs: (env.LISA_CLOUD_APPLE_SUBS ?? "")
|
|
130
|
+
.split(",")
|
|
131
|
+
.map((s) => s.trim())
|
|
132
|
+
.filter(Boolean),
|
|
133
|
+
};
|
|
134
|
+
}
|
|
135
|
+
/** True when `sub` is permitted by the (possibly empty) allowlist. */
|
|
136
|
+
export function subAllowed(sub, cfg) {
|
|
137
|
+
return cfg.allowedSubs.length === 0 || cfg.allowedSubs.includes(sub);
|
|
138
|
+
}
|
|
139
|
+
//# sourceMappingURL=cloudAuth.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cloudAuth.js","sourceRoot":"","sources":["../../src/web/cloudAuth.ts"],"names":[],"mappings":"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"}
|
package/dist/web/island.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"island.d.ts","sourceRoot":"","sources":["../../src/web/island.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAIH,eAAO,MAAM,WAAW,
|
|
1
|
+
{"version":3,"file":"island.d.ts","sourceRoot":"","sources":["../../src/web/island.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAIH,eAAO,MAAM,WAAW,QAu6CvB,CAAC"}
|
package/dist/web/island.js
CHANGED
|
@@ -32,6 +32,7 @@ export const ISLAND_HTML = `<!doctype html>
|
|
|
32
32
|
--accent-warm: #ffd066;
|
|
33
33
|
--accent-dream: #b487ff;
|
|
34
34
|
--accent-claude: #ff8c42;
|
|
35
|
+
--accent-proactive: #3ddc97;
|
|
35
36
|
--border: rgba(255, 255, 255, 0.08);
|
|
36
37
|
/* 1px top inner highlight that reads as a glass bevel */
|
|
37
38
|
--hairline: rgba(255, 255, 255, 0.12);
|
package/dist/web/island.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"island.js","sourceRoot":"","sources":["../../src/web/island.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAExG,MAAM,CAAC,MAAM,WAAW,GAAG
|
|
1
|
+
{"version":3,"file":"island.js","sourceRoot":"","sources":["../../src/web/island.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAExG,MAAM,CAAC,MAAM,WAAW,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IA2jBvB,iBAAiB;IACjB,mBAAmB;IACnB,WAAW;IACX,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAy2BjB,CAAC"}
|