ugly-app 0.1.733 → 0.1.735
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/cli/version.d.ts +1 -1
- package/dist/cli/version.js +1 -1
- package/dist/client/auth/startLogin.d.ts +11 -0
- package/dist/client/auth/startLogin.d.ts.map +1 -1
- package/dist/client/auth/startLogin.js +26 -0
- package/dist/client/auth/startLogin.js.map +1 -1
- package/dist/server/PushSend.d.ts +0 -21
- package/dist/server/PushSend.d.ts.map +1 -1
- package/dist/server/PushSend.js +5 -18
- package/dist/server/PushSend.js.map +1 -1
- package/dist/server/adapter/workers/index.d.ts +0 -1
- package/dist/server/adapter/workers/index.d.ts.map +1 -1
- package/dist/server/adapter/workers/index.js +0 -1
- package/dist/server/adapter/workers/index.js.map +1 -1
- package/dist/server/index.d.ts +2 -2
- package/dist/server/index.d.ts.map +1 -1
- package/dist/server/index.js +1 -1
- package/dist/server/index.js.map +1 -1
- package/package.json +1 -1
- package/src/cli/version.ts +1 -1
- package/src/client/auth/startLogin.test.ts +56 -0
- package/src/client/auth/startLogin.ts +28 -0
- package/src/server/PushSend.ts +5 -31
- package/src/server/adapter/workers/index.ts +0 -1
- package/src/server/index.ts +1 -2
- package/templates/client/pages/PushTestPage.tsx +1 -1
- package/templates/server/index.ts +14 -3
- package/templates/shared/api.ts +4 -2
package/dist/cli/version.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export declare const CLI_VERSION = "0.1.
|
|
1
|
+
export declare const CLI_VERSION = "0.1.735";
|
|
2
2
|
//# sourceMappingURL=version.d.ts.map
|
package/dist/cli/version.js
CHANGED
|
@@ -26,6 +26,17 @@ export declare function startUglyBotAuthorize(opts?: {
|
|
|
26
26
|
scopes?: string[];
|
|
27
27
|
aiCapCents?: number;
|
|
28
28
|
}): void;
|
|
29
|
+
/**
|
|
30
|
+
* A dev/preview origin that ugly.bot's `/oauth/silent` redirect mode will reject
|
|
31
|
+
* with 400 "Invalid origin": plain-http (localhost dev servers) or a
|
|
32
|
+
* `*.trycloudflare.com` quick-tunnel (Ugly Studio's Preview panel publishes the
|
|
33
|
+
* dev server there so mobile can reach it). The apex silent-SSO top-level
|
|
34
|
+
* redirect must be skipped for these, or the app strands on ugly.bot's blank 400.
|
|
35
|
+
*/
|
|
36
|
+
export declare function isDevPreviewOrigin(loc: {
|
|
37
|
+
protocol: string;
|
|
38
|
+
hostname: string;
|
|
39
|
+
}): boolean;
|
|
29
40
|
/**
|
|
30
41
|
* Silent SSO for apex-domain apps (ugly.chat, ugly.press, …) that don't share
|
|
31
42
|
* ugly.bot's `auth_token` cookie. Adopts an existing ugly.bot session with NO
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"startLogin.d.ts","sourceRoot":"","sources":["../../../src/client/auth/startLogin.ts"],"names":[],"mappings":"AAeA,MAAM,WAAW,iBAAiB;IAChC,6EAA6E;IAC7E,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,qDAAqD;IACrD,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;CACtB;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,GAAE,iBAAsB,GAAG,IAAI,CAmCpE;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,qBAAqB,CACnC,IAAI,GAAE;IAAE,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAA;CAAO,GACpD,IAAI,CAUN;AAID;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,gBAAgB,IAAI,OAAO,
|
|
1
|
+
{"version":3,"file":"startLogin.d.ts","sourceRoot":"","sources":["../../../src/client/auth/startLogin.ts"],"names":[],"mappings":"AAeA,MAAM,WAAW,iBAAiB;IAChC,6EAA6E;IAC7E,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,qDAAqD;IACrD,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;CACtB;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,GAAE,iBAAsB,GAAG,IAAI,CAmCpE;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,qBAAqB,CACnC,IAAI,GAAE;IAAE,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAA;CAAO,GACpD,IAAI,CAUN;AAID;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAAC,GAAG,EAAE;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,GAAG,OAAO,CAUvF;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,gBAAgB,IAAI,OAAO,CAuB1C;AAED,kFAAkF;AAClF,wBAAgB,kBAAkB,IAAI,IAAI,CAMzC;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,IAAI,IAAI,CAM1C;AAED;;;;;;GAMG;AACH,wBAAgB,gBAAgB,IAAI,OAAO,CAO1C"}
|
|
@@ -78,6 +78,22 @@ export function startUglyBotAuthorize(opts = {}) {
|
|
|
78
78
|
window.location.assign(`${UGLY_BOT_URL}/oauth?${params.toString()}`);
|
|
79
79
|
}
|
|
80
80
|
const SILENT_SSO_TRIED_KEY = 'uglySilentSsoTried';
|
|
81
|
+
/**
|
|
82
|
+
* A dev/preview origin that ugly.bot's `/oauth/silent` redirect mode will reject
|
|
83
|
+
* with 400 "Invalid origin": plain-http (localhost dev servers) or a
|
|
84
|
+
* `*.trycloudflare.com` quick-tunnel (Ugly Studio's Preview panel publishes the
|
|
85
|
+
* dev server there so mobile can reach it). The apex silent-SSO top-level
|
|
86
|
+
* redirect must be skipped for these, or the app strands on ugly.bot's blank 400.
|
|
87
|
+
*/
|
|
88
|
+
export function isDevPreviewOrigin(loc) {
|
|
89
|
+
const host = loc.hostname;
|
|
90
|
+
return (loc.protocol !== 'https:' ||
|
|
91
|
+
host === 'localhost' ||
|
|
92
|
+
host === '127.0.0.1' ||
|
|
93
|
+
host === '[::1]' ||
|
|
94
|
+
host === '::1' ||
|
|
95
|
+
host.endsWith('.trycloudflare.com'));
|
|
96
|
+
}
|
|
81
97
|
/**
|
|
82
98
|
* Silent SSO for apex-domain apps (ugly.chat, ugly.press, …) that don't share
|
|
83
99
|
* ugly.bot's `auth_token` cookie. Adopts an existing ugly.bot session with NO
|
|
@@ -98,6 +114,16 @@ const SILENT_SSO_TRIED_KEY = 'uglySilentSsoTried';
|
|
|
98
114
|
export function attemptSilentSso() {
|
|
99
115
|
if (typeof window === 'undefined')
|
|
100
116
|
return false;
|
|
117
|
+
// Dev/preview origins — plain-http localhost or a *.trycloudflare.com preview
|
|
118
|
+
// tunnel (Ugly Studio's Preview panel exposes the dev server there for mobile)
|
|
119
|
+
// — are never allow-listed by ugly.bot's `/oauth/silent` redirect mode. It
|
|
120
|
+
// returns 400 "Invalid origin" (an open-redirect guard), and since this is a
|
|
121
|
+
// top-level `location.replace`, the app is STRANDED on that blank error page —
|
|
122
|
+
// "nothing shows up in the preview". Skip the redirect for those origins and
|
|
123
|
+
// render normally (logged-out); the hidden-iframe `silentAuthSync` still adopts
|
|
124
|
+
// a session without navigating away.
|
|
125
|
+
if (isDevPreviewOrigin(window.location))
|
|
126
|
+
return false;
|
|
101
127
|
try {
|
|
102
128
|
if (sessionStorage.getItem(SILENT_SSO_TRIED_KEY))
|
|
103
129
|
return false;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"startLogin.js","sourceRoot":"","sources":["../../../src/client/auth/startLogin.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"startLogin.js","sourceRoot":"","sources":["../../../src/client/auth/startLogin.ts"],"names":[],"mappings":"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"}
|
|
@@ -32,25 +32,4 @@ export interface PushSendContext<Pages extends PageRegistry> {
|
|
|
32
32
|
* of the compile-time check, so a bad route never ships a broken deep link.
|
|
33
33
|
*/
|
|
34
34
|
export declare function pushSendTyped<Pages extends PageRegistry, K extends keyof Pages & string>(ctx: PushSendContext<Pages>, input: TypedPushSendInput<Pages, K>): Promise<PushSendResult>;
|
|
35
|
-
/** Legacy, untyped input — `path` is a free string with no route-table check. */
|
|
36
|
-
export interface PushSendInput {
|
|
37
|
-
targetUserId: string;
|
|
38
|
-
title: string;
|
|
39
|
-
body: string;
|
|
40
|
-
/** Page path to open on click (e.g. "chat"). Prefer `app.pushSend({ page })`. */
|
|
41
|
-
path: string;
|
|
42
|
-
/** Query parameters for the page (ignored server-side; prefer `app.pushSend`). */
|
|
43
|
-
query?: Record<string, string>;
|
|
44
|
-
/** Optional notification image URL. */
|
|
45
|
-
imageUrl?: string;
|
|
46
|
-
}
|
|
47
|
-
/**
|
|
48
|
-
* Send a push notification to a user via the ugly.bot platform.
|
|
49
|
-
*
|
|
50
|
-
* @deprecated Use `app.pushSend({ targetUserId, title, body, page, query })` —
|
|
51
|
-
* it route-checks `page`/`query` against the app's routing table and delivers an
|
|
52
|
-
* absolute, openable URL. This bare helper ships `path` verbatim (often relative)
|
|
53
|
-
* and cannot identify the app on the device.
|
|
54
|
-
*/
|
|
55
|
-
export declare function pushSend(input: PushSendInput): Promise<PushSendResult>;
|
|
56
35
|
//# sourceMappingURL=PushSend.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PushSend.d.ts","sourceRoot":"","sources":["../../src/server/PushSend.ts"],"names":[],"mappings":"AACA,OAAO,EAEL,KAAK,UAAU,EACf,KAAK,YAAY,EAClB,MAAM,qBAAqB,CAAC;AAE7B,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,OAAO,CAAC;CACf;AAED;;;;GAIG;AACH,MAAM,WAAW,kBAAkB,CACjC,KAAK,SAAS,YAAY,EAC1B,CAAC,SAAS,MAAM,KAAK,GAAG,MAAM;IAE9B,YAAY,EAAE,MAAM,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,sFAAsF;IACtF,IAAI,EAAE,CAAC,CAAC;IACR,8EAA8E;IAC9E,KAAK,EAAE,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAC5B,uCAAuC;IACvC,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,kFAAkF;AAClF,MAAM,WAAW,eAAe,CAAC,KAAK,SAAS,YAAY;IACzD,KAAK,EAAE,KAAK,CAAC;IACb,mFAAmF;IACnF,MAAM,EAAE,MAAM,CAAC;IACf,wDAAwD;IACxD,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;;GAIG;AACH,wBAAsB,aAAa,CACjC,KAAK,SAAS,YAAY,EAC1B,CAAC,SAAS,MAAM,KAAK,GAAG,MAAM,EAE9B,GAAG,EAAE,eAAe,CAAC,KAAK,CAAC,EAC3B,KAAK,EAAE,kBAAkB,CAAC,KAAK,EAAE,CAAC,CAAC,GAClC,OAAO,CAAC,cAAc,CAAC,CAwBzB
|
|
1
|
+
{"version":3,"file":"PushSend.d.ts","sourceRoot":"","sources":["../../src/server/PushSend.ts"],"names":[],"mappings":"AACA,OAAO,EAEL,KAAK,UAAU,EACf,KAAK,YAAY,EAClB,MAAM,qBAAqB,CAAC;AAE7B,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,OAAO,CAAC;CACf;AAED;;;;GAIG;AACH,MAAM,WAAW,kBAAkB,CACjC,KAAK,SAAS,YAAY,EAC1B,CAAC,SAAS,MAAM,KAAK,GAAG,MAAM;IAE9B,YAAY,EAAE,MAAM,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,sFAAsF;IACtF,IAAI,EAAE,CAAC,CAAC;IACR,8EAA8E;IAC9E,KAAK,EAAE,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAC5B,uCAAuC;IACvC,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,kFAAkF;AAClF,MAAM,WAAW,eAAe,CAAC,KAAK,SAAS,YAAY;IACzD,KAAK,EAAE,KAAK,CAAC;IACb,mFAAmF;IACnF,MAAM,EAAE,MAAM,CAAC;IACf,wDAAwD;IACxD,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;;GAIG;AACH,wBAAsB,aAAa,CACjC,KAAK,SAAS,YAAY,EAC1B,CAAC,SAAS,MAAM,KAAK,GAAG,MAAM,EAE9B,GAAG,EAAE,eAAe,CAAC,KAAK,CAAC,EAC3B,KAAK,EAAE,kBAAkB,CAAC,KAAK,EAAE,CAAC,CAAC,GAClC,OAAO,CAAC,cAAc,CAAC,CAwBzB"}
|
package/dist/server/PushSend.js
CHANGED
|
@@ -23,22 +23,9 @@ export async function pushSendTyped(ctx, input) {
|
|
|
23
23
|
});
|
|
24
24
|
return { sent: result.sent };
|
|
25
25
|
}
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
* absolute, openable URL. This bare helper ships `path` verbatim (often relative)
|
|
32
|
-
* and cannot identify the app on the device.
|
|
33
|
-
*/
|
|
34
|
-
export async function pushSend(input) {
|
|
35
|
-
const result = await uglyBotRequest('pushSend', {
|
|
36
|
-
targetUserId: input.targetUserId,
|
|
37
|
-
title: input.title,
|
|
38
|
-
body: input.body,
|
|
39
|
-
path: input.path,
|
|
40
|
-
imageUrl: input.imageUrl,
|
|
41
|
-
});
|
|
42
|
-
return { sent: result.sent };
|
|
43
|
-
}
|
|
26
|
+
// The legacy bare `pushSend(input)` helper (free-string `path`, no route check)
|
|
27
|
+
// was removed — it shipped relative/absolute paths verbatim that the mobile shell
|
|
28
|
+
// couldn't host-match. Use `app.pushSend({ page, query })` (→ pushSendTyped), which
|
|
29
|
+
// route-checks `page` against the app's `pages` registry and builds an absolute,
|
|
30
|
+
// openable URL.
|
|
44
31
|
//# sourceMappingURL=PushSend.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PushSend.js","sourceRoot":"","sources":["../../src/server/PushSend.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EACL,QAAQ,GAGT,MAAM,qBAAqB,CAAC;AAmC7B;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CAIjC,GAA2B,EAC3B,KAAmC;IAEnC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;QACjE,MAAM,IAAI,KAAK,CACb,4BAA4B,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,oBAAoB,MAAM,CAAC,IAAI,CAC3E,GAAG,CAAC,KAAK,CACV,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CACf,CAAC;IACJ,CAAC;IACD,MAAM,QAAQ,GAAG,QAAQ,CACvB,KAAK,CAAC,IAAI,EACV,CAAC,KAAK,CAAC,KAAK,IAAI,EAAE,CAA4B,CAC/C,CAAC;IACF,MAAM,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IAC7C,MAAM,IAAI,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,GAAG,QAAQ,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC;IACxD,MAAM,MAAM,GAAG,MAAM,cAAc,CAAC,UAAU,EAAE;QAC9C,YAAY,EAAE,KAAK,CAAC,YAAY;QAChC,KAAK,EAAE,KAAK,CAAC,KAAK;QAClB,IAAI,EAAE,KAAK,CAAC,IAAI;QAChB,IAAI;QACJ,QAAQ,EAAE,KAAK,CAAC,QAAQ;QACxB,OAAO,EAAE,KAAK;QACd,GAAG,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,GAAG,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KACvD,CAAC,CAAC;IACH,OAAO,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC;AAC/B,CAAC;
|
|
1
|
+
{"version":3,"file":"PushSend.js","sourceRoot":"","sources":["../../src/server/PushSend.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EACL,QAAQ,GAGT,MAAM,qBAAqB,CAAC;AAmC7B;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CAIjC,GAA2B,EAC3B,KAAmC;IAEnC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;QACjE,MAAM,IAAI,KAAK,CACb,4BAA4B,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,oBAAoB,MAAM,CAAC,IAAI,CAC3E,GAAG,CAAC,KAAK,CACV,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CACf,CAAC;IACJ,CAAC;IACD,MAAM,QAAQ,GAAG,QAAQ,CACvB,KAAK,CAAC,IAAI,EACV,CAAC,KAAK,CAAC,KAAK,IAAI,EAAE,CAA4B,CAC/C,CAAC;IACF,MAAM,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IAC7C,MAAM,IAAI,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,GAAG,QAAQ,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC;IACxD,MAAM,MAAM,GAAG,MAAM,cAAc,CAAC,UAAU,EAAE;QAC9C,YAAY,EAAE,KAAK,CAAC,YAAY;QAChC,KAAK,EAAE,KAAK,CAAC,KAAK;QAClB,IAAI,EAAE,KAAK,CAAC,IAAI;QAChB,IAAI;QACJ,QAAQ,EAAE,KAAK,CAAC,QAAQ;QACxB,OAAO,EAAE,KAAK;QACd,GAAG,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,GAAG,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KACvD,CAAC,CAAC;IACH,OAAO,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC;AAC/B,CAAC;AAED,gFAAgF;AAChF,kFAAkF;AAClF,oFAAoF;AACpF,iFAAiF;AACjF,gBAAgB"}
|
|
@@ -24,7 +24,6 @@ export { createImageGen } from '../../AiImage.js';
|
|
|
24
24
|
export { createEmbeddingClient } from '../../embeddings/index.js';
|
|
25
25
|
export { emailSend, setEmailBinding } from '../../Email.js';
|
|
26
26
|
export type { EmailBinding } from '../../Email.js';
|
|
27
|
-
export { pushSend } from '../../PushSend.js';
|
|
28
27
|
export { shareLink } from '../../ShareLink.js';
|
|
29
28
|
export type { ShareLinkOptions } from '../../ShareLink.js';
|
|
30
29
|
export { createTypedDB } from '../../DB.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/server/adapter/workers/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAMhD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAClD,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EACL,gBAAgB,EAChB,aAAa,GACd,MAAM,uBAAuB,CAAC;AAC/B,YAAY,EACV,mBAAmB,EACnB,UAAU,EACV,iBAAiB,EACjB,gBAAgB,GACjB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,cAAc,EAAE,KAAK,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAKxE,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAClE,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAC5D,YAAY,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AACnD,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/server/adapter/workers/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAMhD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAClD,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EACL,gBAAgB,EAChB,aAAa,GACd,MAAM,uBAAuB,CAAC;AAC/B,YAAY,EACV,mBAAmB,EACnB,UAAU,EACV,iBAAiB,EACjB,gBAAgB,GACjB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,cAAc,EAAE,KAAK,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAKxE,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAClE,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAC5D,YAAY,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AACnD,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC/C,YAAY,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAO3D,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAI5C,OAAO,EACL,YAAY,EACZ,SAAS,EACT,gBAAgB,GACjB,MAAM,2BAA2B,CAAC;AACnC,YAAY,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAK7D,OAAO,EACL,WAAW,EACX,UAAU,EACV,UAAU,GACX,MAAM,iBAAiB,CAAC;AACzB,YAAY,EACV,uBAAuB,EACvB,UAAU,EACV,mBAAmB,EACnB,2BAA2B,GAC5B,MAAM,uBAAuB,CAAC;AAC/B,YAAY,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAEhD,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,UAAU,GAAG,aAAa,CAsBnE"}
|
|
@@ -28,7 +28,6 @@ export { createTextGen } from '../../AiText.js';
|
|
|
28
28
|
export { createImageGen } from '../../AiImage.js';
|
|
29
29
|
export { createEmbeddingClient } from '../../embeddings/index.js';
|
|
30
30
|
export { emailSend, setEmailBinding } from '../../Email.js';
|
|
31
|
-
export { pushSend } from '../../PushSend.js';
|
|
32
31
|
export { shareLink } from '../../ShareLink.js';
|
|
33
32
|
// `createTypedDB` is runtime-neutral — it routes setDoc/getDoc/find
|
|
34
33
|
// through `getAdapter().db.query`, so it works inside Workers as long
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/server/adapter/workers/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAIH,OAAO,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAC1C,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AACtD,OAAO,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AAEpD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAClD,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EACL,gBAAgB,EAChB,aAAa,GACd,MAAM,uBAAuB,CAAC;AAO/B,OAAO,EAAE,cAAc,EAAqB,MAAM,qBAAqB,CAAC;AACxE,+EAA+E;AAC/E,gFAAgF;AAChF,+EAA+E;AAC/E,6EAA6E;AAC7E,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAClE,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAE5D,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/server/adapter/workers/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAIH,OAAO,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAC1C,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AACtD,OAAO,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AAEpD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAClD,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EACL,gBAAgB,EAChB,aAAa,GACd,MAAM,uBAAuB,CAAC;AAO/B,OAAO,EAAE,cAAc,EAAqB,MAAM,qBAAqB,CAAC;AACxE,+EAA+E;AAC/E,gFAAgF;AAChF,+EAA+E;AAC/E,6EAA6E;AAC7E,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAClE,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAE5D,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAE/C,oEAAoE;AACpE,sEAAsE;AACtE,kEAAkE;AAClE,sEAAsE;AACtE,wEAAwE;AACxE,uEAAuE;AACvE,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,8EAA8E;AAC9E,0EAA0E;AAC1E,kEAAkE;AAClE,OAAO,EACL,YAAY,EACZ,SAAS,EACT,gBAAgB,GACjB,MAAM,2BAA2B,CAAC;AAEnC,4DAA4D;AAC5D,iEAAiE;AACjE,mEAAmE;AACnE,uEAAuE;AACvE,OAAO,EACL,WAAW,EACX,UAAU,EACV,UAAU,GACX,MAAM,iBAAiB,CAAC;AASzB,MAAM,UAAU,oBAAoB,CAAC,GAAe;IAClD,OAAO;QACL,IAAI,EAAE,SAAS;QACf,EAAE,EAAE,eAAe,CAAC,GAAG,CAAC,YAAY,EAAE;YACpC,aAAa,EAAE,GAAG,CAAC,cAAc;SAClC,CAAC;QACF,MAAM,EAAE,mBAAmB,CAAC,GAAG,CAAC,WAAW,EAAE,GAAG,CAAC,UAAU,CAAC;QAC5D,OAAO,EAAE,oBAAoB,CAC3B,GAAG,CAAC,SAAS,EACb,GAAG,CAAC,kBAAkB,IAAI,EAAE,CAC7B;QACD,QAAQ,EAAE,qBAAqB,CAAC;YAC9B,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAiB,EAAE;gBAC5C,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC;oBACf,MAAM,IAAI,KAAK,CACb,oCAAoC,IAAI,kFAAkF,CAC3H,CAAC;gBACJ,CAAC;gBACD,MAAM,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,UAAU,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;YACpD,CAAC;SACF,CAAC;KACH,CAAC;AACJ,CAAC"}
|
package/dist/server/index.d.ts
CHANGED
|
@@ -23,8 +23,8 @@ export { cacheDelete, cacheGet, cacheGetDoc, cacheGetSetDoc, cacheInvalidate, ca
|
|
|
23
23
|
export { createTypedDB, getDocs, } from './DB.js';
|
|
24
24
|
export { emailSend, emailSend as sendEmail, createEmailSender } from './Email.js';
|
|
25
25
|
export type { EmailOptions } from './Email.js';
|
|
26
|
-
export {
|
|
27
|
-
export type {
|
|
26
|
+
export { pushSendTyped } from './PushSend.js';
|
|
27
|
+
export type { PushSendResult, TypedPushSendInput, PushSendContext, } from './PushSend.js';
|
|
28
28
|
export { uglyBotRequest } from './uglyBotProxy.js';
|
|
29
29
|
export { shareLink } from './ShareLink.js';
|
|
30
30
|
export type { ShareLinkOptions } from './ShareLink.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/server/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,YAAY,EACZ,gBAAgB,EAChB,UAAU,EACV,iBAAiB,GAClB,MAAM,iBAAiB,CAAC;AACzB,YAAY,EACV,YAAY,EACZ,aAAa,EACb,qBAAqB,EACrB,cAAc,EACd,UAAU,EACV,QAAQ,EACR,SAAS,EACT,QAAQ,EACR,mBAAmB,EACnB,oBAAoB,EACpB,qBAAqB,EACrB,eAAe,EACf,uBAAuB,EACvB,mBAAmB,EACnB,aAAa,EACb,mBAAmB,EACnB,aAAa,EACb,iBAAiB,EACjB,cAAc,EACd,YAAY,EACZ,QAAQ,EACR,WAAW,EACX,iBAAiB,EACjB,aAAa,EACb,OAAO,EACP,OAAO,EACP,QAAQ,EACR,WAAW,EACX,UAAU,GACX,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAC9D,YAAY,EACV,OAAO,EACP,QAAQ,EACR,UAAU,EACV,YAAY,EACZ,WAAW,GACZ,MAAM,qBAAqB,CAAC;AAC7B,YAAY,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAC7D,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAChE,YAAY,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC/D,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAC9D,YAAY,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC/D,YAAY,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAC3D,OAAO,EAAE,sBAAsB,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAC3E,YAAY,EACV,OAAO,IAAI,SAAS,EACpB,eAAe,EACf,gBAAgB,EAChB,cAAc,EACd,eAAe,EACf,YAAY,EACZ,cAAc,EACd,OAAO,EACP,gBAAgB,EAChB,iBAAiB,GAClB,MAAM,eAAe,CAAC;AACvB,OAAO,EACL,kBAAkB,EAClB,gBAAgB,EAChB,eAAe,EACf,cAAc,GACf,MAAM,cAAc,CAAC;AACtB,YAAY,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AACxD,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAClE,YAAY,EAAE,GAAG,EAAE,eAAe,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AACrF,OAAO,EAAE,YAAY,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AACpE,YAAY,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,MAAM,kBAAkB,CAAC;AACjF,OAAO,EAAE,OAAO,IAAI,KAAK,EAAE,MAAM,SAAS,CAAC;AAC3C,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAClF,YAAY,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EACL,WAAW,EACX,QAAQ,EACR,WAAW,EACX,cAAc,EACd,eAAe,EACf,QAAQ,EACR,QAAQ,EACR,aAAa,EACb,SAAS,GACV,MAAM,YAAY,CAAC;AACpB,OAAO,EACL,aAAa,EACb,OAAO,GACR,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,SAAS,EAAE,SAAS,IAAI,SAAS,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAClF,YAAY,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC/C,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/server/index.ts"],"names":[],"mappings":"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"}
|
package/dist/server/index.js
CHANGED
|
@@ -11,7 +11,7 @@ export { getUserToken, getUserId, userContextStore } from './auth/userContext.js
|
|
|
11
11
|
export { cacheDelete, cacheGet, cacheGetDoc, cacheGetSetDoc, cacheInvalidate, cacheKey, cacheSet, getCacheStats, initCache, } from './Cache.js';
|
|
12
12
|
export { createTypedDB, getDocs, } from './DB.js';
|
|
13
13
|
export { emailSend, emailSend as sendEmail, createEmailSender } from './Email.js';
|
|
14
|
-
export {
|
|
14
|
+
export { pushSendTyped } from './PushSend.js';
|
|
15
15
|
export { uglyBotRequest } from './uglyBotProxy.js';
|
|
16
16
|
export { shareLink } from './ShareLink.js';
|
|
17
17
|
export { userPublicCollections, userPublicDef, profilesGetter, userPublicTtlMs, UserPublicSchema, } from './userPublicCollection.js';
|
package/dist/server/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/server/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,YAAY,EACZ,gBAAgB,EAChB,UAAU,EACV,iBAAiB,GAClB,MAAM,iBAAiB,CAAC;AAgCzB,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAS9D,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAEhE,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAG9D,OAAO,EAAE,sBAAsB,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAa3E,OAAO,EACL,kBAAkB,EAClB,gBAAgB,EAChB,eAAe,EACf,cAAc,GACf,MAAM,cAAc,CAAC;AAEtB,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAElE,OAAO,EAAE,YAAY,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAEpE,OAAO,EAAE,OAAO,IAAI,KAAK,EAAE,MAAM,SAAS,CAAC;AAC3C,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAElF,OAAO,EACL,WAAW,EACX,QAAQ,EACR,WAAW,EACX,cAAc,EACd,eAAe,EACf,QAAQ,EACR,QAAQ,EACR,aAAa,EACb,SAAS,GACV,MAAM,YAAY,CAAC;AACpB,OAAO,EACL,aAAa,EACb,OAAO,GACR,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,SAAS,EAAE,SAAS,IAAI,SAAS,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAElF,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/server/index.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "ugly-app",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.735",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"comment:files": "Allowlist what ships to npm. dist = runtime; src = sourcemap targets (dist/*.js.map reference ../../src/); templates = CLI scaffold. Everything else at repo root (.pgdata local Postgres, coverage, assets/icons sources, test/, test-results/) is excluded by omission. The !negations strip the scaffold's installed deps + cruft (templates/node_modules is 200MB+ and must never ship). package.json/README/LICENSE ship automatically.",
|
|
6
6
|
"files": [
|
package/src/cli/version.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
// Auto-generated by prebuild — do not edit manually
|
|
2
|
-
export const CLI_VERSION = "0.1.
|
|
2
|
+
export const CLI_VERSION = "0.1.735";
|
|
@@ -30,3 +30,59 @@ describe('startUglyBotAuthorize', () => {
|
|
|
30
30
|
expect(url).not.toContain('ai_cap=');
|
|
31
31
|
});
|
|
32
32
|
});
|
|
33
|
+
|
|
34
|
+
describe('isDevPreviewOrigin', () => {
|
|
35
|
+
it('flags plain-http, localhost, loopback, and trycloudflare preview origins', async () => {
|
|
36
|
+
const { isDevPreviewOrigin } = await import('./startLogin');
|
|
37
|
+
expect(isDevPreviewOrigin({ protocol: 'http:', hostname: 'localhost' })).toBe(true);
|
|
38
|
+
expect(isDevPreviewOrigin({ protocol: 'http:', hostname: '127.0.0.1' })).toBe(true);
|
|
39
|
+
expect(isDevPreviewOrigin({ protocol: 'https:', hostname: '127.0.0.1' })).toBe(true);
|
|
40
|
+
expect(isDevPreviewOrigin({ protocol: 'https:', hostname: 'abc-def-ghi.trycloudflare.com' })).toBe(true);
|
|
41
|
+
expect(isDevPreviewOrigin({ protocol: 'http:', hostname: 'ugly.press' })).toBe(true); // plain http
|
|
42
|
+
});
|
|
43
|
+
it('does NOT flag real https apex/subdomain production origins', async () => {
|
|
44
|
+
const { isDevPreviewOrigin } = await import('./startLogin');
|
|
45
|
+
expect(isDevPreviewOrigin({ protocol: 'https:', hostname: 'ugly.press' })).toBe(false);
|
|
46
|
+
expect(isDevPreviewOrigin({ protocol: 'https:', hostname: 'ugly.chat' })).toBe(false);
|
|
47
|
+
expect(isDevPreviewOrigin({ protocol: 'https:', hostname: 'code.ugly.bot' })).toBe(false);
|
|
48
|
+
});
|
|
49
|
+
});
|
|
50
|
+
|
|
51
|
+
describe('attemptSilentSso — dev/preview guard', () => {
|
|
52
|
+
function stubLoc(protocol: string, hostname: string): ReturnType<typeof vi.fn> {
|
|
53
|
+
const replace = vi.fn();
|
|
54
|
+
vi.stubGlobal('window', {
|
|
55
|
+
location: { protocol, hostname, origin: `${protocol}//${hostname}`, pathname: '/', search: '', hash: '', replace },
|
|
56
|
+
__UGLY_BOT_URL__: 'https://ugly.bot',
|
|
57
|
+
} as unknown as Window & typeof globalThis);
|
|
58
|
+
vi.stubGlobal('sessionStorage', {
|
|
59
|
+
_m: new Map<string, string>(),
|
|
60
|
+
getItem(k: string) { return this._m.get(k) ?? null; },
|
|
61
|
+
setItem(k: string, v: string) { this._m.set(k, v); },
|
|
62
|
+
removeItem(k: string) { this._m.delete(k); },
|
|
63
|
+
} as unknown as Storage);
|
|
64
|
+
return replace;
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
it('does NOT redirect (renders normally) on a localhost preview origin', async () => {
|
|
68
|
+
const replace = stubLoc('http:', 'localhost');
|
|
69
|
+
const { attemptSilentSso } = await import('./startLogin');
|
|
70
|
+
expect(attemptSilentSso()).toBe(false);
|
|
71
|
+
expect(replace).not.toHaveBeenCalled();
|
|
72
|
+
});
|
|
73
|
+
|
|
74
|
+
it('does NOT redirect on a trycloudflare preview tunnel origin', async () => {
|
|
75
|
+
const replace = stubLoc('https:', 'gamma-delta-epsilon.trycloudflare.com');
|
|
76
|
+
const { attemptSilentSso } = await import('./startLogin');
|
|
77
|
+
expect(attemptSilentSso()).toBe(false);
|
|
78
|
+
expect(replace).not.toHaveBeenCalled();
|
|
79
|
+
});
|
|
80
|
+
|
|
81
|
+
it('DOES redirect to /oauth/silent on a real https apex production origin', async () => {
|
|
82
|
+
const replace = stubLoc('https:', 'ugly.press');
|
|
83
|
+
const { attemptSilentSso } = await import('./startLogin');
|
|
84
|
+
expect(attemptSilentSso()).toBe(true);
|
|
85
|
+
const url = replace.mock.calls[0]?.[0] as string;
|
|
86
|
+
expect(url).toContain('https://ugly.bot/oauth/silent?origin=https%3A%2F%2Fugly.press');
|
|
87
|
+
});
|
|
88
|
+
});
|
|
@@ -90,6 +90,25 @@ export function startUglyBotAuthorize(
|
|
|
90
90
|
|
|
91
91
|
const SILENT_SSO_TRIED_KEY = 'uglySilentSsoTried';
|
|
92
92
|
|
|
93
|
+
/**
|
|
94
|
+
* A dev/preview origin that ugly.bot's `/oauth/silent` redirect mode will reject
|
|
95
|
+
* with 400 "Invalid origin": plain-http (localhost dev servers) or a
|
|
96
|
+
* `*.trycloudflare.com` quick-tunnel (Ugly Studio's Preview panel publishes the
|
|
97
|
+
* dev server there so mobile can reach it). The apex silent-SSO top-level
|
|
98
|
+
* redirect must be skipped for these, or the app strands on ugly.bot's blank 400.
|
|
99
|
+
*/
|
|
100
|
+
export function isDevPreviewOrigin(loc: { protocol: string; hostname: string }): boolean {
|
|
101
|
+
const host = loc.hostname;
|
|
102
|
+
return (
|
|
103
|
+
loc.protocol !== 'https:' ||
|
|
104
|
+
host === 'localhost' ||
|
|
105
|
+
host === '127.0.0.1' ||
|
|
106
|
+
host === '[::1]' ||
|
|
107
|
+
host === '::1' ||
|
|
108
|
+
host.endsWith('.trycloudflare.com')
|
|
109
|
+
);
|
|
110
|
+
}
|
|
111
|
+
|
|
93
112
|
/**
|
|
94
113
|
* Silent SSO for apex-domain apps (ugly.chat, ugly.press, …) that don't share
|
|
95
114
|
* ugly.bot's `auth_token` cookie. Adopts an existing ugly.bot session with NO
|
|
@@ -109,6 +128,15 @@ const SILENT_SSO_TRIED_KEY = 'uglySilentSsoTried';
|
|
|
109
128
|
*/
|
|
110
129
|
export function attemptSilentSso(): boolean {
|
|
111
130
|
if (typeof window === 'undefined') return false;
|
|
131
|
+
// Dev/preview origins — plain-http localhost or a *.trycloudflare.com preview
|
|
132
|
+
// tunnel (Ugly Studio's Preview panel exposes the dev server there for mobile)
|
|
133
|
+
// — are never allow-listed by ugly.bot's `/oauth/silent` redirect mode. It
|
|
134
|
+
// returns 400 "Invalid origin" (an open-redirect guard), and since this is a
|
|
135
|
+
// top-level `location.replace`, the app is STRANDED on that blank error page —
|
|
136
|
+
// "nothing shows up in the preview". Skip the redirect for those origins and
|
|
137
|
+
// render normally (logged-out); the hidden-iframe `silentAuthSync` still adopts
|
|
138
|
+
// a session without navigating away.
|
|
139
|
+
if (isDevPreviewOrigin(window.location)) return false;
|
|
112
140
|
try {
|
|
113
141
|
if (sessionStorage.getItem(SILENT_SSO_TRIED_KEY)) return false;
|
|
114
142
|
sessionStorage.setItem(SILENT_SSO_TRIED_KEY, '1');
|
package/src/server/PushSend.ts
CHANGED
|
@@ -75,34 +75,8 @@ export async function pushSendTyped<
|
|
|
75
75
|
return { sent: result.sent };
|
|
76
76
|
}
|
|
77
77
|
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
/** Page path to open on click (e.g. "chat"). Prefer `app.pushSend({ page })`. */
|
|
84
|
-
path: string;
|
|
85
|
-
/** Query parameters for the page (ignored server-side; prefer `app.pushSend`). */
|
|
86
|
-
query?: Record<string, string>;
|
|
87
|
-
/** Optional notification image URL. */
|
|
88
|
-
imageUrl?: string;
|
|
89
|
-
}
|
|
90
|
-
|
|
91
|
-
/**
|
|
92
|
-
* Send a push notification to a user via the ugly.bot platform.
|
|
93
|
-
*
|
|
94
|
-
* @deprecated Use `app.pushSend({ targetUserId, title, body, page, query })` —
|
|
95
|
-
* it route-checks `page`/`query` against the app's routing table and delivers an
|
|
96
|
-
* absolute, openable URL. This bare helper ships `path` verbatim (often relative)
|
|
97
|
-
* and cannot identify the app on the device.
|
|
98
|
-
*/
|
|
99
|
-
export async function pushSend(input: PushSendInput): Promise<PushSendResult> {
|
|
100
|
-
const result = await uglyBotRequest('pushSend', {
|
|
101
|
-
targetUserId: input.targetUserId,
|
|
102
|
-
title: input.title,
|
|
103
|
-
body: input.body,
|
|
104
|
-
path: input.path,
|
|
105
|
-
imageUrl: input.imageUrl,
|
|
106
|
-
});
|
|
107
|
-
return { sent: result.sent };
|
|
108
|
-
}
|
|
78
|
+
// The legacy bare `pushSend(input)` helper (free-string `path`, no route check)
|
|
79
|
+
// was removed — it shipped relative/absolute paths verbatim that the mobile shell
|
|
80
|
+
// couldn't host-match. Use `app.pushSend({ page, query })` (→ pushSendTyped), which
|
|
81
|
+
// route-checks `page` against the app's `pages` registry and builds an absolute,
|
|
82
|
+
// openable URL.
|
|
@@ -42,7 +42,6 @@ export { createImageGen } from '../../AiImage.js';
|
|
|
42
42
|
export { createEmbeddingClient } from '../../embeddings/index.js';
|
|
43
43
|
export { emailSend, setEmailBinding } from '../../Email.js';
|
|
44
44
|
export type { EmailBinding } from '../../Email.js';
|
|
45
|
-
export { pushSend } from '../../PushSend.js';
|
|
46
45
|
export { shareLink } from '../../ShareLink.js';
|
|
47
46
|
export type { ShareLinkOptions } from '../../ShareLink.js';
|
|
48
47
|
// `createTypedDB` is runtime-neutral — it routes setDoc/getDoc/find
|
package/src/server/index.ts
CHANGED
|
@@ -93,9 +93,8 @@ export {
|
|
|
93
93
|
} from './DB.js';
|
|
94
94
|
export { emailSend, emailSend as sendEmail, createEmailSender } from './Email.js';
|
|
95
95
|
export type { EmailOptions } from './Email.js';
|
|
96
|
-
export {
|
|
96
|
+
export { pushSendTyped } from './PushSend.js';
|
|
97
97
|
export type {
|
|
98
|
-
PushSendInput,
|
|
99
98
|
PushSendResult,
|
|
100
99
|
TypedPushSendInput,
|
|
101
100
|
PushSendContext,
|
|
@@ -77,7 +77,7 @@ export default function PushTestPage(): React.ReactElement {
|
|
|
77
77
|
targetUserId: targetUserId.trim(),
|
|
78
78
|
title: title.trim(),
|
|
79
79
|
body: body.trim(),
|
|
80
|
-
|
|
80
|
+
page: '',
|
|
81
81
|
})) as { sent: boolean; devices?: number; delivered?: number; failed?: number; errors?: string[] };
|
|
82
82
|
// Show the full delivery breakdown so the send is self-verifying — no
|
|
83
83
|
// log-tailing needed to see device count / per-device outcome.
|
|
@@ -3,13 +3,13 @@ import {
|
|
|
3
3
|
pgQuery,
|
|
4
4
|
emailSend,
|
|
5
5
|
flushPerf,
|
|
6
|
-
pushSend,
|
|
7
6
|
recordFeedback,
|
|
8
7
|
recordPerf,
|
|
9
8
|
uglyBotRequest,
|
|
10
9
|
type AppConfigurator,
|
|
11
10
|
type InboundEmail,
|
|
12
11
|
type RequestHandlers,
|
|
12
|
+
type TypedPushSendInput,
|
|
13
13
|
} from 'ugly-app';
|
|
14
14
|
import { nanoid } from 'nanoid';
|
|
15
15
|
import { enableConversations } from 'ugly-app/conversation/server';
|
|
@@ -62,9 +62,20 @@ const app = createApp(
|
|
|
62
62
|
return { ok: true };
|
|
63
63
|
},
|
|
64
64
|
|
|
65
|
-
sendPush: async (_userId, { targetUserId, title, body,
|
|
65
|
+
sendPush: async (_userId, { targetUserId, title, body, page, query, imageUrl }): Promise<{ sent: boolean }> => {
|
|
66
66
|
try {
|
|
67
|
-
|
|
67
|
+
// `app.pushSend` route-checks `page` against the route table and builds
|
|
68
|
+
// the absolute click URL. `page` arrives as a runtime string, so we cast
|
|
69
|
+
// to the typed shape (via `typeof pages`, never `typeof app` — that would
|
|
70
|
+
// be circular inside createApp) and let the framework validate the route.
|
|
71
|
+
const result = await app.pushSend({
|
|
72
|
+
targetUserId,
|
|
73
|
+
title,
|
|
74
|
+
body,
|
|
75
|
+
page,
|
|
76
|
+
query: query ?? {},
|
|
77
|
+
...(imageUrl ? { imageUrl } : {}),
|
|
78
|
+
} as TypedPushSendInput<typeof pages, keyof typeof pages & string>);
|
|
68
79
|
return { sent: result.sent };
|
|
69
80
|
} catch (e) {
|
|
70
81
|
console.error(e);
|
package/templates/shared/api.ts
CHANGED
|
@@ -17,13 +17,15 @@ export const requests = defineRequests({
|
|
|
17
17
|
output: z.object({ ok: z.boolean() }),
|
|
18
18
|
}),
|
|
19
19
|
|
|
20
|
-
// Push notification test — send a push via ugly.bot
|
|
20
|
+
// Push notification test — send a push via ugly.bot. `page` is a route key
|
|
21
|
+
// (validated server-side against the app's route table); the framework builds
|
|
22
|
+
// the absolute click URL. Raw/absolute paths are not accepted.
|
|
21
23
|
sendPush: authReq({
|
|
22
24
|
input: z.object({
|
|
23
25
|
targetUserId: z.string(),
|
|
24
26
|
title: z.string().min(1).max(200),
|
|
25
27
|
body: z.string().max(500),
|
|
26
|
-
|
|
28
|
+
page: z.string(),
|
|
27
29
|
query: z.record(z.string(), z.string()).optional(),
|
|
28
30
|
imageUrl: z.string().optional(),
|
|
29
31
|
}),
|