@nestjs-dash/wallet 0.1.1
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.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +95 -0
- package/dist/cli.js.map +1 -0
- package/dist/entities/transaction.entity.d.ts +18 -0
- package/dist/entities/transaction.entity.d.ts.map +1 -0
- package/dist/entities/transaction.entity.js +68 -0
- package/dist/entities/transaction.entity.js.map +1 -0
- package/dist/entities/transfer.entity.d.ts +23 -0
- package/dist/entities/transfer.entity.d.ts.map +1 -0
- package/dist/entities/transfer.entity.js +97 -0
- package/dist/entities/transfer.entity.js.map +1 -0
- package/dist/entities/wallet.entity.d.ts +16 -0
- package/dist/entities/wallet.entity.d.ts.map +1 -0
- package/dist/entities/wallet.entity.js +67 -0
- package/dist/entities/wallet.entity.js.map +1 -0
- package/dist/errors.d.ts +13 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +25 -0
- package/dist/errors.js.map +1 -0
- package/dist/events/wallet-event.publisher.d.ts +12 -0
- package/dist/events/wallet-event.publisher.d.ts.map +1 -0
- package/dist/events/wallet-event.publisher.js +44 -0
- package/dist/events/wallet-event.publisher.js.map +1 -0
- package/dist/events/wallet.events.d.ts +22 -0
- package/dist/events/wallet.events.d.ts.map +1 -0
- package/dist/events/wallet.events.js +2 -0
- package/dist/events/wallet.events.js.map +1 -0
- package/dist/exchange.service.d.ts +17 -0
- package/dist/exchange.service.d.ts.map +1 -0
- package/dist/exchange.service.js +70 -0
- package/dist/exchange.service.js.map +1 -0
- package/dist/float-wallet.service.d.ts +11 -0
- package/dist/float-wallet.service.d.ts.map +1 -0
- package/dist/float-wallet.service.js +33 -0
- package/dist/float-wallet.service.js.map +1 -0
- package/dist/index.d.ts +20 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +18 -0
- package/dist/index.js.map +1 -0
- package/dist/lock/array-lock.service.d.ts +8 -0
- package/dist/lock/array-lock.service.d.ts.map +1 -0
- package/dist/lock/array-lock.service.js +60 -0
- package/dist/lock/array-lock.service.js.map +1 -0
- package/dist/lock/lock.service.d.ts +5 -0
- package/dist/lock/lock.service.d.ts.map +1 -0
- package/dist/lock/lock.service.js +4 -0
- package/dist/lock/lock.service.js.map +1 -0
- package/dist/lock/memcached-lock.service.d.ts +21 -0
- package/dist/lock/memcached-lock.service.d.ts.map +1 -0
- package/dist/lock/memcached-lock.service.js +45 -0
- package/dist/lock/memcached-lock.service.js.map +1 -0
- package/dist/lock/redis-lock.service.d.ts +13 -0
- package/dist/lock/redis-lock.service.d.ts.map +1 -0
- package/dist/lock/redis-lock.service.js +43 -0
- package/dist/lock/redis-lock.service.js.map +1 -0
- package/dist/migrations/generate.d.ts +22 -0
- package/dist/migrations/generate.d.ts.map +1 -0
- package/dist/migrations/generate.js +226 -0
- package/dist/migrations/generate.js.map +1 -0
- package/dist/tokens.d.ts +56 -0
- package/dist/tokens.d.ts.map +1 -0
- package/dist/tokens.js +13 -0
- package/dist/tokens.js.map +1 -0
- package/dist/transfer.service.d.ts +29 -0
- package/dist/transfer.service.d.ts.map +1 -0
- package/dist/transfer.service.js +154 -0
- package/dist/transfer.service.js.map +1 -0
- package/dist/wallet.module.d.ts +12 -0
- package/dist/wallet.module.d.ts.map +1 -0
- package/dist/wallet.module.js +150 -0
- package/dist/wallet.module.js.map +1 -0
- package/dist/wallet.service.d.ts +39 -0
- package/dist/wallet.service.d.ts.map +1 -0
- package/dist/wallet.service.js +230 -0
- package/dist/wallet.service.js.map +1 -0
- package/dist/warmup.service.d.ts +13 -0
- package/dist/warmup.service.d.ts.map +1 -0
- package/dist/warmup.service.js +76 -0
- package/dist/warmup.service.js.map +1 -0
- package/package.json +69 -0
package/dist/cli.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":""}
|
package/dist/cli.js
ADDED
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { Command } from 'commander';
|
|
3
|
+
import { existsSync, mkdirSync, readdirSync, writeFileSync } from 'node:fs';
|
|
4
|
+
import { join, resolve } from 'node:path';
|
|
5
|
+
import { pathToFileURL } from 'node:url';
|
|
6
|
+
import { generateMigrationFiles, listMigrationSpecs, resolveTables, } from './migrations/generate.js';
|
|
7
|
+
const program = new Command();
|
|
8
|
+
program.name('nestjs-dash-wallet').description('NestJS Dash wallet CLI').version('0.1.0');
|
|
9
|
+
function parseTables(input) {
|
|
10
|
+
if (!input)
|
|
11
|
+
return {};
|
|
12
|
+
const out = {};
|
|
13
|
+
for (const part of input.split(',')) {
|
|
14
|
+
const [key, value] = part.split('=').map((s) => s.trim());
|
|
15
|
+
if (key === 'wallets' || key === 'transactions' || key === 'transfers') {
|
|
16
|
+
out[key] = value;
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
return out;
|
|
20
|
+
}
|
|
21
|
+
program
|
|
22
|
+
.command('migration:publish')
|
|
23
|
+
.description('Publish TypeORM wallet migrations into the consumer project')
|
|
24
|
+
.option('-p, --path <dir>', 'output directory', './src/migrations/wallet')
|
|
25
|
+
.option('--tables <map>', 'table overrides wallets=...,transactions=...,transfers=...')
|
|
26
|
+
.option('--with-uuid', 'also publish morph-id UUID migration', false)
|
|
27
|
+
.option('--force', 'overwrite existing files with same suffix', false)
|
|
28
|
+
.action((opts) => {
|
|
29
|
+
const cwd = process.cwd();
|
|
30
|
+
const outDir = resolve(cwd, opts.path);
|
|
31
|
+
mkdirSync(outDir, { recursive: true });
|
|
32
|
+
const tables = resolveTables(parseTables(opts.tables));
|
|
33
|
+
const files = generateMigrationFiles(tables, !!opts.withUuid);
|
|
34
|
+
const existing = existsSync(outDir) ? readdirSync(outDir) : [];
|
|
35
|
+
for (const file of files) {
|
|
36
|
+
const suffix = file.fileName.replace(/^\d+-/, '');
|
|
37
|
+
const already = existing.find((f) => f.endsWith(`-${suffix}`) || f === file.fileName);
|
|
38
|
+
if (already && !opts.force) {
|
|
39
|
+
console.log(`skip ${already} (exists)`);
|
|
40
|
+
continue;
|
|
41
|
+
}
|
|
42
|
+
const targetName = opts.force && already ? already : file.fileName;
|
|
43
|
+
const target = join(outDir, targetName);
|
|
44
|
+
writeFileSync(target, file.contents, 'utf8');
|
|
45
|
+
console.log(`wrote ${targetName}`);
|
|
46
|
+
}
|
|
47
|
+
});
|
|
48
|
+
program
|
|
49
|
+
.command('migration:list')
|
|
50
|
+
.description('List wallet migrations that would be published')
|
|
51
|
+
.option('-p, --path <dir>', 'output directory', './src/migrations/wallet')
|
|
52
|
+
.option('--with-uuid', 'include uuid morph migration', false)
|
|
53
|
+
.action((opts) => {
|
|
54
|
+
const outDir = resolve(process.cwd(), opts.path);
|
|
55
|
+
const existing = existsSync(outDir) ? readdirSync(outDir) : [];
|
|
56
|
+
for (const spec of listMigrationSpecs(!!opts.withUuid)) {
|
|
57
|
+
const found = existing.find((f) => f.includes(spec.fileSuffix));
|
|
58
|
+
console.log(`${found ? 'present' : 'missing'}\t${spec.key}${found ? `\t${found}` : ''}`);
|
|
59
|
+
}
|
|
60
|
+
});
|
|
61
|
+
program
|
|
62
|
+
.command('warmup')
|
|
63
|
+
.description('Recompute wallet balance(s) from confirmed transactions')
|
|
64
|
+
.requiredOption('--data-source <path>', 'path to TypeORM DataSource module exporting default DataSource')
|
|
65
|
+
.option('--wallet-id <id>', 'warmup a single wallet id')
|
|
66
|
+
.action(async (opts) => {
|
|
67
|
+
const mod = await import(pathToFileURL(resolve(process.cwd(), opts.dataSource)).href);
|
|
68
|
+
const ds = mod.default;
|
|
69
|
+
if (!ds?.initialize) {
|
|
70
|
+
throw new Error('DataSource default export with initialize() is required');
|
|
71
|
+
}
|
|
72
|
+
if (!ds.isInitialized)
|
|
73
|
+
await ds.initialize();
|
|
74
|
+
const walletId = opts.walletId ? Number(opts.walletId) : null;
|
|
75
|
+
if (walletId) {
|
|
76
|
+
await ds.query(`UPDATE wallets w
|
|
77
|
+
SET balance = (
|
|
78
|
+
SELECT COALESCE(SUM(CASE WHEN type='deposit' THEN amount ELSE -amount END), 0)
|
|
79
|
+
FROM transactions t WHERE t.wallet_id = w.id AND t.confirmed = 1
|
|
80
|
+
)
|
|
81
|
+
WHERE w.id = ?`, [walletId]);
|
|
82
|
+
console.log(`warmed wallet ${walletId}`);
|
|
83
|
+
}
|
|
84
|
+
else {
|
|
85
|
+
await ds.query(`UPDATE wallets w
|
|
86
|
+
SET balance = (
|
|
87
|
+
SELECT COALESCE(SUM(CASE WHEN type='deposit' THEN amount ELSE -amount END), 0)
|
|
88
|
+
FROM transactions t WHERE t.wallet_id = w.id AND t.confirmed = 1
|
|
89
|
+
)`);
|
|
90
|
+
console.log('warmed all wallets');
|
|
91
|
+
}
|
|
92
|
+
await ds.destroy();
|
|
93
|
+
});
|
|
94
|
+
program.parse();
|
|
95
|
+
//# sourceMappingURL=cli.js.map
|
package/dist/cli.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { BaseEntity, type Relation } from 'typeorm';
|
|
2
|
+
import { WalletEntity } from './wallet.entity.js';
|
|
3
|
+
export type TransactionType = 'deposit' | 'withdraw';
|
|
4
|
+
export declare class TransactionEntity extends BaseEntity {
|
|
5
|
+
id: number;
|
|
6
|
+
payableType: string;
|
|
7
|
+
payableId: string;
|
|
8
|
+
walletId: number;
|
|
9
|
+
wallet?: Relation<WalletEntity>;
|
|
10
|
+
type: TransactionType;
|
|
11
|
+
amount: string;
|
|
12
|
+
confirmed: boolean;
|
|
13
|
+
meta: Record<string, unknown> | null;
|
|
14
|
+
uuid: string;
|
|
15
|
+
createdAt: Date;
|
|
16
|
+
updatedAt: Date;
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=transaction.entity.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transaction.entity.d.ts","sourceRoot":"","sources":["../../src/entities/transaction.entity.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,UAAU,EAQV,KAAK,QAAQ,EAEd,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAElD,MAAM,MAAM,eAAe,GAAG,SAAS,GAAG,UAAU,CAAC;AAErD,qBAEa,iBAAkB,SAAQ,UAAU;IAE/C,EAAE,EAAG,MAAM,CAAC;IAGZ,WAAW,EAAG,MAAM,CAAC;IAGrB,SAAS,EAAG,MAAM,CAAC;IAGnB,QAAQ,EAAG,MAAM,CAAC;IAIlB,MAAM,CAAC,EAAE,QAAQ,CAAC,YAAY,CAAC,CAAC;IAGhC,IAAI,EAAG,eAAe,CAAC;IAGvB,MAAM,EAAG,MAAM,CAAC;IAGhB,SAAS,EAAG,OAAO,CAAC;IAGpB,IAAI,EAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IAGtC,IAAI,EAAG,MAAM,CAAC;IAGd,SAAS,EAAG,IAAI,CAAC;IAGjB,SAAS,EAAG,IAAI,CAAC;CAClB"}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
2
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
3
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
4
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
5
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
6
|
+
};
|
|
7
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
8
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
9
|
+
};
|
|
10
|
+
import { BaseEntity, Column, CreateDateColumn, Entity, Index, JoinColumn, ManyToOne, PrimaryGeneratedColumn, UpdateDateColumn, } from 'typeorm';
|
|
11
|
+
import { WalletEntity } from './wallet.entity.js';
|
|
12
|
+
let TransactionEntity = class TransactionEntity extends BaseEntity {
|
|
13
|
+
};
|
|
14
|
+
__decorate([
|
|
15
|
+
PrimaryGeneratedColumn({ type: 'bigint' }),
|
|
16
|
+
__metadata("design:type", Number)
|
|
17
|
+
], TransactionEntity.prototype, "id", void 0);
|
|
18
|
+
__decorate([
|
|
19
|
+
Column({ name: 'payable_type', type: 'varchar', length: 255 }),
|
|
20
|
+
__metadata("design:type", String)
|
|
21
|
+
], TransactionEntity.prototype, "payableType", void 0);
|
|
22
|
+
__decorate([
|
|
23
|
+
Column({ name: 'payable_id', type: 'varchar', length: 36 }),
|
|
24
|
+
__metadata("design:type", String)
|
|
25
|
+
], TransactionEntity.prototype, "payableId", void 0);
|
|
26
|
+
__decorate([
|
|
27
|
+
Column({ name: 'wallet_id', type: 'bigint' }),
|
|
28
|
+
__metadata("design:type", Number)
|
|
29
|
+
], TransactionEntity.prototype, "walletId", void 0);
|
|
30
|
+
__decorate([
|
|
31
|
+
ManyToOne(() => WalletEntity),
|
|
32
|
+
JoinColumn({ name: 'wallet_id' }),
|
|
33
|
+
__metadata("design:type", Object)
|
|
34
|
+
], TransactionEntity.prototype, "wallet", void 0);
|
|
35
|
+
__decorate([
|
|
36
|
+
Column({ type: 'enum', enum: ['deposit', 'withdraw'] }),
|
|
37
|
+
__metadata("design:type", String)
|
|
38
|
+
], TransactionEntity.prototype, "type", void 0);
|
|
39
|
+
__decorate([
|
|
40
|
+
Column({ type: 'decimal', precision: 64, scale: 0 }),
|
|
41
|
+
__metadata("design:type", String)
|
|
42
|
+
], TransactionEntity.prototype, "amount", void 0);
|
|
43
|
+
__decorate([
|
|
44
|
+
Column({ type: 'boolean', default: true }),
|
|
45
|
+
__metadata("design:type", Boolean)
|
|
46
|
+
], TransactionEntity.prototype, "confirmed", void 0);
|
|
47
|
+
__decorate([
|
|
48
|
+
Column({ type: 'json', nullable: true }),
|
|
49
|
+
__metadata("design:type", Object)
|
|
50
|
+
], TransactionEntity.prototype, "meta", void 0);
|
|
51
|
+
__decorate([
|
|
52
|
+
Column({ type: 'char', length: 36, unique: true }),
|
|
53
|
+
__metadata("design:type", String)
|
|
54
|
+
], TransactionEntity.prototype, "uuid", void 0);
|
|
55
|
+
__decorate([
|
|
56
|
+
CreateDateColumn({ name: 'created_at' }),
|
|
57
|
+
__metadata("design:type", Date)
|
|
58
|
+
], TransactionEntity.prototype, "createdAt", void 0);
|
|
59
|
+
__decorate([
|
|
60
|
+
UpdateDateColumn({ name: 'updated_at' }),
|
|
61
|
+
__metadata("design:type", Date)
|
|
62
|
+
], TransactionEntity.prototype, "updatedAt", void 0);
|
|
63
|
+
TransactionEntity = __decorate([
|
|
64
|
+
Entity('transactions'),
|
|
65
|
+
Index(['payableType', 'payableId'])
|
|
66
|
+
], TransactionEntity);
|
|
67
|
+
export { TransactionEntity };
|
|
68
|
+
//# sourceMappingURL=transaction.entity.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transaction.entity.js","sourceRoot":"","sources":["../../src/entities/transaction.entity.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,EACL,UAAU,EACV,MAAM,EACN,gBAAgB,EAChB,MAAM,EACN,KAAK,EACL,UAAU,EACV,SAAS,EACT,sBAAsB,EAEtB,gBAAgB,GACjB,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAM3C,IAAM,iBAAiB,GAAvB,MAAM,iBAAkB,SAAQ,UAAU;CAqChD,CAAA;AAnCC;IADC,sBAAsB,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;;6CAC/B;AAGZ;IADC,MAAM,CAAC,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC;;sDAC1C;AAGrB;IADC,MAAM,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC;;oDACzC;AAGnB;IADC,MAAM,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;;mDAC5B;AAIlB;IAFC,SAAS,CAAC,GAAG,EAAE,CAAC,YAAY,CAAC;IAC7B,UAAU,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC;;iDACF;AAGhC;IADC,MAAM,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,SAAS,EAAE,UAAU,CAAC,EAAE,CAAC;;+CACjC;AAGvB;IADC,MAAM,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC;;iDACrC;AAGhB;IADC,MAAM,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;;oDACvB;AAGpB;IADC,MAAM,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;+CACH;AAGtC;IADC,MAAM,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;;+CACrC;AAGd;IADC,gBAAgB,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC;8BAC7B,IAAI;oDAAC;AAGjB;IADC,gBAAgB,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC;8BAC7B,IAAI;oDAAC;AApCN,iBAAiB;IAF7B,MAAM,CAAC,cAAc,CAAC;IACtB,KAAK,CAAC,CAAC,aAAa,EAAE,WAAW,CAAC,CAAC;GACvB,iBAAiB,CAqC7B"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { BaseEntity, type Relation } from 'typeorm';
|
|
2
|
+
import { TransactionEntity } from './transaction.entity.js';
|
|
3
|
+
export type TransferStatus = 'exchange' | 'transfer' | 'paid' | 'refund' | 'gift';
|
|
4
|
+
export declare class TransferEntity extends BaseEntity {
|
|
5
|
+
id: number;
|
|
6
|
+
fromType: string;
|
|
7
|
+
fromId: string;
|
|
8
|
+
toType: string;
|
|
9
|
+
toId: string;
|
|
10
|
+
status: TransferStatus;
|
|
11
|
+
statusLast: TransferStatus | null;
|
|
12
|
+
depositId: number;
|
|
13
|
+
deposit?: Relation<TransactionEntity>;
|
|
14
|
+
withdrawId: number;
|
|
15
|
+
withdraw?: Relation<TransactionEntity>;
|
|
16
|
+
discount: string;
|
|
17
|
+
fee: string;
|
|
18
|
+
extra: Record<string, unknown> | null;
|
|
19
|
+
uuid: string;
|
|
20
|
+
createdAt: Date;
|
|
21
|
+
updatedAt: Date;
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=transfer.entity.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transfer.entity.d.ts","sourceRoot":"","sources":["../../src/entities/transfer.entity.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,UAAU,EAOV,KAAK,QAAQ,EAEd,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAE5D,MAAM,MAAM,cAAc,GAAG,UAAU,GAAG,UAAU,GAAG,MAAM,GAAG,QAAQ,GAAG,MAAM,CAAC;AAElF,qBACa,cAAe,SAAQ,UAAU;IAE5C,EAAE,EAAG,MAAM,CAAC;IAGZ,QAAQ,EAAG,MAAM,CAAC;IAGlB,MAAM,EAAG,MAAM,CAAC;IAGhB,MAAM,EAAG,MAAM,CAAC;IAGhB,IAAI,EAAG,MAAM,CAAC;IAOd,MAAM,EAAG,cAAc,CAAC;IAQxB,UAAU,EAAG,cAAc,GAAG,IAAI,CAAC;IAGnC,SAAS,EAAG,MAAM,CAAC;IAInB,OAAO,CAAC,EAAE,QAAQ,CAAC,iBAAiB,CAAC,CAAC;IAGtC,UAAU,EAAG,MAAM,CAAC;IAIpB,QAAQ,CAAC,EAAE,QAAQ,CAAC,iBAAiB,CAAC,CAAC;IAGvC,QAAQ,EAAG,MAAM,CAAC;IAGlB,GAAG,EAAG,MAAM,CAAC;IAGb,KAAK,EAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IAGvC,IAAI,EAAG,MAAM,CAAC;IAGd,SAAS,EAAG,IAAI,CAAC;IAGjB,SAAS,EAAG,IAAI,CAAC;CAClB"}
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
2
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
3
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
4
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
5
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
6
|
+
};
|
|
7
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
8
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
9
|
+
};
|
|
10
|
+
import { BaseEntity, Column, CreateDateColumn, Entity, JoinColumn, ManyToOne, PrimaryGeneratedColumn, UpdateDateColumn, } from 'typeorm';
|
|
11
|
+
import { TransactionEntity } from './transaction.entity.js';
|
|
12
|
+
let TransferEntity = class TransferEntity extends BaseEntity {
|
|
13
|
+
};
|
|
14
|
+
__decorate([
|
|
15
|
+
PrimaryGeneratedColumn({ type: 'bigint' }),
|
|
16
|
+
__metadata("design:type", Number)
|
|
17
|
+
], TransferEntity.prototype, "id", void 0);
|
|
18
|
+
__decorate([
|
|
19
|
+
Column({ name: 'from_type', type: 'varchar', length: 255 }),
|
|
20
|
+
__metadata("design:type", String)
|
|
21
|
+
], TransferEntity.prototype, "fromType", void 0);
|
|
22
|
+
__decorate([
|
|
23
|
+
Column({ name: 'from_id', type: 'varchar', length: 36 }),
|
|
24
|
+
__metadata("design:type", String)
|
|
25
|
+
], TransferEntity.prototype, "fromId", void 0);
|
|
26
|
+
__decorate([
|
|
27
|
+
Column({ name: 'to_type', type: 'varchar', length: 255 }),
|
|
28
|
+
__metadata("design:type", String)
|
|
29
|
+
], TransferEntity.prototype, "toType", void 0);
|
|
30
|
+
__decorate([
|
|
31
|
+
Column({ name: 'to_id', type: 'varchar', length: 36 }),
|
|
32
|
+
__metadata("design:type", String)
|
|
33
|
+
], TransferEntity.prototype, "toId", void 0);
|
|
34
|
+
__decorate([
|
|
35
|
+
Column({
|
|
36
|
+
type: 'enum',
|
|
37
|
+
enum: ['exchange', 'transfer', 'paid', 'refund', 'gift'],
|
|
38
|
+
default: 'transfer',
|
|
39
|
+
}),
|
|
40
|
+
__metadata("design:type", String)
|
|
41
|
+
], TransferEntity.prototype, "status", void 0);
|
|
42
|
+
__decorate([
|
|
43
|
+
Column({
|
|
44
|
+
name: 'status_last',
|
|
45
|
+
type: 'enum',
|
|
46
|
+
enum: ['exchange', 'transfer', 'paid', 'refund', 'gift'],
|
|
47
|
+
nullable: true,
|
|
48
|
+
}),
|
|
49
|
+
__metadata("design:type", Object)
|
|
50
|
+
], TransferEntity.prototype, "statusLast", void 0);
|
|
51
|
+
__decorate([
|
|
52
|
+
Column({ name: 'deposit_id', type: 'bigint' }),
|
|
53
|
+
__metadata("design:type", Number)
|
|
54
|
+
], TransferEntity.prototype, "depositId", void 0);
|
|
55
|
+
__decorate([
|
|
56
|
+
ManyToOne(() => TransactionEntity),
|
|
57
|
+
JoinColumn({ name: 'deposit_id' }),
|
|
58
|
+
__metadata("design:type", Object)
|
|
59
|
+
], TransferEntity.prototype, "deposit", void 0);
|
|
60
|
+
__decorate([
|
|
61
|
+
Column({ name: 'withdraw_id', type: 'bigint' }),
|
|
62
|
+
__metadata("design:type", Number)
|
|
63
|
+
], TransferEntity.prototype, "withdrawId", void 0);
|
|
64
|
+
__decorate([
|
|
65
|
+
ManyToOne(() => TransactionEntity),
|
|
66
|
+
JoinColumn({ name: 'withdraw_id' }),
|
|
67
|
+
__metadata("design:type", Object)
|
|
68
|
+
], TransferEntity.prototype, "withdraw", void 0);
|
|
69
|
+
__decorate([
|
|
70
|
+
Column({ type: 'decimal', precision: 64, scale: 0, default: 0 }),
|
|
71
|
+
__metadata("design:type", String)
|
|
72
|
+
], TransferEntity.prototype, "discount", void 0);
|
|
73
|
+
__decorate([
|
|
74
|
+
Column({ type: 'decimal', precision: 64, scale: 0, default: 0 }),
|
|
75
|
+
__metadata("design:type", String)
|
|
76
|
+
], TransferEntity.prototype, "fee", void 0);
|
|
77
|
+
__decorate([
|
|
78
|
+
Column({ type: 'json', nullable: true }),
|
|
79
|
+
__metadata("design:type", Object)
|
|
80
|
+
], TransferEntity.prototype, "extra", void 0);
|
|
81
|
+
__decorate([
|
|
82
|
+
Column({ type: 'char', length: 36, unique: true }),
|
|
83
|
+
__metadata("design:type", String)
|
|
84
|
+
], TransferEntity.prototype, "uuid", void 0);
|
|
85
|
+
__decorate([
|
|
86
|
+
CreateDateColumn({ name: 'created_at' }),
|
|
87
|
+
__metadata("design:type", Date)
|
|
88
|
+
], TransferEntity.prototype, "createdAt", void 0);
|
|
89
|
+
__decorate([
|
|
90
|
+
UpdateDateColumn({ name: 'updated_at' }),
|
|
91
|
+
__metadata("design:type", Date)
|
|
92
|
+
], TransferEntity.prototype, "updatedAt", void 0);
|
|
93
|
+
TransferEntity = __decorate([
|
|
94
|
+
Entity('transfers')
|
|
95
|
+
], TransferEntity);
|
|
96
|
+
export { TransferEntity };
|
|
97
|
+
//# sourceMappingURL=transfer.entity.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transfer.entity.js","sourceRoot":"","sources":["../../src/entities/transfer.entity.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,EACL,UAAU,EACV,MAAM,EACN,gBAAgB,EAChB,MAAM,EACN,UAAU,EACV,SAAS,EACT,sBAAsB,EAEtB,gBAAgB,GACjB,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAKrD,IAAM,cAAc,GAApB,MAAM,cAAe,SAAQ,UAAU;CA8D7C,CAAA;AA5DC;IADC,sBAAsB,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;;0CAC/B;AAGZ;IADC,MAAM,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC;;gDAC1C;AAGlB;IADC,MAAM,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC;;8CACzC;AAGhB;IADC,MAAM,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC;;8CAC1C;AAGhB;IADC,MAAM,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC;;4CACzC;AAOd;IALC,MAAM,CAAC;QACN,IAAI,EAAE,MAAM;QACZ,IAAI,EAAE,CAAC,UAAU,EAAE,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,CAAC;QACxD,OAAO,EAAE,UAAU;KACpB,CAAC;;8CACsB;AAQxB;IANC,MAAM,CAAC;QACN,IAAI,EAAE,aAAa;QACnB,IAAI,EAAE,MAAM;QACZ,IAAI,EAAE,CAAC,UAAU,EAAE,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,CAAC;QACxD,QAAQ,EAAE,IAAI;KACf,CAAC;;kDACiC;AAGnC;IADC,MAAM,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;;iDAC5B;AAInB;IAFC,SAAS,CAAC,GAAG,EAAE,CAAC,iBAAiB,CAAC;IAClC,UAAU,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC;;+CACG;AAGtC;IADC,MAAM,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;;kDAC5B;AAIpB;IAFC,SAAS,CAAC,GAAG,EAAE,CAAC,iBAAiB,CAAC;IAClC,UAAU,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,CAAC;;gDACG;AAGvC;IADC,MAAM,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC;;gDAC/C;AAGlB;IADC,MAAM,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC;;2CACpD;AAGb;IADC,MAAM,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;6CACF;AAGvC;IADC,MAAM,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;;4CACrC;AAGd;IADC,gBAAgB,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC;8BAC7B,IAAI;iDAAC;AAGjB;IADC,gBAAgB,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC;8BAC7B,IAAI;iDAAC;AA7DN,cAAc;IAD1B,MAAM,CAAC,WAAW,CAAC;GACP,cAAc,CA8D1B"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { BaseEntity } from 'typeorm';
|
|
2
|
+
export declare class WalletEntity extends BaseEntity {
|
|
3
|
+
id: number;
|
|
4
|
+
holderType: string;
|
|
5
|
+
holderId: string;
|
|
6
|
+
name: string;
|
|
7
|
+
slug: string;
|
|
8
|
+
uuid: string;
|
|
9
|
+
description: string | null;
|
|
10
|
+
meta: Record<string, unknown> | null;
|
|
11
|
+
balance: string;
|
|
12
|
+
decimalPlaces: number;
|
|
13
|
+
createdAt: Date;
|
|
14
|
+
updatedAt: Date;
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=wallet.entity.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wallet.entity.d.ts","sourceRoot":"","sources":["../../src/entities/wallet.entity.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,UAAU,EAOX,MAAM,SAAS,CAAC;AAEjB,qBAEa,YAAa,SAAQ,UAAU;IAE1C,EAAE,EAAG,MAAM,CAAC;IAGZ,UAAU,EAAG,MAAM,CAAC;IAGpB,QAAQ,EAAG,MAAM,CAAC;IAGlB,IAAI,EAAG,MAAM,CAAC;IAId,IAAI,EAAG,MAAM,CAAC;IAGd,IAAI,EAAG,MAAM,CAAC;IAGd,WAAW,EAAG,MAAM,GAAG,IAAI,CAAC;IAG5B,IAAI,EAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IAGtC,OAAO,EAAG,MAAM,CAAC;IAGjB,aAAa,EAAG,MAAM,CAAC;IAGvB,SAAS,EAAG,IAAI,CAAC;IAGjB,SAAS,EAAG,IAAI,CAAC;CAClB"}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
2
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
3
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
4
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
5
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
6
|
+
};
|
|
7
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
8
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
9
|
+
};
|
|
10
|
+
import { BaseEntity, Column, CreateDateColumn, Entity, Index, PrimaryGeneratedColumn, UpdateDateColumn, } from 'typeorm';
|
|
11
|
+
let WalletEntity = class WalletEntity extends BaseEntity {
|
|
12
|
+
};
|
|
13
|
+
__decorate([
|
|
14
|
+
PrimaryGeneratedColumn({ type: 'bigint' }),
|
|
15
|
+
__metadata("design:type", Number)
|
|
16
|
+
], WalletEntity.prototype, "id", void 0);
|
|
17
|
+
__decorate([
|
|
18
|
+
Column({ name: 'holder_type', type: 'varchar', length: 255 }),
|
|
19
|
+
__metadata("design:type", String)
|
|
20
|
+
], WalletEntity.prototype, "holderType", void 0);
|
|
21
|
+
__decorate([
|
|
22
|
+
Column({ name: 'holder_id', type: 'varchar', length: 36 }),
|
|
23
|
+
__metadata("design:type", String)
|
|
24
|
+
], WalletEntity.prototype, "holderId", void 0);
|
|
25
|
+
__decorate([
|
|
26
|
+
Column({ type: 'varchar', length: 255 }),
|
|
27
|
+
__metadata("design:type", String)
|
|
28
|
+
], WalletEntity.prototype, "name", void 0);
|
|
29
|
+
__decorate([
|
|
30
|
+
Index(),
|
|
31
|
+
Column({ type: 'varchar', length: 255 }),
|
|
32
|
+
__metadata("design:type", String)
|
|
33
|
+
], WalletEntity.prototype, "slug", void 0);
|
|
34
|
+
__decorate([
|
|
35
|
+
Column({ type: 'char', length: 36, unique: true }),
|
|
36
|
+
__metadata("design:type", String)
|
|
37
|
+
], WalletEntity.prototype, "uuid", void 0);
|
|
38
|
+
__decorate([
|
|
39
|
+
Column({ type: 'varchar', length: 255, nullable: true }),
|
|
40
|
+
__metadata("design:type", Object)
|
|
41
|
+
], WalletEntity.prototype, "description", void 0);
|
|
42
|
+
__decorate([
|
|
43
|
+
Column({ type: 'json', nullable: true }),
|
|
44
|
+
__metadata("design:type", Object)
|
|
45
|
+
], WalletEntity.prototype, "meta", void 0);
|
|
46
|
+
__decorate([
|
|
47
|
+
Column({ type: 'decimal', precision: 64, scale: 0, default: 0 }),
|
|
48
|
+
__metadata("design:type", String)
|
|
49
|
+
], WalletEntity.prototype, "balance", void 0);
|
|
50
|
+
__decorate([
|
|
51
|
+
Column({ name: 'decimal_places', type: 'smallint', unsigned: true, default: 2 }),
|
|
52
|
+
__metadata("design:type", Number)
|
|
53
|
+
], WalletEntity.prototype, "decimalPlaces", void 0);
|
|
54
|
+
__decorate([
|
|
55
|
+
CreateDateColumn({ name: 'created_at' }),
|
|
56
|
+
__metadata("design:type", Date)
|
|
57
|
+
], WalletEntity.prototype, "createdAt", void 0);
|
|
58
|
+
__decorate([
|
|
59
|
+
UpdateDateColumn({ name: 'updated_at' }),
|
|
60
|
+
__metadata("design:type", Date)
|
|
61
|
+
], WalletEntity.prototype, "updatedAt", void 0);
|
|
62
|
+
WalletEntity = __decorate([
|
|
63
|
+
Entity('wallets'),
|
|
64
|
+
Index(['holderType', 'holderId', 'slug'], { unique: true })
|
|
65
|
+
], WalletEntity);
|
|
66
|
+
export { WalletEntity };
|
|
67
|
+
//# sourceMappingURL=wallet.entity.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wallet.entity.js","sourceRoot":"","sources":["../../src/entities/wallet.entity.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,EACL,UAAU,EACV,MAAM,EACN,gBAAgB,EAChB,MAAM,EACN,KAAK,EACL,sBAAsB,EACtB,gBAAgB,GACjB,MAAM,SAAS,CAAC;AAIV,IAAM,YAAY,GAAlB,MAAM,YAAa,SAAQ,UAAU;CAqC3C,CAAA;AAnCC;IADC,sBAAsB,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;;wCAC/B;AAGZ;IADC,MAAM,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC;;gDAC1C;AAGpB;IADC,MAAM,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC;;8CACzC;AAGlB;IADC,MAAM,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC;;0CAC3B;AAId;IAFC,KAAK,EAAE;IACP,MAAM,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC;;0CAC3B;AAGd;IADC,MAAM,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;;0CACrC;AAGd;IADC,MAAM,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;iDAC7B;AAG5B;IADC,MAAM,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;0CACH;AAGtC;IADC,MAAM,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC;;6CAChD;AAGjB;IADC,MAAM,CAAC,EAAE,IAAI,EAAE,gBAAgB,EAAE,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC;;mDAC1D;AAGvB;IADC,gBAAgB,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC;8BAC7B,IAAI;+CAAC;AAGjB;IADC,gBAAgB,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC;8BAC7B,IAAI;+CAAC;AApCN,YAAY;IAFxB,MAAM,CAAC,SAAS,CAAC;IACjB,KAAK,CAAC,CAAC,YAAY,EAAE,UAAU,EAAE,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;GAC/C,YAAY,CAqCxB"}
|
package/dist/errors.d.ts
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export declare class InsufficientFundsError extends Error {
|
|
2
|
+
constructor(message?: string);
|
|
3
|
+
}
|
|
4
|
+
export declare class WalletNotFoundError extends Error {
|
|
5
|
+
constructor(message?: string);
|
|
6
|
+
}
|
|
7
|
+
export declare class WalletLockTimeoutError extends Error {
|
|
8
|
+
constructor(message?: string);
|
|
9
|
+
}
|
|
10
|
+
export declare class ExchangeRateNotFoundError extends Error {
|
|
11
|
+
constructor(message?: string);
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=errors.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA,qBAAa,sBAAuB,SAAQ,KAAK;gBACnC,OAAO,SAAuB;CAI3C;AAED,qBAAa,mBAAoB,SAAQ,KAAK;gBAChC,OAAO,SAAqB;CAIzC;AAED,qBAAa,sBAAuB,SAAQ,KAAK;gBACnC,OAAO,SAAkC;CAItD;AAED,qBAAa,yBAA0B,SAAQ,KAAK;gBACtC,OAAO,SAA4B;CAIhD"}
|
package/dist/errors.js
ADDED
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
export class InsufficientFundsError extends Error {
|
|
2
|
+
constructor(message = 'Insufficient funds') {
|
|
3
|
+
super(message);
|
|
4
|
+
this.name = 'InsufficientFundsError';
|
|
5
|
+
}
|
|
6
|
+
}
|
|
7
|
+
export class WalletNotFoundError extends Error {
|
|
8
|
+
constructor(message = 'Wallet not found') {
|
|
9
|
+
super(message);
|
|
10
|
+
this.name = 'WalletNotFoundError';
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
export class WalletLockTimeoutError extends Error {
|
|
14
|
+
constructor(message = 'Failed to acquire wallet lock') {
|
|
15
|
+
super(message);
|
|
16
|
+
this.name = 'WalletLockTimeoutError';
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
export class ExchangeRateNotFoundError extends Error {
|
|
20
|
+
constructor(message = 'Exchange rate not found') {
|
|
21
|
+
super(message);
|
|
22
|
+
this.name = 'ExchangeRateNotFoundError';
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=errors.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,sBAAuB,SAAQ,KAAK;IAC/C,YAAY,OAAO,GAAG,oBAAoB;QACxC,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,wBAAwB,CAAC;IACvC,CAAC;CACF;AAED,MAAM,OAAO,mBAAoB,SAAQ,KAAK;IAC5C,YAAY,OAAO,GAAG,kBAAkB;QACtC,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,qBAAqB,CAAC;IACpC,CAAC;CACF;AAED,MAAM,OAAO,sBAAuB,SAAQ,KAAK;IAC/C,YAAY,OAAO,GAAG,+BAA+B;QACnD,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,wBAAwB,CAAC;IACvC,CAAC;CACF;AAED,MAAM,OAAO,yBAA0B,SAAQ,KAAK;IAClD,YAAY,OAAO,GAAG,yBAAyB;QAC7C,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,2BAA2B,CAAC;IAC1C,CAAC;CACF"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { EventEmitter2 } from '@nestjs/event-emitter';
|
|
2
|
+
import { type WalletModuleOptions } from '../tokens.js';
|
|
3
|
+
import type { BalanceUpdatedEventPayload, TransactionCreatedEventPayload, WalletCreatedEventPayload } from './wallet.events.js';
|
|
4
|
+
export declare class WalletEventPublisher {
|
|
5
|
+
private readonly emitter?;
|
|
6
|
+
private readonly enabled;
|
|
7
|
+
constructor(options: WalletModuleOptions, emitter?: EventEmitter2 | undefined);
|
|
8
|
+
walletCreated(payload: WalletCreatedEventPayload): void;
|
|
9
|
+
transactionCreated(payload: TransactionCreatedEventPayload): void;
|
|
10
|
+
balanceUpdated(payload: BalanceUpdatedEventPayload): void;
|
|
11
|
+
}
|
|
12
|
+
//# sourceMappingURL=wallet-event.publisher.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wallet-event.publisher.d.ts","sourceRoot":"","sources":["../../src/events/wallet-event.publisher.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAgC,KAAK,mBAAmB,EAAE,MAAM,cAAc,CAAC;AACtF,OAAO,KAAK,EACV,0BAA0B,EAC1B,8BAA8B,EAC9B,yBAAyB,EAC1B,MAAM,oBAAoB,CAAC;AAE5B,qBACa,oBAAoB;IAKjB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC;IAJvC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAU;gBAGR,OAAO,EAAE,mBAAmB,EACvB,OAAO,CAAC,EAAE,aAAa,YAAA;IAKtD,aAAa,CAAC,OAAO,EAAE,yBAAyB,GAAG,IAAI;IAKvD,kBAAkB,CAAC,OAAO,EAAE,8BAA8B,GAAG,IAAI;IAKjE,cAAc,CAAC,OAAO,EAAE,0BAA0B,GAAG,IAAI;CAI1D"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
2
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
3
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
4
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
5
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
6
|
+
};
|
|
7
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
8
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
9
|
+
};
|
|
10
|
+
var __param = (this && this.__param) || function (paramIndex, decorator) {
|
|
11
|
+
return function (target, key) { decorator(target, key, paramIndex); }
|
|
12
|
+
};
|
|
13
|
+
import { Inject, Injectable, Optional } from '@nestjs/common';
|
|
14
|
+
import { EventEmitter2 } from '@nestjs/event-emitter';
|
|
15
|
+
import { WALLET_EVENT, WALLET_OPTIONS } from '../tokens.js';
|
|
16
|
+
let WalletEventPublisher = class WalletEventPublisher {
|
|
17
|
+
constructor(options, emitter) {
|
|
18
|
+
this.emitter = emitter;
|
|
19
|
+
this.enabled = options.events?.enabled !== false && !!this.emitter;
|
|
20
|
+
}
|
|
21
|
+
walletCreated(payload) {
|
|
22
|
+
if (!this.enabled)
|
|
23
|
+
return;
|
|
24
|
+
this.emitter.emit(WALLET_EVENT.WALLET_CREATED, payload);
|
|
25
|
+
}
|
|
26
|
+
transactionCreated(payload) {
|
|
27
|
+
if (!this.enabled)
|
|
28
|
+
return;
|
|
29
|
+
this.emitter.emit(WALLET_EVENT.TRANSACTION_CREATED, payload);
|
|
30
|
+
}
|
|
31
|
+
balanceUpdated(payload) {
|
|
32
|
+
if (!this.enabled)
|
|
33
|
+
return;
|
|
34
|
+
this.emitter.emit(WALLET_EVENT.BALANCE_UPDATED, payload);
|
|
35
|
+
}
|
|
36
|
+
};
|
|
37
|
+
WalletEventPublisher = __decorate([
|
|
38
|
+
Injectable(),
|
|
39
|
+
__param(0, Inject(WALLET_OPTIONS)),
|
|
40
|
+
__param(1, Optional()),
|
|
41
|
+
__metadata("design:paramtypes", [Object, EventEmitter2])
|
|
42
|
+
], WalletEventPublisher);
|
|
43
|
+
export { WalletEventPublisher };
|
|
44
|
+
//# sourceMappingURL=wallet-event.publisher.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wallet-event.publisher.js","sourceRoot":"","sources":["../../src/events/wallet-event.publisher.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC9D,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,YAAY,EAAE,cAAc,EAA4B,MAAM,cAAc,CAAC;AAQ/E,IAAM,oBAAoB,GAA1B,MAAM,oBAAoB;IAG/B,YAC0B,OAA4B,EACvB,OAAuB;QAAvB,YAAO,GAAP,OAAO,CAAgB;QAEpD,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,MAAM,EAAE,OAAO,KAAK,KAAK,IAAI,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC;IACrE,CAAC;IAED,aAAa,CAAC,OAAkC;QAC9C,IAAI,CAAC,IAAI,CAAC,OAAO;YAAE,OAAO;QAC1B,IAAI,CAAC,OAAQ,CAAC,IAAI,CAAC,YAAY,CAAC,cAAc,EAAE,OAAO,CAAC,CAAC;IAC3D,CAAC;IAED,kBAAkB,CAAC,OAAuC;QACxD,IAAI,CAAC,IAAI,CAAC,OAAO;YAAE,OAAO;QAC1B,IAAI,CAAC,OAAQ,CAAC,IAAI,CAAC,YAAY,CAAC,mBAAmB,EAAE,OAAO,CAAC,CAAC;IAChE,CAAC;IAED,cAAc,CAAC,OAAmC;QAChD,IAAI,CAAC,IAAI,CAAC,OAAO;YAAE,OAAO;QAC1B,IAAI,CAAC,OAAQ,CAAC,IAAI,CAAC,YAAY,CAAC,eAAe,EAAE,OAAO,CAAC,CAAC;IAC5D,CAAC;CACF,CAAA;AAxBY,oBAAoB;IADhC,UAAU,EAAE;IAKR,WAAA,MAAM,CAAC,cAAc,CAAC,CAAA;IACtB,WAAA,QAAQ,EAAE,CAAA;6CAA4B,aAAa;GAL3C,oBAAoB,CAwBhC"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
export interface WalletCreatedEventPayload {
|
|
2
|
+
walletId: number;
|
|
3
|
+
holderType: string;
|
|
4
|
+
holderId: string;
|
|
5
|
+
slug: string;
|
|
6
|
+
uuid: string;
|
|
7
|
+
}
|
|
8
|
+
export interface TransactionCreatedEventPayload {
|
|
9
|
+
transactionId: number;
|
|
10
|
+
walletId: number;
|
|
11
|
+
type: 'deposit' | 'withdraw';
|
|
12
|
+
amount: string;
|
|
13
|
+
uuid: string;
|
|
14
|
+
}
|
|
15
|
+
export interface BalanceUpdatedEventPayload {
|
|
16
|
+
walletId: number;
|
|
17
|
+
holderType: string;
|
|
18
|
+
holderId: string;
|
|
19
|
+
balance: string;
|
|
20
|
+
oldBalance: string;
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=wallet.events.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wallet.events.d.ts","sourceRoot":"","sources":["../../src/events/wallet.events.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,yBAAyB;IACxC,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,8BAA8B;IAC7C,aAAa,EAAE,MAAM,CAAC;IACtB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,SAAS,GAAG,UAAU,CAAC;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,0BAA0B;IACzC,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;CACpB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wallet.events.js","sourceRoot":"","sources":["../../src/events/wallet.events.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { TransferEntity } from './entities/transfer.entity.js';
|
|
2
|
+
import type { WalletEntity } from './entities/wallet.entity.js';
|
|
3
|
+
import { type WalletModuleOptions } from './tokens.js';
|
|
4
|
+
import { TransferService } from './transfer.service.js';
|
|
5
|
+
import { WalletService } from './wallet.service.js';
|
|
6
|
+
export declare class ExchangeService {
|
|
7
|
+
private readonly transfers;
|
|
8
|
+
private readonly wallets;
|
|
9
|
+
private rates;
|
|
10
|
+
constructor(transfers: TransferService, wallets: WalletService, options: WalletModuleOptions);
|
|
11
|
+
setExchangeRate(fromCurrency: string, toCurrency: string, rate: number): void;
|
|
12
|
+
getExchangeRate(fromCurrency: string, toCurrency: string): number;
|
|
13
|
+
private currencyOf;
|
|
14
|
+
exchange(from: WalletEntity, to: WalletEntity, amount: number | string, explicitRate?: number): Promise<TransferEntity>;
|
|
15
|
+
exchangeFloat(from: WalletEntity, to: WalletEntity, amount: number, explicitRate?: number): Promise<TransferEntity>;
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=exchange.service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"exchange.service.d.ts","sourceRoot":"","sources":["../src/exchange.service.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AACpE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAEhE,OAAO,EAAkB,KAAK,mBAAmB,EAAE,MAAM,aAAa,CAAC;AACvE,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEpD,qBACa,eAAe;IAIxB,OAAO,CAAC,QAAQ,CAAC,SAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,OAAO;IAJ1B,OAAO,CAAC,KAAK,CAAyC;gBAGnC,SAAS,EAAE,eAAe,EAC1B,OAAO,EAAE,aAAa,EACf,OAAO,EAAE,mBAAmB;IAKtD,eAAe,CAAC,YAAY,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI;IAK7E,eAAe,CAAC,YAAY,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM;IASjE,OAAO,CAAC,UAAU;IASZ,QAAQ,CACZ,IAAI,EAAE,YAAY,EAClB,EAAE,EAAE,YAAY,EAChB,MAAM,EAAE,MAAM,GAAG,MAAM,EACvB,YAAY,CAAC,EAAE,MAAM,GACpB,OAAO,CAAC,cAAc,CAAC;IAcpB,aAAa,CACjB,IAAI,EAAE,YAAY,EAClB,EAAE,EAAE,YAAY,EAChB,MAAM,EAAE,MAAM,EACd,YAAY,CAAC,EAAE,MAAM,GACpB,OAAO,CAAC,cAAc,CAAC;CAI3B"}
|