@downcity/services 0.1.8 → 0.1.17
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/bin/accounts/index.d.ts +654 -2
- package/bin/accounts/index.d.ts.map +1 -1
- package/bin/accounts/index.js +34 -30
- package/bin/accounts/index.js.map +1 -1
- package/bin/accounts/schema.d.ts +680 -4
- package/bin/accounts/schema.d.ts.map +1 -1
- package/bin/accounts/schema.js +106 -2
- package/bin/accounts/schema.js.map +1 -1
- package/bin/balance/service.d.ts +1 -1
- package/bin/balance/service.js +1 -1
- package/bin/usage/index.d.ts +2 -2
- package/bin/usage/index.js +8 -8
- package/bin/usage/index.js.map +1 -1
- package/package.json +8 -8
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/accounts/schema.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH;;GAEG;AACH,eAAO,MAAM,kBAAkB,kBAAkB,CAAC;AAElD;;GAEG;AACH,eAAO,MAAM,0BAA0B,kCAAkC,CAAC;AAE1E;;GAEG;AACH,MAAM,WAAW,cAAe,SAAQ,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAC7D;;OAEG;IACH,OAAO,EAAE,MAAM,CAAC;IAEhB;;OAEG;IACH,KAAK,EAAE,MAAM,CAAC;IAEd;;OAEG;IACH,YAAY,EAAE,MAAM,CAAC;IAErB;;OAEG;IACH,UAAU,EAAE,MAAM,CAAC;IAEnB;;;;OAIG;IACH,GAAG,EAAE,MAAM,CAAC;IAEZ;;OAEG;IACH,UAAU,EAAE,MAAM,CAAC;IAEnB;;OAEG;IACH,UAAU,EAAE,MAAM,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,qBAAsB,SAAQ,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IACpE;;OAEG;IACH,KAAK,EAAE,MAAM,CAAC;IAEd;;OAEG;IACH,
|
|
1
|
+
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/accounts/schema.ts"],"names":[],"mappings":"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"}
|
package/bin/accounts/schema.js
CHANGED
|
@@ -14,6 +14,22 @@ export const USER_PROFILE_TABLE = "auth_profiles";
|
|
|
14
14
|
* Accounts 服务 OAuth state 表名。
|
|
15
15
|
*/
|
|
16
16
|
export const ACCOUNTS_OAUTH_STATE_TABLE = "service_accounts_oauth_states";
|
|
17
|
+
/**
|
|
18
|
+
* better-auth 用户表名。
|
|
19
|
+
*/
|
|
20
|
+
export const AUTH_USER_TABLE = "auth_users";
|
|
21
|
+
/**
|
|
22
|
+
* better-auth account 表名。
|
|
23
|
+
*/
|
|
24
|
+
export const AUTH_ACCOUNT_TABLE = "auth_accounts";
|
|
25
|
+
/**
|
|
26
|
+
* better-auth session 表名。
|
|
27
|
+
*/
|
|
28
|
+
export const AUTH_SESSION_TABLE = "auth_sessions";
|
|
29
|
+
/**
|
|
30
|
+
* better-auth verification 表名。
|
|
31
|
+
*/
|
|
32
|
+
export const AUTH_VERIFICATION_TABLE = "auth_verifications";
|
|
17
33
|
/**
|
|
18
34
|
* 用户资料表。
|
|
19
35
|
*/
|
|
@@ -53,9 +69,9 @@ export const accountsOAuthStates = sqliteTable(ACCOUNTS_OAUTH_STATE_TABLE, {
|
|
|
53
69
|
*/
|
|
54
70
|
state: text("state").primaryKey(),
|
|
55
71
|
/**
|
|
56
|
-
* 登录成功后要签发到哪个
|
|
72
|
+
* 登录成功后要签发到哪个 town。
|
|
57
73
|
*/
|
|
58
|
-
|
|
74
|
+
town_id: text("town_id").notNull(),
|
|
59
75
|
/**
|
|
60
76
|
* provider 标识。
|
|
61
77
|
*/
|
|
@@ -69,4 +85,92 @@ export const accountsOAuthStates = sqliteTable(ACCOUNTS_OAUTH_STATE_TABLE, {
|
|
|
69
85
|
*/
|
|
70
86
|
created_at: integer("created_at").notNull(),
|
|
71
87
|
});
|
|
88
|
+
/**
|
|
89
|
+
* better-auth 用户表。
|
|
90
|
+
*/
|
|
91
|
+
export const authUsers = sqliteTable(AUTH_USER_TABLE, {
|
|
92
|
+
/** 用户 ID。 */
|
|
93
|
+
id: text("id").primaryKey(),
|
|
94
|
+
/** 展示名。 */
|
|
95
|
+
name: text("name").notNull(),
|
|
96
|
+
/** 主邮箱。 */
|
|
97
|
+
email: text("email").notNull().unique(),
|
|
98
|
+
/** 邮箱是否已验证。 */
|
|
99
|
+
emailVerified: integer("emailVerified", { mode: "boolean" }).notNull().default(false),
|
|
100
|
+
/** 头像 URL。 */
|
|
101
|
+
image: text("image"),
|
|
102
|
+
/** 创建时间。 */
|
|
103
|
+
createdAt: integer("createdAt", { mode: "timestamp_ms" }).notNull(),
|
|
104
|
+
/** 更新时间。 */
|
|
105
|
+
updatedAt: integer("updatedAt", { mode: "timestamp_ms" }).notNull(),
|
|
106
|
+
});
|
|
107
|
+
/**
|
|
108
|
+
* better-auth session 表。
|
|
109
|
+
*/
|
|
110
|
+
export const authSessions = sqliteTable(AUTH_SESSION_TABLE, {
|
|
111
|
+
/** session ID。 */
|
|
112
|
+
id: text("id").primaryKey(),
|
|
113
|
+
/** 过期时间。 */
|
|
114
|
+
expiresAt: integer("expiresAt", { mode: "timestamp_ms" }).notNull(),
|
|
115
|
+
/** session token。 */
|
|
116
|
+
token: text("token").notNull().unique(),
|
|
117
|
+
/** 创建时间。 */
|
|
118
|
+
createdAt: integer("createdAt", { mode: "timestamp_ms" }).notNull(),
|
|
119
|
+
/** 更新时间。 */
|
|
120
|
+
updatedAt: integer("updatedAt", { mode: "timestamp_ms" }).notNull(),
|
|
121
|
+
/** IP 地址。 */
|
|
122
|
+
ipAddress: text("ipAddress"),
|
|
123
|
+
/** User-Agent。 */
|
|
124
|
+
userAgent: text("userAgent"),
|
|
125
|
+
/** 绑定用户 ID。 */
|
|
126
|
+
userId: text("userId").notNull(),
|
|
127
|
+
});
|
|
128
|
+
/**
|
|
129
|
+
* better-auth account 表。
|
|
130
|
+
*/
|
|
131
|
+
export const authAccounts = sqliteTable(AUTH_ACCOUNT_TABLE, {
|
|
132
|
+
/** account ID。 */
|
|
133
|
+
id: text("id").primaryKey(),
|
|
134
|
+
/** 第三方账号 ID 或 credential account ID。 */
|
|
135
|
+
accountId: text("accountId").notNull(),
|
|
136
|
+
/** provider 标识。 */
|
|
137
|
+
providerId: text("providerId").notNull(),
|
|
138
|
+
/** 绑定用户 ID。 */
|
|
139
|
+
userId: text("userId").notNull(),
|
|
140
|
+
/** OAuth access token。 */
|
|
141
|
+
accessToken: text("accessToken"),
|
|
142
|
+
/** OAuth refresh token。 */
|
|
143
|
+
refreshToken: text("refreshToken"),
|
|
144
|
+
/** OAuth id token。 */
|
|
145
|
+
idToken: text("idToken"),
|
|
146
|
+
/** access token 过期时间。 */
|
|
147
|
+
accessTokenExpiresAt: integer("accessTokenExpiresAt", { mode: "timestamp_ms" }),
|
|
148
|
+
/** refresh token 过期时间。 */
|
|
149
|
+
refreshTokenExpiresAt: integer("refreshTokenExpiresAt", { mode: "timestamp_ms" }),
|
|
150
|
+
/** OAuth scope。 */
|
|
151
|
+
scope: text("scope"),
|
|
152
|
+
/** credential provider 的密码哈希。 */
|
|
153
|
+
password: text("password"),
|
|
154
|
+
/** 创建时间。 */
|
|
155
|
+
createdAt: integer("createdAt", { mode: "timestamp_ms" }).notNull(),
|
|
156
|
+
/** 更新时间。 */
|
|
157
|
+
updatedAt: integer("updatedAt", { mode: "timestamp_ms" }).notNull(),
|
|
158
|
+
});
|
|
159
|
+
/**
|
|
160
|
+
* better-auth verification 表。
|
|
161
|
+
*/
|
|
162
|
+
export const authVerifications = sqliteTable(AUTH_VERIFICATION_TABLE, {
|
|
163
|
+
/** verification ID。 */
|
|
164
|
+
id: text("id").primaryKey(),
|
|
165
|
+
/** verification 标识。 */
|
|
166
|
+
identifier: text("identifier").notNull(),
|
|
167
|
+
/** verification 值。 */
|
|
168
|
+
value: text("value").notNull(),
|
|
169
|
+
/** 过期时间。 */
|
|
170
|
+
expiresAt: integer("expiresAt", { mode: "timestamp_ms" }).notNull(),
|
|
171
|
+
/** 创建时间。 */
|
|
172
|
+
createdAt: integer("createdAt", { mode: "timestamp_ms" }).notNull(),
|
|
173
|
+
/** 更新时间。 */
|
|
174
|
+
updatedAt: integer("updatedAt", { mode: "timestamp_ms" }).notNull(),
|
|
175
|
+
});
|
|
72
176
|
//# sourceMappingURL=schema.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/accounts/schema.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,yBAAyB,CAAC;AAErE;;GAEG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,eAAe,CAAC;AAElD;;GAEG;AACH,MAAM,CAAC,MAAM,0BAA0B,GAAG,+BAA+B,CAAC;
|
|
1
|
+
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/accounts/schema.ts"],"names":[],"mappings":"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"}
|
package/bin/balance/service.d.ts
CHANGED
package/bin/balance/service.js
CHANGED
package/bin/usage/index.d.ts
CHANGED
|
@@ -37,8 +37,8 @@ export declare const usageEvents: import("drizzle-orm/sqlite-core").SQLiteTableW
|
|
|
37
37
|
}, {}, {
|
|
38
38
|
length: number | undefined;
|
|
39
39
|
}>;
|
|
40
|
-
|
|
41
|
-
name: "
|
|
40
|
+
town_id: import("drizzle-orm/sqlite-core").SQLiteColumn<{
|
|
41
|
+
name: "town_id";
|
|
42
42
|
tableName: "service_usage_events";
|
|
43
43
|
dataType: "string";
|
|
44
44
|
columnType: "SQLiteText";
|
package/bin/usage/index.js
CHANGED
|
@@ -8,7 +8,7 @@ import { sqliteTable, text } from "drizzle-orm/sqlite-core";
|
|
|
8
8
|
/** Usage 事件表 */
|
|
9
9
|
export const usageEvents = sqliteTable("service_usage_events", {
|
|
10
10
|
event_id: text("event_id").primaryKey(),
|
|
11
|
-
|
|
11
|
+
town_id: text("town_id").notNull(),
|
|
12
12
|
user_id: text("user_id").notNull(),
|
|
13
13
|
service: text("service").notNull(),
|
|
14
14
|
model_id: text("model_id").notNull(),
|
|
@@ -67,7 +67,7 @@ export function usageService(options = {}) {
|
|
|
67
67
|
return requestCtx.jsonResponse({
|
|
68
68
|
items: await events.select({
|
|
69
69
|
user_id: requestCtx.user?.user_id ?? "",
|
|
70
|
-
|
|
70
|
+
town_id: requestCtx.town?.town_id ?? "",
|
|
71
71
|
}),
|
|
72
72
|
});
|
|
73
73
|
},
|
|
@@ -78,16 +78,16 @@ export function usageService(options = {}) {
|
|
|
78
78
|
/**
|
|
79
79
|
* 只记录真实用户侧调用。
|
|
80
80
|
*
|
|
81
|
-
* 管理端操作没有 user/
|
|
81
|
+
* 管理端操作没有 user/town 上下文,usage 服务自己的查询也不应反过来
|
|
82
82
|
* 产生 usage 事件,否则统计接口会污染自身结果。
|
|
83
83
|
*/
|
|
84
84
|
function shouldRecordUsage(ctx) {
|
|
85
|
-
return Boolean(ctx.user?.user_id && ctx.
|
|
85
|
+
return Boolean(ctx.user?.user_id && ctx.town?.town_id && ctx.service?.id !== "usage");
|
|
86
86
|
}
|
|
87
87
|
function createUsageEvent(ctx, status) {
|
|
88
88
|
return {
|
|
89
89
|
event_id: `usage_${randomId()}`,
|
|
90
|
-
|
|
90
|
+
town_id: ctx.town?.town_id ?? "",
|
|
91
91
|
user_id: ctx.user?.user_id ?? "",
|
|
92
92
|
service: ctx.service?.id ?? "",
|
|
93
93
|
model_id: ctx.variant?.id ?? "",
|
|
@@ -104,12 +104,12 @@ function createUsageEvent(ctx, status) {
|
|
|
104
104
|
function summarizeUsage(rows) {
|
|
105
105
|
const byKey = new Map();
|
|
106
106
|
for (const row of rows) {
|
|
107
|
-
const key = `${row.
|
|
108
|
-
const current = byKey.get(key) ?? {
|
|
107
|
+
const key = `${row.town_id}\u0000${row.service}\u0000${row.status}`;
|
|
108
|
+
const current = byKey.get(key) ?? { town_id: row.town_id, service: row.service, status: row.status, count: 0 };
|
|
109
109
|
current.count += 1;
|
|
110
110
|
byKey.set(key, current);
|
|
111
111
|
}
|
|
112
|
-
return [...byKey.values()].sort((a, b) => `${a.
|
|
112
|
+
return [...byKey.values()].sort((a, b) => `${a.town_id}:${a.service}:${a.status}`.localeCompare(`${b.town_id}:${b.service}:${b.status}`));
|
|
113
113
|
}
|
|
114
114
|
/** 生成随机 ID(兼容 Node 和 Workers) */
|
|
115
115
|
function randomId() {
|
package/bin/usage/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/usage/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,yBAAyB,CAAC;AAY5D,gBAAgB;AAChB,MAAM,CAAC,MAAM,WAAW,GAAG,WAAW,CAAC,sBAAsB,EAAE;IAC7D,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC,UAAU,EAAE;IACvC,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/usage/index.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@downcity/services",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.17",
|
|
4
4
|
"description": "Downcity public services package for accounts, balance, usage, and Stripe payment flows.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./bin/index.js",
|
|
@@ -40,18 +40,18 @@
|
|
|
40
40
|
},
|
|
41
41
|
"license": "MIT",
|
|
42
42
|
"devDependencies": {
|
|
43
|
-
"@types/better-sqlite3": "^7.6.
|
|
44
|
-
"@types/node": "^
|
|
45
|
-
"better-sqlite3": "^12.
|
|
46
|
-
"typescript": "^
|
|
43
|
+
"@types/better-sqlite3": "^7.6.13",
|
|
44
|
+
"@types/node": "^25.9.1",
|
|
45
|
+
"better-sqlite3": "^12.10.0",
|
|
46
|
+
"typescript": "^6.0.3"
|
|
47
47
|
},
|
|
48
48
|
"dependencies": {
|
|
49
|
-
"better-auth": "^1.6.
|
|
49
|
+
"better-auth": "^1.6.12",
|
|
50
50
|
"drizzle-orm": "^0.45.2",
|
|
51
|
-
"@downcity/city": "0.2.
|
|
51
|
+
"@downcity/city": "0.2.25"
|
|
52
52
|
},
|
|
53
53
|
"scripts": {
|
|
54
|
-
"build": "tsc",
|
|
54
|
+
"build": "rm -rf bin tsconfig.tsbuildinfo && tsc",
|
|
55
55
|
"dev": "tsc --watch",
|
|
56
56
|
"typecheck": "tsc --noEmit && tsc -p tsconfig.test.json",
|
|
57
57
|
"test": "tsc && tsc -p tsconfig.test.json && node --test test/**/*.test.mjs",
|