@downcity/services 0.1.108 → 0.1.114
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +16 -9
- package/bin/accounts/helpers.d.ts +18 -0
- package/bin/accounts/helpers.d.ts.map +1 -0
- package/bin/accounts/helpers.js +35 -0
- package/bin/accounts/helpers.js.map +1 -0
- package/bin/accounts/index.d.ts +19 -8
- package/bin/accounts/index.d.ts.map +1 -1
- package/bin/accounts/index.js +74 -55
- package/bin/accounts/index.js.map +1 -1
- package/bin/accounts/oauth.d.ts +1 -1
- package/bin/accounts/oauth.d.ts.map +1 -1
- package/bin/accounts/oauth.js +4 -4
- package/bin/accounts/oauth.js.map +1 -1
- package/bin/accounts/providers/email.d.ts +13 -0
- package/bin/accounts/providers/email.d.ts.map +1 -0
- package/bin/accounts/providers/email.js +33 -0
- package/bin/accounts/providers/email.js.map +1 -0
- package/bin/accounts/providers/index.d.ts +10 -0
- package/bin/accounts/providers/index.d.ts.map +1 -0
- package/bin/accounts/providers/index.js +10 -0
- package/bin/accounts/providers/index.js.map +1 -0
- package/bin/accounts/providers/oauth.d.ts +26 -0
- package/bin/accounts/providers/oauth.d.ts.map +1 -0
- package/bin/accounts/providers/oauth.js +75 -0
- package/bin/accounts/providers/oauth.js.map +1 -0
- package/bin/accounts/types.d.ts +176 -0
- package/bin/accounts/types.d.ts.map +1 -0
- package/bin/accounts/types.js +9 -0
- package/bin/accounts/types.js.map +1 -0
- package/bin/balance/credits.d.ts +42 -0
- package/bin/balance/credits.d.ts.map +1 -0
- package/bin/balance/credits.js +67 -0
- package/bin/balance/credits.js.map +1 -0
- package/bin/balance/index.d.ts +2 -2
- package/bin/balance/index.d.ts.map +1 -1
- package/bin/balance/index.js +1 -1
- package/bin/balance/index.js.map +1 -1
- package/bin/balance/routes.d.ts.map +1 -1
- package/bin/balance/routes.js +5 -5
- package/bin/balance/routes.js.map +1 -1
- package/bin/balance/schema.d.ts +12 -12
- package/bin/balance/schema.js +12 -12
- package/bin/balance/schema.js.map +1 -1
- package/bin/balance/service.d.ts +23 -23
- package/bin/balance/service.d.ts.map +1 -1
- package/bin/balance/service.js +63 -67
- package/bin/balance/service.js.map +1 -1
- package/bin/balance/types.d.ts +31 -45
- package/bin/balance/types.d.ts.map +1 -1
- package/bin/balance/types.js +3 -4
- package/bin/balance/types.js.map +1 -1
- package/bin/balance/utils.d.ts.map +1 -1
- package/bin/balance/utils.js +21 -22
- package/bin/balance/utils.js.map +1 -1
- package/bin/index.d.ts +5 -3
- package/bin/index.d.ts.map +1 -1
- package/bin/index.js +3 -2
- package/bin/index.js.map +1 -1
- package/bin/payment/providers/creem/client.js +5 -5
- package/bin/payment/providers/creem/client.js.map +1 -1
- package/bin/payment/providers/dodo/client.js +5 -5
- package/bin/payment/providers/dodo/client.js.map +1 -1
- package/bin/payment/providers/stripe/client.js +3 -3
- package/bin/payment/providers/stripe/client.js.map +1 -1
- package/bin/payment/providers/waffo/client.js +5 -5
- package/bin/payment/providers/waffo/client.js.map +1 -1
- package/bin/payment/routes.js +1 -1
- package/bin/payment/routes.js.map +1 -1
- package/bin/payment/schema.d.ts +2 -2
- package/bin/payment/schema.js +1 -1
- package/bin/payment/schema.js.map +1 -1
- package/bin/payment/service.d.ts +2 -2
- package/bin/payment/types.d.ts +5 -5
- package/bin/payment/types.d.ts.map +1 -1
- package/bin/types/Amount.d.ts +8 -12
- package/bin/types/Amount.d.ts.map +1 -1
- package/bin/types/Amount.js +7 -7
- package/bin/types/Amount.js.map +1 -1
- package/package.json +2 -2
- package/bin/balance/amount.d.ts +0 -53
- package/bin/balance/amount.d.ts.map +0 -1
- package/bin/balance/amount.js +0 -103
- package/bin/balance/amount.js.map +0 -1
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Email accounts provider 工厂。
|
|
3
|
+
*
|
|
4
|
+
* 关键说明(中文)
|
|
5
|
+
* - email 只是 AccountsService 的一个 provider。
|
|
6
|
+
* - 是否可用由调用方传入的发送能力和可选 enabled 判断决定。
|
|
7
|
+
*/
|
|
8
|
+
/**
|
|
9
|
+
* 创建 Email accounts provider。
|
|
10
|
+
*/
|
|
11
|
+
export function emailAccountsProvider(options) {
|
|
12
|
+
const label = options.label?.trim() || "Email";
|
|
13
|
+
return {
|
|
14
|
+
id: "email",
|
|
15
|
+
label,
|
|
16
|
+
type: "password",
|
|
17
|
+
env: options.env ?? [],
|
|
18
|
+
method(ctx) {
|
|
19
|
+
const enabled = options.enabled ? options.enabled(ctx) : true;
|
|
20
|
+
return {
|
|
21
|
+
id: "email",
|
|
22
|
+
type: "password",
|
|
23
|
+
enabled,
|
|
24
|
+
label,
|
|
25
|
+
login_enabled: enabled,
|
|
26
|
+
register_enabled: enabled,
|
|
27
|
+
reason: enabled ? undefined : "not_configured",
|
|
28
|
+
};
|
|
29
|
+
},
|
|
30
|
+
send_email: options.send_email,
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=email.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"email.js","sourceRoot":"","sources":["../../../src/accounts/providers/email.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH;;GAEG;AACH,MAAM,UAAU,qBAAqB,CAAC,OAAqC;IACzE,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,OAAO,CAAC;IAC/C,OAAO;QACL,EAAE,EAAE,OAAO;QACX,KAAK;QACL,IAAI,EAAE,UAAU;QAChB,GAAG,EAAE,OAAO,CAAC,GAAG,IAAI,EAAE;QACtB,MAAM,CAAC,GAAG;YACR,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;YAC9D,OAAO;gBACL,EAAE,EAAE,OAAO;gBACX,IAAI,EAAE,UAAU;gBAChB,OAAO;gBACP,KAAK;gBACL,aAAa,EAAE,OAAO;gBACtB,gBAAgB,EAAE,OAAO;gBACzB,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,gBAAgB;aAC/C,CAAC;QACJ,CAAC;QACD,UAAU,EAAE,OAAO,CAAC,UAAU;KAC/B,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Accounts provider 工厂统一入口。
|
|
3
|
+
*
|
|
4
|
+
* 关键说明(中文)
|
|
5
|
+
* - Email / GitHub / Google / WeChat 都只是 AccountsService 的 provider。
|
|
6
|
+
* - AccountsService 统一负责表、better-auth、token 签发与路由。
|
|
7
|
+
*/
|
|
8
|
+
export { emailAccountsProvider } from "./email.js";
|
|
9
|
+
export { githubAccountsProvider, googleAccountsProvider, oauthAccountsProvider, wechatAccountsProvider, } from "./oauth.js";
|
|
10
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/accounts/providers/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AACnD,OAAO,EACL,sBAAsB,EACtB,sBAAsB,EACtB,qBAAqB,EACrB,sBAAsB,GACvB,MAAM,YAAY,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Accounts provider 工厂统一入口。
|
|
3
|
+
*
|
|
4
|
+
* 关键说明(中文)
|
|
5
|
+
* - Email / GitHub / Google / WeChat 都只是 AccountsService 的 provider。
|
|
6
|
+
* - AccountsService 统一负责表、better-auth、token 签发与路由。
|
|
7
|
+
*/
|
|
8
|
+
export { emailAccountsProvider } from "./email.js";
|
|
9
|
+
export { githubAccountsProvider, googleAccountsProvider, oauthAccountsProvider, wechatAccountsProvider, } from "./oauth.js";
|
|
10
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/accounts/providers/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AACnD,OAAO,EACL,sBAAsB,EACtB,sBAAsB,EACtB,qBAAqB,EACrB,sBAAsB,GACvB,MAAM,YAAY,CAAC"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* OAuth accounts provider 工厂。
|
|
3
|
+
*
|
|
4
|
+
* 关键说明(中文)
|
|
5
|
+
* - GitHub / Google / WeChat 都只是 AccountsService 的 provider。
|
|
6
|
+
* - provider 只声明 env 与 OAuth 配置读取逻辑,回调和用户落库由 AccountsService 统一处理。
|
|
7
|
+
*/
|
|
8
|
+
import { type OAuthProviderId } from "../oauth.js";
|
|
9
|
+
import type { AccountsOAuthProvider, OAuthAccountsProviderOptions } from "../types.js";
|
|
10
|
+
/**
|
|
11
|
+
* 创建 OAuth accounts provider。
|
|
12
|
+
*/
|
|
13
|
+
export declare function oauthAccountsProvider(id: OAuthProviderId, options?: OAuthAccountsProviderOptions): AccountsOAuthProvider;
|
|
14
|
+
/**
|
|
15
|
+
* 创建 GitHub accounts provider。
|
|
16
|
+
*/
|
|
17
|
+
export declare function githubAccountsProvider(options?: OAuthAccountsProviderOptions): AccountsOAuthProvider;
|
|
18
|
+
/**
|
|
19
|
+
* 创建 Google accounts provider。
|
|
20
|
+
*/
|
|
21
|
+
export declare function googleAccountsProvider(options?: OAuthAccountsProviderOptions): AccountsOAuthProvider;
|
|
22
|
+
/**
|
|
23
|
+
* 创建 WeChat accounts provider。
|
|
24
|
+
*/
|
|
25
|
+
export declare function wechatAccountsProvider(options?: OAuthAccountsProviderOptions): AccountsOAuthProvider;
|
|
26
|
+
//# sourceMappingURL=oauth.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"oauth.d.ts","sourceRoot":"","sources":["../../../src/accounts/providers/oauth.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAA2B,KAAK,eAAe,EAAE,MAAM,aAAa,CAAC;AAC5E,OAAO,KAAK,EAAE,qBAAqB,EAAE,4BAA4B,EAAE,MAAM,aAAa,CAAC;AAuBvF;;GAEG;AACH,wBAAgB,qBAAqB,CACnC,EAAE,EAAE,eAAe,EACnB,OAAO,GAAE,4BAAiC,GACzC,qBAAqB,CAiCvB;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,OAAO,GAAE,4BAAiC,GAAG,qBAAqB,CAExG;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,OAAO,GAAE,4BAAiC,GAAG,qBAAqB,CAExG;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,OAAO,GAAE,4BAAiC,GAAG,qBAAqB,CAExG"}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* OAuth accounts provider 工厂。
|
|
3
|
+
*
|
|
4
|
+
* 关键说明(中文)
|
|
5
|
+
* - GitHub / Google / WeChat 都只是 AccountsService 的 provider。
|
|
6
|
+
* - provider 只声明 env 与 OAuth 配置读取逻辑,回调和用户落库由 AccountsService 统一处理。
|
|
7
|
+
*/
|
|
8
|
+
import { readOAuthProviderConfig } from "../oauth.js";
|
|
9
|
+
const OAUTH_LABELS = {
|
|
10
|
+
github: "GitHub",
|
|
11
|
+
google: "Google",
|
|
12
|
+
wechat: "WeChat",
|
|
13
|
+
};
|
|
14
|
+
const OAUTH_ENV_KEYS = {
|
|
15
|
+
github: {
|
|
16
|
+
client_id: "GITHUB_CLIENT_ID",
|
|
17
|
+
client_secret: "GITHUB_CLIENT_SECRET",
|
|
18
|
+
},
|
|
19
|
+
google: {
|
|
20
|
+
client_id: "GOOGLE_CLIENT_ID",
|
|
21
|
+
client_secret: "GOOGLE_CLIENT_SECRET",
|
|
22
|
+
},
|
|
23
|
+
wechat: {
|
|
24
|
+
client_id: "WECHAT_CLIENT_ID",
|
|
25
|
+
client_secret: "WECHAT_CLIENT_SECRET",
|
|
26
|
+
},
|
|
27
|
+
};
|
|
28
|
+
/**
|
|
29
|
+
* 创建 OAuth accounts provider。
|
|
30
|
+
*/
|
|
31
|
+
export function oauthAccountsProvider(id, options = {}) {
|
|
32
|
+
const label = options.label?.trim() || OAUTH_LABELS[id];
|
|
33
|
+
const keys = OAUTH_ENV_KEYS[id];
|
|
34
|
+
return {
|
|
35
|
+
id,
|
|
36
|
+
label,
|
|
37
|
+
type: "oauth",
|
|
38
|
+
env: [
|
|
39
|
+
{ key: keys.client_id, description: `${label} OAuth Client ID`, required: true },
|
|
40
|
+
{ key: keys.client_secret, description: `${label} OAuth Client Secret`, required: true },
|
|
41
|
+
],
|
|
42
|
+
method(ctx) {
|
|
43
|
+
const enabled = Boolean(readOAuthProviderConfig(id, options.client_id ?? ctx.env(keys.client_id), options.client_secret ?? ctx.env(keys.client_secret)));
|
|
44
|
+
return {
|
|
45
|
+
id,
|
|
46
|
+
type: "oauth",
|
|
47
|
+
enabled,
|
|
48
|
+
label,
|
|
49
|
+
reason: enabled ? undefined : "not_configured",
|
|
50
|
+
};
|
|
51
|
+
},
|
|
52
|
+
config(ctx) {
|
|
53
|
+
return readOAuthProviderConfig(id, options.client_id ?? ctx.env(keys.client_id), options.client_secret ?? ctx.env(keys.client_secret));
|
|
54
|
+
},
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* 创建 GitHub accounts provider。
|
|
59
|
+
*/
|
|
60
|
+
export function githubAccountsProvider(options = {}) {
|
|
61
|
+
return oauthAccountsProvider("github", options);
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* 创建 Google accounts provider。
|
|
65
|
+
*/
|
|
66
|
+
export function googleAccountsProvider(options = {}) {
|
|
67
|
+
return oauthAccountsProvider("google", options);
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* 创建 WeChat accounts provider。
|
|
71
|
+
*/
|
|
72
|
+
export function wechatAccountsProvider(options = {}) {
|
|
73
|
+
return oauthAccountsProvider("wechat", options);
|
|
74
|
+
}
|
|
75
|
+
//# sourceMappingURL=oauth.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"oauth.js","sourceRoot":"","sources":["../../../src/accounts/providers/oauth.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,uBAAuB,EAAwB,MAAM,aAAa,CAAC;AAG5E,MAAM,YAAY,GAAoC;IACpD,MAAM,EAAE,QAAQ;IAChB,MAAM,EAAE,QAAQ;IAChB,MAAM,EAAE,QAAQ;CACjB,CAAC;AAEF,MAAM,cAAc,GAA0E;IAC5F,MAAM,EAAE;QACN,SAAS,EAAE,kBAAkB;QAC7B,aAAa,EAAE,sBAAsB;KACtC;IACD,MAAM,EAAE;QACN,SAAS,EAAE,kBAAkB;QAC7B,aAAa,EAAE,sBAAsB;KACtC;IACD,MAAM,EAAE;QACN,SAAS,EAAE,kBAAkB;QAC7B,aAAa,EAAE,sBAAsB;KACtC;CACF,CAAC;AAEF;;GAEG;AACH,MAAM,UAAU,qBAAqB,CACnC,EAAmB,EACnB,UAAwC,EAAE;IAE1C,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,YAAY,CAAC,EAAE,CAAC,CAAC;IACxD,MAAM,IAAI,GAAG,cAAc,CAAC,EAAE,CAAC,CAAC;IAChC,OAAO;QACL,EAAE;QACF,KAAK;QACL,IAAI,EAAE,OAAO;QACb,GAAG,EAAE;YACH,EAAE,GAAG,EAAE,IAAI,CAAC,SAAS,EAAE,WAAW,EAAE,GAAG,KAAK,kBAAkB,EAAE,QAAQ,EAAE,IAAI,EAAE;YAChF,EAAE,GAAG,EAAE,IAAI,CAAC,aAAa,EAAE,WAAW,EAAE,GAAG,KAAK,sBAAsB,EAAE,QAAQ,EAAE,IAAI,EAAE;SACzF;QACD,MAAM,CAAC,GAAG;YACR,MAAM,OAAO,GAAG,OAAO,CAAC,uBAAuB,CAC7C,EAAE,EACF,OAAO,CAAC,SAAS,IAAI,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,EAC5C,OAAO,CAAC,aAAa,IAAI,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,aAAa,CAAC,CACrD,CAAC,CAAC;YACH,OAAO;gBACL,EAAE;gBACF,IAAI,EAAE,OAAO;gBACb,OAAO;gBACP,KAAK;gBACL,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,gBAAgB;aAC/C,CAAC;QACJ,CAAC;QACD,MAAM,CAAC,GAAG;YACR,OAAO,uBAAuB,CAC5B,EAAE,EACF,OAAO,CAAC,SAAS,IAAI,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,EAC5C,OAAO,CAAC,aAAa,IAAI,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,aAAa,CAAC,CACrD,CAAC;QACJ,CAAC;KACF,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,sBAAsB,CAAC,UAAwC,EAAE;IAC/E,OAAO,qBAAqB,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;AAClD,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,sBAAsB,CAAC,UAAwC,EAAE;IAC/E,OAAO,qBAAqB,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;AAClD,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,sBAAsB,CAAC,UAAwC,EAAE;IAC/E,OAAO,qBAAqB,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;AAClD,CAAC"}
|
|
@@ -0,0 +1,176 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Accounts 服务 provider 类型定义。
|
|
3
|
+
*
|
|
4
|
+
* 关键说明(中文)
|
|
5
|
+
* - AccountsService 是统一账号服务容器,具体登录能力由 provider 声明。
|
|
6
|
+
* - provider 负责声明 env、判断是否可用,并提供必要的发送或 OAuth 配置能力。
|
|
7
|
+
*/
|
|
8
|
+
import type { EnvRequirement } from "@downcity/city";
|
|
9
|
+
import type { OAuthProviderConfig, OAuthProviderId } from "./oauth.js";
|
|
10
|
+
/**
|
|
11
|
+
* Accounts 登录方式类型。
|
|
12
|
+
*/
|
|
13
|
+
export type AccountsProviderType = "password" | "oauth";
|
|
14
|
+
/**
|
|
15
|
+
* Accounts 登录方式不可用原因。
|
|
16
|
+
*/
|
|
17
|
+
export type AccountsProviderReason = "not_configured" | "not_supported";
|
|
18
|
+
/**
|
|
19
|
+
* Accounts provider 运行时上下文。
|
|
20
|
+
*/
|
|
21
|
+
export interface AccountsProviderContext {
|
|
22
|
+
/**
|
|
23
|
+
* 读取 City runtime env。
|
|
24
|
+
*/
|
|
25
|
+
env(key: string): string | undefined;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Accounts 登录方式返回项。
|
|
29
|
+
*/
|
|
30
|
+
export interface AccountsProviderItem {
|
|
31
|
+
/**
|
|
32
|
+
* 登录方式唯一标识,例如 `email`、`github`。
|
|
33
|
+
*/
|
|
34
|
+
id: string;
|
|
35
|
+
/**
|
|
36
|
+
* 登录方式类别。
|
|
37
|
+
*/
|
|
38
|
+
type: AccountsProviderType;
|
|
39
|
+
/**
|
|
40
|
+
* 当前 City 是否实际开放该登录方式。
|
|
41
|
+
*/
|
|
42
|
+
enabled: boolean;
|
|
43
|
+
/**
|
|
44
|
+
* 展示给前端或 CLI 的登录方式名称。
|
|
45
|
+
*/
|
|
46
|
+
label: string;
|
|
47
|
+
/**
|
|
48
|
+
* email login 是否启用。
|
|
49
|
+
*/
|
|
50
|
+
login_enabled?: boolean;
|
|
51
|
+
/**
|
|
52
|
+
* email register 是否启用。
|
|
53
|
+
*/
|
|
54
|
+
register_enabled?: boolean;
|
|
55
|
+
/**
|
|
56
|
+
* 未启用原因。
|
|
57
|
+
*/
|
|
58
|
+
reason?: AccountsProviderReason;
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Accounts provider 基础定义。
|
|
62
|
+
*/
|
|
63
|
+
export interface AccountsProvider {
|
|
64
|
+
/**
|
|
65
|
+
* provider ID。
|
|
66
|
+
*/
|
|
67
|
+
id: string;
|
|
68
|
+
/**
|
|
69
|
+
* provider 展示名。
|
|
70
|
+
*/
|
|
71
|
+
label: string;
|
|
72
|
+
/**
|
|
73
|
+
* provider 类型。
|
|
74
|
+
*/
|
|
75
|
+
type: AccountsProviderType;
|
|
76
|
+
/**
|
|
77
|
+
* provider 需要暴露给 env 管理的配置项。
|
|
78
|
+
*/
|
|
79
|
+
env: EnvRequirement[];
|
|
80
|
+
/**
|
|
81
|
+
* 生成登录方式展示信息。
|
|
82
|
+
*/
|
|
83
|
+
method(ctx: AccountsProviderContext): AccountsProviderItem;
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* 验证邮件发送参数。
|
|
87
|
+
*/
|
|
88
|
+
export interface AccountsEmailSendParams {
|
|
89
|
+
/**
|
|
90
|
+
* 收件人邮箱。
|
|
91
|
+
*/
|
|
92
|
+
to: string;
|
|
93
|
+
/**
|
|
94
|
+
* 邮件标题。
|
|
95
|
+
*/
|
|
96
|
+
subject: string;
|
|
97
|
+
/**
|
|
98
|
+
* 纯文本邮件内容。
|
|
99
|
+
*/
|
|
100
|
+
text: string;
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* Email accounts provider。
|
|
104
|
+
*/
|
|
105
|
+
export interface AccountsEmailProvider extends AccountsProvider {
|
|
106
|
+
/**
|
|
107
|
+
* provider ID,固定为 `email`。
|
|
108
|
+
*/
|
|
109
|
+
id: "email";
|
|
110
|
+
/**
|
|
111
|
+
* provider 类型,固定为 password。
|
|
112
|
+
*/
|
|
113
|
+
type: "password";
|
|
114
|
+
/**
|
|
115
|
+
* 发送验证邮件。
|
|
116
|
+
*/
|
|
117
|
+
send_email(params: AccountsEmailSendParams): Promise<void>;
|
|
118
|
+
}
|
|
119
|
+
/**
|
|
120
|
+
* OAuth accounts provider。
|
|
121
|
+
*/
|
|
122
|
+
export interface AccountsOAuthProvider extends AccountsProvider {
|
|
123
|
+
/**
|
|
124
|
+
* provider ID。
|
|
125
|
+
*/
|
|
126
|
+
id: OAuthProviderId;
|
|
127
|
+
/**
|
|
128
|
+
* provider 类型,固定为 oauth。
|
|
129
|
+
*/
|
|
130
|
+
type: "oauth";
|
|
131
|
+
/**
|
|
132
|
+
* 读取当前 provider 的 OAuth 配置。
|
|
133
|
+
*/
|
|
134
|
+
config(ctx: AccountsProviderContext): OAuthProviderConfig | undefined;
|
|
135
|
+
}
|
|
136
|
+
/**
|
|
137
|
+
* Email accounts provider 配置。
|
|
138
|
+
*/
|
|
139
|
+
export interface EmailAccountsProviderOptions {
|
|
140
|
+
/**
|
|
141
|
+
* 展示名称。
|
|
142
|
+
*/
|
|
143
|
+
label?: string;
|
|
144
|
+
/**
|
|
145
|
+
* provider 需要暴露给 env 管理的配置项。
|
|
146
|
+
*/
|
|
147
|
+
env?: EnvRequirement[];
|
|
148
|
+
/**
|
|
149
|
+
* 自定义可用性判断。
|
|
150
|
+
*
|
|
151
|
+
* 用于 SMTP、SendGrid、Resend 等发送能力由 env 驱动的场景。
|
|
152
|
+
*/
|
|
153
|
+
enabled?: (ctx: AccountsProviderContext) => boolean;
|
|
154
|
+
/**
|
|
155
|
+
* 发送验证邮件。
|
|
156
|
+
*/
|
|
157
|
+
send_email: (params: AccountsEmailSendParams) => Promise<void>;
|
|
158
|
+
}
|
|
159
|
+
/**
|
|
160
|
+
* OAuth accounts provider 配置。
|
|
161
|
+
*/
|
|
162
|
+
export interface OAuthAccountsProviderOptions {
|
|
163
|
+
/**
|
|
164
|
+
* 展示名称。
|
|
165
|
+
*/
|
|
166
|
+
label?: string;
|
|
167
|
+
/**
|
|
168
|
+
* OAuth client id。
|
|
169
|
+
*/
|
|
170
|
+
client_id?: string;
|
|
171
|
+
/**
|
|
172
|
+
* OAuth client secret。
|
|
173
|
+
*/
|
|
174
|
+
client_secret?: string;
|
|
175
|
+
}
|
|
176
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/accounts/types.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AACrD,OAAO,KAAK,EAAE,mBAAmB,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAEvE;;GAEG;AACH,MAAM,MAAM,oBAAoB,GAAG,UAAU,GAAG,OAAO,CAAC;AAExD;;GAEG;AACH,MAAM,MAAM,sBAAsB,GAAG,gBAAgB,GAAG,eAAe,CAAC;AAExE;;GAEG;AACH,MAAM,WAAW,uBAAuB;IACtC;;OAEG;IACH,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC;CACtC;AAED;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC;;OAEG;IACH,EAAE,EAAE,MAAM,CAAC;IAEX;;OAEG;IACH,IAAI,EAAE,oBAAoB,CAAC;IAE3B;;OAEG;IACH,OAAO,EAAE,OAAO,CAAC;IAEjB;;OAEG;IACH,KAAK,EAAE,MAAM,CAAC;IAEd;;OAEG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC;IAExB;;OAEG;IACH,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAE3B;;OAEG;IACH,MAAM,CAAC,EAAE,sBAAsB,CAAC;CACjC;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B;;OAEG;IACH,EAAE,EAAE,MAAM,CAAC;IAEX;;OAEG;IACH,KAAK,EAAE,MAAM,CAAC;IAEd;;OAEG;IACH,IAAI,EAAE,oBAAoB,CAAC;IAE3B;;OAEG;IACH,GAAG,EAAE,cAAc,EAAE,CAAC;IAEtB;;OAEG;IACH,MAAM,CAAC,GAAG,EAAE,uBAAuB,GAAG,oBAAoB,CAAC;CAC5D;AAED;;GAEG;AACH,MAAM,WAAW,uBAAuB;IACtC;;OAEG;IACH,EAAE,EAAE,MAAM,CAAC;IAEX;;OAEG;IACH,OAAO,EAAE,MAAM,CAAC;IAEhB;;OAEG;IACH,IAAI,EAAE,MAAM,CAAC;CACd;AAED;;GAEG;AACH,MAAM,WAAW,qBAAsB,SAAQ,gBAAgB;IAC7D;;OAEG;IACH,EAAE,EAAE,OAAO,CAAC;IAEZ;;OAEG;IACH,IAAI,EAAE,UAAU,CAAC;IAEjB;;OAEG;IACH,UAAU,CAAC,MAAM,EAAE,uBAAuB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC5D;AAED;;GAEG;AACH,MAAM,WAAW,qBAAsB,SAAQ,gBAAgB;IAC7D;;OAEG;IACH,EAAE,EAAE,eAAe,CAAC;IAEpB;;OAEG;IACH,IAAI,EAAE,OAAO,CAAC;IAEd;;OAEG;IACH,MAAM,CAAC,GAAG,EAAE,uBAAuB,GAAG,mBAAmB,GAAG,SAAS,CAAC;CACvE;AAED;;GAEG;AACH,MAAM,WAAW,4BAA4B;IAC3C;;OAEG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf;;OAEG;IACH,GAAG,CAAC,EAAE,cAAc,EAAE,CAAC;IAEvB;;;;OAIG;IACH,OAAO,CAAC,EAAE,CAAC,GAAG,EAAE,uBAAuB,KAAK,OAAO,CAAC;IAEpD;;OAEG;IACH,UAAU,EAAE,CAAC,MAAM,EAAE,uBAAuB,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CAChE;AAED;;GAEG;AACH,MAAM,WAAW,4BAA4B;IAC3C;;OAEG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB;;OAEG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/accounts/types.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Balance 金额换算工具。
|
|
3
|
+
*
|
|
4
|
+
* 关键说明(中文)
|
|
5
|
+
* - credits 是系统唯一账务单位,所有输入、存储、扣款与返回账务字段都使用 credits 整数
|
|
6
|
+
* - 1 USD = 1_000_000 credits
|
|
7
|
+
* - 用户侧 `/v1/balance/me` 使用 `credits` 作为主字段,并补充 USD 展示字段
|
|
8
|
+
* - 所有转换集中在这里,避免各模块重复处理精度
|
|
9
|
+
*/
|
|
10
|
+
/**
|
|
11
|
+
* 标准化正数 credits 整数。
|
|
12
|
+
*/
|
|
13
|
+
export declare function normalizeCredits(value: unknown, label: string): number;
|
|
14
|
+
/**
|
|
15
|
+
* 标准化非负 credits 整数。
|
|
16
|
+
*/
|
|
17
|
+
export declare function normalizeNonNegativeCredits(value: unknown, label: string): number;
|
|
18
|
+
/**
|
|
19
|
+
* 从请求体中读取正数 credits。
|
|
20
|
+
*/
|
|
21
|
+
export declare function readCredits(input: {
|
|
22
|
+
credits?: unknown;
|
|
23
|
+
}, label?: string): number;
|
|
24
|
+
/**
|
|
25
|
+
* 从请求体中读取非负 credits。
|
|
26
|
+
*/
|
|
27
|
+
export declare function readNonNegativeCredits(input: {
|
|
28
|
+
credits?: unknown;
|
|
29
|
+
}, label?: string): number;
|
|
30
|
+
/**
|
|
31
|
+
* 将 credits 转换成 USD 数字。
|
|
32
|
+
*/
|
|
33
|
+
export declare function creditsToUsd(value: unknown): number;
|
|
34
|
+
/**
|
|
35
|
+
* 将 credits 转成 USD cents,供支付 provider 使用。
|
|
36
|
+
*/
|
|
37
|
+
export declare function creditsToUsdCents(value: unknown): number;
|
|
38
|
+
/**
|
|
39
|
+
* 格式化 USD 展示文本。
|
|
40
|
+
*/
|
|
41
|
+
export declare function formatUsd(value: unknown): string;
|
|
42
|
+
//# sourceMappingURL=credits.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"credits.d.ts","sourceRoot":"","sources":["../../src/balance/credits.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAOH;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAMtE;AAED;;GAEG;AACH,wBAAgB,2BAA2B,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAMjF;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE;IAAE,OAAO,CAAC,EAAE,OAAO,CAAA;CAAE,EAAE,KAAK,SAAY,GAAG,MAAM,CAEnF;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,KAAK,EAAE;IAAE,OAAO,CAAC,EAAE,OAAO,CAAA;CAAE,EAAE,KAAK,SAAY,GAAG,MAAM,CAE9F;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAGnD;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAOxD;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAEhD"}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Balance 金额换算工具。
|
|
3
|
+
*
|
|
4
|
+
* 关键说明(中文)
|
|
5
|
+
* - credits 是系统唯一账务单位,所有输入、存储、扣款与返回账务字段都使用 credits 整数
|
|
6
|
+
* - 1 USD = 1_000_000 credits
|
|
7
|
+
* - 用户侧 `/v1/balance/me` 使用 `credits` 作为主字段,并补充 USD 展示字段
|
|
8
|
+
* - 所有转换集中在这里,避免各模块重复处理精度
|
|
9
|
+
*/
|
|
10
|
+
import { CREDITS_PER_USD, USD_DECIMAL_PLACES, } from "../types/Amount.js";
|
|
11
|
+
/**
|
|
12
|
+
* 标准化正数 credits 整数。
|
|
13
|
+
*/
|
|
14
|
+
export function normalizeCredits(value, label) {
|
|
15
|
+
const normalized = Number(value);
|
|
16
|
+
if (!Number.isSafeInteger(normalized) || normalized <= 0) {
|
|
17
|
+
throw new TypeError(`${label} must be a positive credits integer`);
|
|
18
|
+
}
|
|
19
|
+
return normalized;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* 标准化非负 credits 整数。
|
|
23
|
+
*/
|
|
24
|
+
export function normalizeNonNegativeCredits(value, label) {
|
|
25
|
+
const normalized = Number(value ?? 0);
|
|
26
|
+
if (!Number.isSafeInteger(normalized) || normalized < 0) {
|
|
27
|
+
throw new TypeError(`${label} must be a non-negative credits integer`);
|
|
28
|
+
}
|
|
29
|
+
return normalized;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* 从请求体中读取正数 credits。
|
|
33
|
+
*/
|
|
34
|
+
export function readCredits(input, label = "credits") {
|
|
35
|
+
return normalizeCredits(input.credits, label);
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* 从请求体中读取非负 credits。
|
|
39
|
+
*/
|
|
40
|
+
export function readNonNegativeCredits(input, label = "credits") {
|
|
41
|
+
return normalizeNonNegativeCredits(input.credits, label);
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* 将 credits 转换成 USD 数字。
|
|
45
|
+
*/
|
|
46
|
+
export function creditsToUsd(value) {
|
|
47
|
+
const credits = Number(value ?? 0);
|
|
48
|
+
return Number((credits / CREDITS_PER_USD).toFixed(USD_DECIMAL_PLACES));
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* 将 credits 转成 USD cents,供支付 provider 使用。
|
|
52
|
+
*/
|
|
53
|
+
export function creditsToUsdCents(value) {
|
|
54
|
+
const credits = Number(value ?? 0);
|
|
55
|
+
const cents = Math.round(credits / (CREDITS_PER_USD / 100));
|
|
56
|
+
if (!Number.isSafeInteger(cents) || cents <= 0) {
|
|
57
|
+
throw new TypeError("usd_cents must be a positive integer");
|
|
58
|
+
}
|
|
59
|
+
return cents;
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* 格式化 USD 展示文本。
|
|
63
|
+
*/
|
|
64
|
+
export function formatUsd(value) {
|
|
65
|
+
return `$${creditsToUsd(value).toFixed(2)}`;
|
|
66
|
+
}
|
|
67
|
+
//# sourceMappingURL=credits.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"credits.js","sourceRoot":"","sources":["../../src/balance/credits.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EACL,eAAe,EACf,kBAAkB,GACnB,MAAM,oBAAoB,CAAC;AAE5B;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAAC,KAAc,EAAE,KAAa;IAC5D,MAAM,UAAU,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IACjC,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,UAAU,CAAC,IAAI,UAAU,IAAI,CAAC,EAAE,CAAC;QACzD,MAAM,IAAI,SAAS,CAAC,GAAG,KAAK,qCAAqC,CAAC,CAAC;IACrE,CAAC;IACD,OAAO,UAAU,CAAC;AACpB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,2BAA2B,CAAC,KAAc,EAAE,KAAa;IACvE,MAAM,UAAU,GAAG,MAAM,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC;IACtC,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,UAAU,CAAC,IAAI,UAAU,GAAG,CAAC,EAAE,CAAC;QACxD,MAAM,IAAI,SAAS,CAAC,GAAG,KAAK,yCAAyC,CAAC,CAAC;IACzE,CAAC;IACD,OAAO,UAAU,CAAC;AACpB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,WAAW,CAAC,KAA4B,EAAE,KAAK,GAAG,SAAS;IACzE,OAAO,gBAAgB,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;AAChD,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,sBAAsB,CAAC,KAA4B,EAAE,KAAK,GAAG,SAAS;IACpF,OAAO,2BAA2B,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;AAC3D,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,YAAY,CAAC,KAAc;IACzC,MAAM,OAAO,GAAG,MAAM,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC;IACnC,OAAO,MAAM,CAAC,CAAC,OAAO,GAAG,eAAe,CAAC,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC,CAAC;AACzE,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,iBAAiB,CAAC,KAAc;IAC9C,MAAM,OAAO,GAAG,MAAM,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC;IACnC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,CAAC,eAAe,GAAG,GAAG,CAAC,CAAC,CAAC;IAC5D,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,KAAK,IAAI,CAAC,EAAE,CAAC;QAC/C,MAAM,IAAI,SAAS,CAAC,sCAAsC,CAAC,CAAC;IAC9D,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,SAAS,CAAC,KAAc;IACtC,OAAO,IAAI,YAAY,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;AAC9C,CAAC"}
|
package/bin/balance/index.d.ts
CHANGED
|
@@ -4,6 +4,6 @@
|
|
|
4
4
|
export { BalanceService } from "./service.js";
|
|
5
5
|
export { balanceAccounts, balanceCharges, balanceLedger, balanceRedeemCodes, balanceTopups, } from "./schema.js";
|
|
6
6
|
export type { BalanceAccount, BalanceCharge, BalanceChargeInput, BalanceChargeQuery, BalanceChargeStatus, BalanceCreditsConversion, BalanceCreateRedeemCodeInput, BalanceExtra, BalanceHistoryQuery, BalanceLedgerEntry, BalanceLedgerKind, BalanceServiceOptions, BalanceRedeemCode, BalanceRedeemCodeIssueResult, BalanceRedeemCodeQuery, BalanceRedeemCodeRedeemResult, BalanceRedeemCodeStatus, BalanceTopup, BalanceTopupQuery, BalanceTopupStatus, BalanceUserBalance, } from "./types.js";
|
|
7
|
-
export {
|
|
8
|
-
export type { Credits,
|
|
7
|
+
export { CREDITS_PER_USD, USD_DECIMAL_PLACES, } from "../types/Amount.js";
|
|
8
|
+
export type { Credits, } from "../types/Amount.js";
|
|
9
9
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/balance/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EACL,eAAe,EACf,cAAc,EACd,aAAa,EACb,kBAAkB,EAClB,aAAa,GACd,MAAM,aAAa,CAAC;AAErB,YAAY,EACV,cAAc,EACd,aAAa,EACb,kBAAkB,EAClB,kBAAkB,EAClB,mBAAmB,EACnB,wBAAwB,EACxB,4BAA4B,EAC5B,YAAY,EACZ,mBAAmB,EACnB,kBAAkB,EAClB,iBAAiB,EACjB,qBAAqB,EACrB,iBAAiB,EACjB,4BAA4B,EAC5B,sBAAsB,EACtB,6BAA6B,EAC7B,uBAAuB,EACvB,YAAY,EACZ,iBAAiB,EACjB,kBAAkB,EAClB,kBAAkB,GACnB,MAAM,YAAY,CAAC;AAEpB,OAAO,EACL,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/balance/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EACL,eAAe,EACf,cAAc,EACd,aAAa,EACb,kBAAkB,EAClB,aAAa,GACd,MAAM,aAAa,CAAC;AAErB,YAAY,EACV,cAAc,EACd,aAAa,EACb,kBAAkB,EAClB,kBAAkB,EAClB,mBAAmB,EACnB,wBAAwB,EACxB,4BAA4B,EAC5B,YAAY,EACZ,mBAAmB,EACnB,kBAAkB,EAClB,iBAAiB,EACjB,qBAAqB,EACrB,iBAAiB,EACjB,4BAA4B,EAC5B,sBAAsB,EACtB,6BAA6B,EAC7B,uBAAuB,EACvB,YAAY,EACZ,iBAAiB,EACjB,kBAAkB,EAClB,kBAAkB,GACnB,MAAM,YAAY,CAAC;AAEpB,OAAO,EACL,eAAe,EACf,kBAAkB,GACnB,MAAM,oBAAoB,CAAC;AAC5B,YAAY,EACV,OAAO,GACR,MAAM,oBAAoB,CAAC"}
|
package/bin/balance/index.js
CHANGED
|
@@ -3,5 +3,5 @@
|
|
|
3
3
|
*/
|
|
4
4
|
export { BalanceService } from "./service.js";
|
|
5
5
|
export { balanceAccounts, balanceCharges, balanceLedger, balanceRedeemCodes, balanceTopups, } from "./schema.js";
|
|
6
|
-
export {
|
|
6
|
+
export { CREDITS_PER_USD, USD_DECIMAL_PLACES, } from "../types/Amount.js";
|
|
7
7
|
//# sourceMappingURL=index.js.map
|
package/bin/balance/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/balance/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EACL,eAAe,EACf,cAAc,EACd,aAAa,EACb,kBAAkB,EAClB,aAAa,GACd,MAAM,aAAa,CAAC;AA0BrB,OAAO,EACL,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/balance/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EACL,eAAe,EACf,cAAc,EACd,aAAa,EACb,kBAAkB,EAClB,aAAa,GACd,MAAM,aAAa,CAAC;AA0BrB,OAAO,EACL,eAAe,EACf,kBAAkB,GACnB,MAAM,oBAAoB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"routes.d.ts","sourceRoot":"","sources":["../../src/balance/routes.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,qBAAqB,EAAuB,MAAM,gBAAgB,CAAC;AACjF,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"routes.d.ts","sourceRoot":"","sources":["../../src/balance/routes.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,qBAAqB,EAAuB,MAAM,gBAAgB,CAAC;AACjF,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAwEnD;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,cAAc,EAAE,GAAG,EAAE,qBAAqB,GAAG,IAAI,CA2M/F"}
|
package/bin/balance/routes.js
CHANGED
|
@@ -53,7 +53,7 @@ export function registerBalanceRoutes(service, ctx) {
|
|
|
53
53
|
auth: ["user"],
|
|
54
54
|
handler: async (c) => {
|
|
55
55
|
const body = await c.json();
|
|
56
|
-
return c.jsonResponse(await service.createTopup(readUserId(c), body.
|
|
56
|
+
return c.jsonResponse(await service.createTopup(readUserId(c), Number(body.credits), body));
|
|
57
57
|
},
|
|
58
58
|
});
|
|
59
59
|
ctx.route({
|
|
@@ -122,7 +122,7 @@ export function registerBalanceRoutes(service, ctx) {
|
|
|
122
122
|
auth: ["admin"],
|
|
123
123
|
handler: async (c) => {
|
|
124
124
|
const body = await c.json();
|
|
125
|
-
return c.jsonResponse(await service.add(readRequired(body.user_id, "user_id"), Number(body.
|
|
125
|
+
return c.jsonResponse(await service.add(readRequired(body.user_id, "user_id"), Number(body.credits), body));
|
|
126
126
|
},
|
|
127
127
|
});
|
|
128
128
|
ctx.route({
|
|
@@ -131,7 +131,7 @@ export function registerBalanceRoutes(service, ctx) {
|
|
|
131
131
|
auth: ["admin"],
|
|
132
132
|
handler: async (c) => {
|
|
133
133
|
const body = await c.json();
|
|
134
|
-
return c.jsonResponse(await service.sub(readRequired(body.user_id, "user_id"), Number(body.
|
|
134
|
+
return c.jsonResponse(await service.sub(readRequired(body.user_id, "user_id"), Number(body.credits), body));
|
|
135
135
|
},
|
|
136
136
|
});
|
|
137
137
|
ctx.route({
|
|
@@ -142,7 +142,7 @@ export function registerBalanceRoutes(service, ctx) {
|
|
|
142
142
|
const body = await c.json();
|
|
143
143
|
return c.jsonResponse(await service.charge({
|
|
144
144
|
user_id: readRequired(body.user_id, "user_id"),
|
|
145
|
-
|
|
145
|
+
credits: Number(body.credits),
|
|
146
146
|
note: body.note,
|
|
147
147
|
ref: body.ref,
|
|
148
148
|
meta: body.meta,
|
|
@@ -175,7 +175,7 @@ export function registerBalanceRoutes(service, ctx) {
|
|
|
175
175
|
handler: async (c) => {
|
|
176
176
|
const body = await c.json();
|
|
177
177
|
return c.jsonResponse(await service.createRedeemCode({
|
|
178
|
-
|
|
178
|
+
credits: Number(body.credits),
|
|
179
179
|
code: body.code,
|
|
180
180
|
note: body.note,
|
|
181
181
|
ref: body.ref,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"routes.js","sourceRoot":"","sources":["../../src/balance/routes.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAKH,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"routes.js","sourceRoot":"","sources":["../../src/balance/routes.ts"],"names":[],"mappings":"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"}
|