ugly-app 0.1.268 → 0.1.269
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/scaffold.d.ts.map +1 -1
- package/dist/cli/scaffold.js +1 -2
- package/dist/cli/scaffold.js.map +1 -1
- package/dist/cli/version.d.ts +1 -1
- package/dist/cli/version.js +1 -1
- package/dist/server/Auth.d.ts +0 -2
- package/dist/server/Auth.d.ts.map +1 -1
- package/dist/server/Auth.js +1 -8
- package/dist/server/Auth.js.map +1 -1
- package/package.json +1 -1
- package/src/cli/scaffold.ts +1 -2
- package/src/cli/version.ts +1 -1
- package/src/server/Auth.ts +2 -11
- package/templates/server/index.ts +3 -13
- package/templates/shared/api.ts +1 -1
- package/templates/shared/collections.ts +1 -29
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scaffold.d.ts","sourceRoot":"","sources":["../../src/cli/scaffold.ts"],"names":[],"mappings":"AAgFA,wBAAsB,eAAe,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"scaffold.d.ts","sourceRoot":"","sources":["../../src/cli/scaffold.ts"],"names":[],"mappings":"AAgFA,wBAAsB,eAAe,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAsExE"}
|
package/dist/cli/scaffold.js
CHANGED
|
@@ -84,8 +84,7 @@ export async function scaffoldProject(projectName) {
|
|
|
84
84
|
for (const [name, def] of Object.entries(BUILTIN_DEFS)) {
|
|
85
85
|
bootstrapCollections[name] = { indexes: def.indexes };
|
|
86
86
|
}
|
|
87
|
-
// Template ships with
|
|
88
|
-
bootstrapCollections['user'] = { indexes: [{ fields: { email: 1 }, unique: true }] };
|
|
87
|
+
// Template ships with todo (no indexes). User data lives on ugly.bot.
|
|
89
88
|
bootstrapCollections['todo'] = {};
|
|
90
89
|
const migrationCode = generateBootstrapMigration(bootstrapCollections);
|
|
91
90
|
await fs.writeFile(path.join(migrationsDir, '001_bootstrap.ts'), migrationCode, 'utf-8');
|
package/dist/cli/scaffold.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scaffold.js","sourceRoot":"","sources":["../../src/cli/scaffold.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"scaffold.js","sourceRoot":"","sources":["../../src/cli/scaffold.ts"],"names":[],"mappings":"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"}
|
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.269";
|
|
2
2
|
//# sourceMappingURL=version.d.ts.map
|
package/dist/cli/version.js
CHANGED
package/dist/server/Auth.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Auth.d.ts","sourceRoot":"","sources":["../../src/server/Auth.ts"],"names":[],"mappings":"AACA,OAAO,OAAO,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAS3D,wBAAsB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAoBhE;AAED,MAAM,WAAW,YAAY;IAG3B,MAAM,CACJ,IAAI,EAAE,MAAM,GACX,OAAO,CAAC;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"Auth.d.ts","sourceRoot":"","sources":["../../src/server/Auth.ts"],"names":[],"mappings":"AACA,OAAO,OAAO,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAS3D,wBAAsB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAoBhE;AAED,MAAM,WAAW,YAAY;IAG3B,MAAM,CACJ,IAAI,EAAE,MAAM,GACX,OAAO,CAAC;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAE/C,OAAO,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC;IAEhC,cAAc,CAAC,CAAC,MAAM,EAAE,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;CAC/C;AAED,eAAO,MAAM,mBAAmB,EAAE,YAyBjC,CAAC;AAGF,MAAM,MAAM,YAAY,GAAG,CACzB,MAAM,EAAE,MAAM,EACd,IAAI,EAAE;IAAE,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,EACxC,EAAE,EAAE,OAAO,CAAC,GAAG,CAAC,KACb,OAAO,CAAC,IAAI,CAAC,CAAC;AAInB,eAAO,MAAM,cAAc,EAAE,UAAU,CAAC,GAAG,CAY1C,CAAC;AAIF,wBAAgB,gBAAgB,CAAC,QAAQ,CAAC,EAAE,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC;AAE1E,wBAAgB,gBAAgB,CAE9B,EAAE,EAAE,OAAO,CAAC,GAAG,CAAC,EAEhB,UAAU,EAAE,UAAU,CAAC,GAAG,CAAC,EAC3B,YAAY,EAAE,YAAY,EAC1B,QAAQ,CAAC,EAAE,YAAY,GACtB,OAAO,CAAC,MAAM,CAAC"}
|
package/dist/server/Auth.js
CHANGED
|
@@ -47,8 +47,6 @@ export const uglyBotAuthProvider = {
|
|
|
47
47
|
const data = (await response.json());
|
|
48
48
|
return {
|
|
49
49
|
userId: data.user_id,
|
|
50
|
-
email: data.email,
|
|
51
|
-
phone: data.phone,
|
|
52
50
|
token: data.token,
|
|
53
51
|
};
|
|
54
52
|
},
|
|
@@ -99,15 +97,10 @@ userHelper, onUserCreate, provider) {
|
|
|
99
97
|
res.status(400).json({ error: 'Missing code' });
|
|
100
98
|
return;
|
|
101
99
|
}
|
|
102
|
-
const { userId,
|
|
100
|
+
const { userId, token } = await resolvedProvider.verify(code);
|
|
103
101
|
if (!token) {
|
|
104
102
|
throw new Error('Auth provider did not return a token');
|
|
105
103
|
}
|
|
106
|
-
// Find or create user — app is responsible for the full user record
|
|
107
|
-
const existing = await resolvedUserHelper.get(db, userId);
|
|
108
|
-
if (!existing) {
|
|
109
|
-
await resolvedOnUserCreate(userId, { email, phone }, db);
|
|
110
|
-
}
|
|
111
104
|
res.cookie('auth_token', token, {
|
|
112
105
|
httpOnly: true,
|
|
113
106
|
secure: process.env.NODE_ENV === 'production',
|
package/dist/server/Auth.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Auth.js","sourceRoot":"","sources":["../../src/server/Auth.ts"],"names":[],"mappings":"AACA,OAAO,OAAO,MAAM,SAAS,CAAC;AAE9B,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAChD,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AACxD,OAAO,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAExC,oDAAoD;AACpD,MAAM,sBAAsB,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;AAEjD,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,KAAa;IAC7C,8EAA8E;IAC9E,qCAAqC;IACrC,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,IAAI,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;IAC9E,IAAI,SAAS,EAAE,CAAC;QACd,IAAI,CAAC;YACH,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,CAAC;YAC3C,MAAM,MAAM,GAAG,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;YACnD,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,SAAS,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;YACnD,IAAI,OAAO,CAAC,GAAG;gBAAE,OAAO,OAAO,CAAC,GAAG,CAAC;QACtC,CAAC;QAAC,MAAM,CAAC,CAAC,4CAA4C,CAAC,CAAC;IAC1D,CAAC;IAED,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,aAAa,EAAE,SAAS,EAAE;QACnD,OAAO,EAAE,EAAE,aAAa,EAAE,UAAU,KAAK,EAAE,EAAE;KAC9C,CAAC,CAAC;IACH,IAAI,CAAC,GAAG,CAAC,EAAE;QAAE,MAAM,IAAI,SAAS,CAAC,eAAe,CAAC,CAAC;IAClD,MAAM,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAAwB,CAAC;IACvD,IAAI,CAAC,IAAI,CAAC,MAAM;QAAE,MAAM,IAAI,SAAS,CAAC,eAAe,CAAC,CAAC;IACvD,OAAO,IAAI,CAAC,MAAM,CAAC;AACrB,CAAC;AAcD,MAAM,CAAC,MAAM,mBAAmB,GAAiB;IAC/C,OAAO,EAAE,CAAC,MAAc,EAAE,EAAE,CAC1B,GAAG,aAAa,EAAE,iBAAiB,kBAAkB,CAAC,MAAM,CAAC,EAAE;IACjE,MAAM,EAAE,KAAK,EAAE,IAAY,EAAE,EAAE;QAC7B,MAAM,SAAS,GAAG,GAAG,aAAa,EAAE,sBAAsB,kBAAkB,CAAC,IAAI,CAAC,EAAE,CAAC;QACrF,OAAO,CAAC,GAAG,CAAC,wBAAwB,EAAE,SAAS,CAAC,CAAC;QACjD,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,SAAS,CAAC,CAAC;QACxC,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,OAAO,CAAC,KAAK,CAAC,qCAAqC,EAAE;gBACnD,MAAM,EAAE,QAAQ,CAAC,MAAM;gBACvB,GAAG,EAAE,SAAS;gBACd,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,GAAG,CAAC;aAC7B,CAAC,CAAC;YACH,MAAM,IAAI,KAAK,CAAC,wCAAwC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;QAC7E,CAAC;QACD,MAAM,IAAI,GAAG,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,
|
|
1
|
+
{"version":3,"file":"Auth.js","sourceRoot":"","sources":["../../src/server/Auth.ts"],"names":[],"mappings":"AACA,OAAO,OAAO,MAAM,SAAS,CAAC;AAE9B,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAChD,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AACxD,OAAO,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAExC,oDAAoD;AACpD,MAAM,sBAAsB,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;AAEjD,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,KAAa;IAC7C,8EAA8E;IAC9E,qCAAqC;IACrC,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,IAAI,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;IAC9E,IAAI,SAAS,EAAE,CAAC;QACd,IAAI,CAAC;YACH,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,CAAC;YAC3C,MAAM,MAAM,GAAG,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;YACnD,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,SAAS,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;YACnD,IAAI,OAAO,CAAC,GAAG;gBAAE,OAAO,OAAO,CAAC,GAAG,CAAC;QACtC,CAAC;QAAC,MAAM,CAAC,CAAC,4CAA4C,CAAC,CAAC;IAC1D,CAAC;IAED,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,aAAa,EAAE,SAAS,EAAE;QACnD,OAAO,EAAE,EAAE,aAAa,EAAE,UAAU,KAAK,EAAE,EAAE;KAC9C,CAAC,CAAC;IACH,IAAI,CAAC,GAAG,CAAC,EAAE;QAAE,MAAM,IAAI,SAAS,CAAC,eAAe,CAAC,CAAC;IAClD,MAAM,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAAwB,CAAC;IACvD,IAAI,CAAC,IAAI,CAAC,MAAM;QAAE,MAAM,IAAI,SAAS,CAAC,eAAe,CAAC,CAAC;IACvD,OAAO,IAAI,CAAC,MAAM,CAAC;AACrB,CAAC;AAcD,MAAM,CAAC,MAAM,mBAAmB,GAAiB;IAC/C,OAAO,EAAE,CAAC,MAAc,EAAE,EAAE,CAC1B,GAAG,aAAa,EAAE,iBAAiB,kBAAkB,CAAC,MAAM,CAAC,EAAE;IACjE,MAAM,EAAE,KAAK,EAAE,IAAY,EAAE,EAAE;QAC7B,MAAM,SAAS,GAAG,GAAG,aAAa,EAAE,sBAAsB,kBAAkB,CAAC,IAAI,CAAC,EAAE,CAAC;QACrF,OAAO,CAAC,GAAG,CAAC,wBAAwB,EAAE,SAAS,CAAC,CAAC;QACjD,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,SAAS,CAAC,CAAC;QACxC,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,OAAO,CAAC,KAAK,CAAC,qCAAqC,EAAE;gBACnD,MAAM,EAAE,QAAQ,CAAC,MAAM;gBACvB,GAAG,EAAE,SAAS;gBACd,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,GAAG,CAAC;aAC7B,CAAC,CAAC;YACH,MAAM,IAAI,KAAK,CAAC,wCAAwC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;QAC7E,CAAC;QACD,MAAM,IAAI,GAAG,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAGlC,CAAC;QACF,OAAO;YACL,MAAM,EAAE,IAAI,CAAC,OAAO;YACpB,KAAK,EAAE,IAAI,CAAC,KAAK;SAClB,CAAC;IACJ,CAAC;CACF,CAAC;AASF,uFAAuF;AACvF,8DAA8D;AAC9D,MAAM,CAAC,MAAM,cAAc,GAAoB;IAC7C,4DAA4D;IAC5D,GAAG,EAAE,KAAK,IAAI,EAAE,CAAC,IAAI;IACrB,4DAA4D;IAC5D,GAAG,EAAE,KAAK,IAAI,EAAE,CAAC,KAAK;IACtB,4DAA4D;IAC5D,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,EAAE,CAAC,CAAC;QAC9B,EAAE,EAAE,MAAM;QACV,OAAO,EAAE,CAAC;QACV,OAAO,EAAE,IAAI,IAAI,EAAE;QACnB,OAAO,EAAE,IAAI,IAAI,EAAE;KACpB,CAAC;CACH,CAAC;AACF,MAAM,gBAAgB,GAAiB,KAAK,IAAI,EAAE,GAAE,CAAC,CAAC;AAatD,MAAM,UAAU,gBAAgB;AAC9B,8DAA8D;AAC9D,YAA0C;AAC1C,8DAA8D;AAC9D,UAA4B,EAC5B,YAA2B,EAC3B,QAAuB;IAEvB,gFAAgF;IAChF,8DAA8D;IAC9D,IAAI,EAAgB,CAAC;IACrB,IAAI,gBAA8B,CAAC;IACnC,8DAA8D;IAC9D,MAAM,cAAc,GAAG,CAAC,CAAU,EAAqB,EAAE,CACvD,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,KAAK,IAAI,IAAI,QAAQ,IAAI,CAAC,IAAI,SAAS,IAAI,CAAC,CAAC;IAEzE,IAAI,YAAY,KAAK,SAAS,IAAI,cAAc,CAAC,YAAY,CAAC,EAAE,CAAC;QAC/D,EAAE,GAAG,aAAa,CAAC,YAAY,CAAC,CAAC;QACjC,gBAAgB,GAAG,YAAY,IAAI,mBAAmB,CAAC;IACzD,CAAC;SAAM,CAAC;QACN,EAAE,GAAG,YAAY,CAAC;QAClB,gBAAgB,GAAG,QAAQ,IAAI,mBAAmB,CAAC;IACrD,CAAC;IACD,MAAM,kBAAkB,GAAG,UAAU,IAAI,cAAc,CAAC;IACxD,MAAM,oBAAoB,GAAG,YAAY,IAAI,gBAAgB,CAAC;IAE9D,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAEhC,+FAA+F;IAC/F,MAAM,CAAC,IAAI,CAAC,cAAc,EAAE,KAAK,EAAE,GAAY,EAAE,GAAa,EAAE,EAAE;QAChE,IAAI,CAAC;YACH,MAAM,EAAE,IAAI,EAAE,GAAG,GAAG,CAAC,IAAyB,CAAC;YAC/C,IAAI,CAAC,IAAI,EAAE,CAAC;gBACV,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,cAAc,EAAE,CAAC,CAAC;gBAChD,OAAO;YACT,CAAC;YACD,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,gBAAgB,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YAC9D,IAAI,CAAC,KAAK,EAAE,CAAC;gBACX,MAAM,IAAI,KAAK,CAAC,sCAAsC,CAAC,CAAC;YAC1D,CAAC;YACD,GAAG,CAAC,MAAM,CAAC,YAAY,EAAE,KAAK,EAAE;gBAC9B,QAAQ,EAAE,IAAI;gBACd,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,YAAY;gBAC7C,QAAQ,EAAE,KAAK;gBACf,MAAM,EAAE,sBAAsB,GAAG,IAAI;gBACrC,IAAI,EAAE,GAAG;aACV,CAAC,CAAC;YACH,GAAG,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;QACtB,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,CAAC,KAAK,CAAC,4BAA4B,EAAE,GAAG,CAAC,CAAC;YACjD,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,uBAAuB,EAAE,CAAC,CAAC;QAC3D,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,uEAAuE;IACvE,MAAM,CAAC,GAAG,CAAC,aAAa,EAAE,KAAK,EAAE,GAAY,EAAE,GAAa,EAAE,EAAE;QAC9D,MAAM,KAAK,GAAG,GAAG,CAAC,OAAO,EAAE,UAAgC,CAAC;QAC5D,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,YAAY,EAAE,CAAC,CAAC;YAC9C,OAAO;QACT,CAAC;QACD,IAAI,CAAC;YACH,yCAAyC;YACzC,MAAM,WAAW,CAAC,KAAK,CAAC,CAAC;YACzB,kCAAkC;YAClC,GAAG,CAAC,MAAM,CAAC,YAAY,EAAE,KAAK,EAAE;gBAC9B,QAAQ,EAAE,IAAI;gBACd,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,YAAY;gBAC7C,QAAQ,EAAE,KAAK;gBACf,MAAM,EAAE,sBAAsB,GAAG,IAAI;gBACrC,IAAI,EAAE,GAAG;aACV,CAAC,CAAC;YACH,GAAG,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;QACtB,CAAC;QAAC,MAAM,CAAC;YACP,GAAG,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC;YAC9B,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,iBAAiB,EAAE,CAAC,CAAC;QACrD,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,6CAA6C;IAC7C,MAAM,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC,IAAa,EAAE,GAAa,EAAE,EAAE;QAC3D,GAAG,CAAC,WAAW,CAAC,YAAY,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC;QAC7C,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;IACzB,CAAC,CAAC,CAAC;IAEH,6DAA6D;IAC7D,MAAM,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC,GAAY,EAAE,GAAa,EAAE,EAAE;QACtD,MAAM,MAAM,GAAG,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAuB,CAAC;QACzD,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,gBAAgB,EAAE,CAAC,CAAC;YAClD,OAAO;QACT,CAAC;QACD,GAAG,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,gBAAgB,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IACtD,CAAC,CAAC,CAAC;IAEH,wCAAwC;IACxC,IAAI,gBAAgB,CAAC,cAAc,EAAE,CAAC;QACpC,gBAAgB,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;IAC1C,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
package/package.json
CHANGED
package/src/cli/scaffold.ts
CHANGED
|
@@ -109,8 +109,7 @@ export async function scaffoldProject(projectName: string): Promise<void> {
|
|
|
109
109
|
for (const [name, def] of Object.entries(BUILTIN_DEFS)) {
|
|
110
110
|
bootstrapCollections[name] = { indexes: (def as { indexes?: { fields: Record<string, 1 | -1>; unique?: boolean; ttl?: number }[] }).indexes };
|
|
111
111
|
}
|
|
112
|
-
// Template ships with
|
|
113
|
-
bootstrapCollections['user'] = { indexes: [{ fields: { email: 1 }, unique: true }] };
|
|
112
|
+
// Template ships with todo (no indexes). User data lives on ugly.bot.
|
|
114
113
|
bootstrapCollections['todo'] = {};
|
|
115
114
|
|
|
116
115
|
const migrationCode = generateBootstrapMigration(bootstrapCollections);
|
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.269";
|
package/src/server/Auth.ts
CHANGED
|
@@ -36,7 +36,7 @@ export interface AuthProvider {
|
|
|
36
36
|
// Returns a provider-issued `token` from ugly.bot OAuth.
|
|
37
37
|
verify(
|
|
38
38
|
code: string,
|
|
39
|
-
): Promise<{ userId: string;
|
|
39
|
+
): Promise<{ userId: string; token?: string }>;
|
|
40
40
|
// Called by client to know where to open the auth popup
|
|
41
41
|
authUrl(origin: string): string;
|
|
42
42
|
// Optional: custom routes to register on the Express app
|
|
@@ -61,14 +61,10 @@ export const uglyBotAuthProvider: AuthProvider = {
|
|
|
61
61
|
}
|
|
62
62
|
const data = (await response.json()) as {
|
|
63
63
|
user_id: string;
|
|
64
|
-
email?: string;
|
|
65
|
-
phone?: string;
|
|
66
64
|
token?: string;
|
|
67
65
|
};
|
|
68
66
|
return {
|
|
69
67
|
userId: data.user_id,
|
|
70
|
-
email: data.email,
|
|
71
|
-
phone: data.phone,
|
|
72
68
|
token: data.token,
|
|
73
69
|
};
|
|
74
70
|
},
|
|
@@ -145,15 +141,10 @@ export function createAuthRoutes(
|
|
|
145
141
|
res.status(400).json({ error: 'Missing code' });
|
|
146
142
|
return;
|
|
147
143
|
}
|
|
148
|
-
const { userId,
|
|
144
|
+
const { userId, token } = await resolvedProvider.verify(code);
|
|
149
145
|
if (!token) {
|
|
150
146
|
throw new Error('Auth provider did not return a token');
|
|
151
147
|
}
|
|
152
|
-
// Find or create user — app is responsible for the full user record
|
|
153
|
-
const existing = await resolvedUserHelper.get(db, userId);
|
|
154
|
-
if (!existing) {
|
|
155
|
-
await resolvedOnUserCreate(userId, { email, phone }, db);
|
|
156
|
-
}
|
|
157
148
|
res.cookie('auth_token', token, {
|
|
158
149
|
httpOnly: true,
|
|
159
150
|
secure: process.env.NODE_ENV === 'production',
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
createApp,
|
|
3
3
|
createEmailSender,
|
|
4
|
-
createUserHelper,
|
|
5
4
|
pgQuery,
|
|
6
5
|
type AppConfigurator,
|
|
7
6
|
type InboundEmail,
|
|
@@ -10,14 +9,13 @@ import {
|
|
|
10
9
|
import type { CronHandlers } from 'ugly-app/shared';
|
|
11
10
|
import { dbDefaults } from 'ugly-app/shared';
|
|
12
11
|
import { requests } from '../shared/api';
|
|
13
|
-
import type { Todo
|
|
12
|
+
import type { Todo } from '../shared/collections';
|
|
14
13
|
import { collections } from '../shared/collections';
|
|
15
14
|
import { cronTasks } from '../shared/cron';
|
|
16
15
|
import { experiments } from '../shared/experiments';
|
|
17
16
|
import { pages } from '../shared/pages';
|
|
18
17
|
import { servePushTestPage } from './push-test-page';
|
|
19
18
|
|
|
20
|
-
const userHelper = createUserHelper<User>(collections.user);
|
|
21
19
|
// eslint-disable-next-line @typescript-eslint/dot-notation
|
|
22
20
|
const email = createEmailSender(process.env['NATS_PREFIX'] ?? 'myapp');
|
|
23
21
|
|
|
@@ -67,31 +65,23 @@ const app = createApp(
|
|
|
67
65
|
throw new Error(msg);
|
|
68
66
|
},
|
|
69
67
|
|
|
70
|
-
sendTestEmail: async (_userId, {
|
|
71
|
-
|
|
72
|
-
if (!user?.email) throw new Error('User not found or has no email');
|
|
73
|
-
await email.send({ to: user.email, subject, html, ...(id != null ? { id } : {}) });
|
|
68
|
+
sendTestEmail: async (_userId, { to, subject, html, id }) => {
|
|
69
|
+
await email.send({ to, subject, html, ...(id != null ? { id } : {}) });
|
|
74
70
|
return { ok: true };
|
|
75
71
|
},
|
|
76
72
|
} satisfies RequestHandlers<typeof requests>,
|
|
77
73
|
collections,
|
|
78
74
|
(configurator: AppConfigurator) => {
|
|
79
75
|
configurator.setPages({ pages });
|
|
80
|
-
configurator.setUserHelper(userHelper);
|
|
81
76
|
configurator.setExperiments(experiments);
|
|
82
77
|
configurator.setCronTasks(cronTasks, cronHandlers);
|
|
83
78
|
configurator.setOnEmail(async (inbound: InboundEmail) => {
|
|
84
|
-
// TODO: handle inbound email (e.g. store in DB)
|
|
85
79
|
await Promise.resolve();
|
|
86
80
|
console.log('[Email] Received:', { from: inbound.from, id: inbound.id, subject: inbound.subject });
|
|
87
81
|
});
|
|
88
82
|
configurator.registerRoutes((router) => {
|
|
89
83
|
router.get('/push-test', servePushTestPage);
|
|
90
84
|
});
|
|
91
|
-
configurator.setOnUserCreate(async (userId, info, db) => {
|
|
92
|
-
// eslint-disable-next-line @typescript-eslint/no-unsafe-argument
|
|
93
|
-
await userHelper.set(db, { _id: userId, ...dbDefaults(), ...info });
|
|
94
|
-
});
|
|
95
85
|
},
|
|
96
86
|
);
|
|
97
87
|
|
package/templates/shared/api.ts
CHANGED
|
@@ -32,7 +32,7 @@ export const requests = defineRequests({
|
|
|
32
32
|
// Email test — send an email via the app's email sender
|
|
33
33
|
sendTestEmail: authReq({
|
|
34
34
|
input: z.object({
|
|
35
|
-
|
|
35
|
+
to: z.string().email(),
|
|
36
36
|
subject: z.string().min(1).max(200),
|
|
37
37
|
html: z.string().min(1),
|
|
38
38
|
id: z.string().max(100).optional(),
|
|
@@ -1,17 +1,8 @@
|
|
|
1
1
|
import { z } from 'zod';
|
|
2
2
|
import type { InferDocType } from 'ugly-app/shared';
|
|
3
|
-
import { defineCollections
|
|
3
|
+
import { defineCollections } from 'ugly-app/shared';
|
|
4
4
|
|
|
5
5
|
// ─── Schemas & Types ─────────────────────────────────────────────────────────
|
|
6
|
-
// Define each collection's Zod schema, then derive the type with InferDocType.
|
|
7
|
-
// The schema is the single source of truth — never define a separate interface.
|
|
8
|
-
// UserBaseSchema provides { email?, phone? } from auth — extend it with your fields.
|
|
9
|
-
|
|
10
|
-
export const UserSchema = UserBaseSchema.extend({
|
|
11
|
-
// name: z.string().optional(),
|
|
12
|
-
// avatarUrl: z.string().optional(),
|
|
13
|
-
});
|
|
14
|
-
export type User = InferDocType<typeof UserSchema>;
|
|
15
6
|
|
|
16
7
|
export const TodoSchema = z.object({
|
|
17
8
|
userId: z.string(),
|
|
@@ -32,29 +23,10 @@ export type Todo = InferDocType<typeof TodoSchema>;
|
|
|
32
23
|
//
|
|
33
24
|
// After adding a collection, run: npm run db:schema-gen && npm run db:migrate
|
|
34
25
|
export const collections = defineCollections({
|
|
35
|
-
user: {
|
|
36
|
-
schema: UserSchema,
|
|
37
|
-
meta: { cache: true, trackable: false, public: false, cascadeFrom: null },
|
|
38
|
-
},
|
|
39
26
|
todo: {
|
|
40
27
|
schema: TodoSchema,
|
|
41
28
|
meta: { cache: false, trackable: true, public: false, cascadeFrom: null, trackKeys: ['userId'] },
|
|
42
29
|
},
|
|
43
|
-
// Example: a chat room + scoped message subscription
|
|
44
|
-
// chat: {
|
|
45
|
-
// schema: ChatSchema,
|
|
46
|
-
// meta: { cache: false, trackable: true, public: true, cascadeFrom: null },
|
|
47
|
-
// },
|
|
48
|
-
// message: {
|
|
49
|
-
// schema: MessageSchema,
|
|
50
|
-
// meta: {
|
|
51
|
-
// cache: false,
|
|
52
|
-
// trackable: true,
|
|
53
|
-
// public: true,
|
|
54
|
-
// cascadeFrom: 'chat', // deleting a chat cascades to its messages
|
|
55
|
-
// trackKeys: ['chatId'], // enables scoped subscriptions by chatId
|
|
56
|
-
// },
|
|
57
|
-
// },
|
|
58
30
|
});
|
|
59
31
|
|
|
60
32
|
export type AppCollections = typeof collections;
|