@hauska-sdk/adapters-storage-postgres 0.1.0
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/CHANGELOG.md +19 -0
- package/dist/index.d.ts +127 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +343 -0
- package/dist/index.js.map +1 -0
- package/package.json +73 -0
package/CHANGELOG.md
ADDED
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
# Changelog - @hauska-sdk/adapters-storage-postgres
|
|
2
|
+
|
|
3
|
+
All notable changes to the PostgreSQL Storage Adapter will be documented in this file.
|
|
4
|
+
|
|
5
|
+
## [0.1.0] - 2025-02-03
|
|
6
|
+
|
|
7
|
+
### Added
|
|
8
|
+
- Initial release of PostgreSQL Storage Adapter
|
|
9
|
+
- Full StorageAdapter interface implementation
|
|
10
|
+
- VDA storage and retrieval
|
|
11
|
+
- Payment record storage
|
|
12
|
+
- Universal metadata indexing (address, patientId, api14)
|
|
13
|
+
- Cross-spoke search with pagination
|
|
14
|
+
- Access pass management
|
|
15
|
+
- Automatic database migrations
|
|
16
|
+
|
|
17
|
+
---
|
|
18
|
+
|
|
19
|
+
[0.1.0]: https://github.com/hauska-sdk/hauska-sdk/releases/tag/@hauska-sdk/adapters-storage-postgres@0.1.0
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @hauska-sdk/adapters-storage-postgres
|
|
3
|
+
* CNS Protocol PostgreSQL Storage Adapter
|
|
4
|
+
*/
|
|
5
|
+
import type { Pool } from "pg";
|
|
6
|
+
import type { VDA } from "@hauska-sdk/vda";
|
|
7
|
+
import type { PaymentRecord } from "@hauska-sdk/payment";
|
|
8
|
+
/**
|
|
9
|
+
* PostgreSQL Storage Adapter Configuration
|
|
10
|
+
*/
|
|
11
|
+
export interface PostgreSQLAdapterConfig {
|
|
12
|
+
/**
|
|
13
|
+
* PostgreSQL connection pool or connection string
|
|
14
|
+
*/
|
|
15
|
+
pool: Pool | string;
|
|
16
|
+
/**
|
|
17
|
+
* Whether to automatically run migrations on initialization
|
|
18
|
+
*/
|
|
19
|
+
autoMigrate?: boolean;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* PostgreSQL Storage Adapter
|
|
23
|
+
*
|
|
24
|
+
* Implements the StorageAdapter interface for PostgreSQL database persistence.
|
|
25
|
+
*/
|
|
26
|
+
export declare class PostgreSQLStorageAdapter {
|
|
27
|
+
private pool;
|
|
28
|
+
private autoMigrate;
|
|
29
|
+
constructor(config: PostgreSQLAdapterConfig);
|
|
30
|
+
/**
|
|
31
|
+
* Initialize database schema
|
|
32
|
+
*/
|
|
33
|
+
private initializeSchema;
|
|
34
|
+
/**
|
|
35
|
+
* Convert database row to VDA
|
|
36
|
+
*/
|
|
37
|
+
private rowToVDA;
|
|
38
|
+
/**
|
|
39
|
+
* Convert VDA to database row
|
|
40
|
+
*/
|
|
41
|
+
private vdaToRow;
|
|
42
|
+
/**
|
|
43
|
+
* Create a VDA
|
|
44
|
+
*/
|
|
45
|
+
createVDA(vda: VDA): Promise<VDA>;
|
|
46
|
+
/**
|
|
47
|
+
* Get a VDA by ID
|
|
48
|
+
*/
|
|
49
|
+
getVDA(vdaId: string): Promise<VDA | null>;
|
|
50
|
+
/**
|
|
51
|
+
* Get a VDA by IPFS CID
|
|
52
|
+
*/
|
|
53
|
+
getVDAByCID(cid: string): Promise<VDA | null>;
|
|
54
|
+
/**
|
|
55
|
+
* List VDAs by owner wallet
|
|
56
|
+
*/
|
|
57
|
+
listVDAsByOwner(wallet: string): Promise<VDA[]>;
|
|
58
|
+
/**
|
|
59
|
+
* List access passes by owner wallet
|
|
60
|
+
*/
|
|
61
|
+
listAccessPassesByOwner(wallet: string): Promise<VDA[]>;
|
|
62
|
+
/**
|
|
63
|
+
* Index VDA by address
|
|
64
|
+
*/
|
|
65
|
+
indexByAddress(_address: string, _vdaId: string): Promise<void>;
|
|
66
|
+
/**
|
|
67
|
+
* Search VDAs by address (supports partial matching)
|
|
68
|
+
*/
|
|
69
|
+
searchByAddress(address: string, options?: {
|
|
70
|
+
limit?: number;
|
|
71
|
+
offset?: number;
|
|
72
|
+
}): Promise<{
|
|
73
|
+
results: VDA[];
|
|
74
|
+
total: number;
|
|
75
|
+
offset: number;
|
|
76
|
+
limit: number;
|
|
77
|
+
}>;
|
|
78
|
+
/**
|
|
79
|
+
* Index VDA by patient ID
|
|
80
|
+
*/
|
|
81
|
+
indexByPatientId(_patientId: string, _vdaId: string): Promise<void>;
|
|
82
|
+
/**
|
|
83
|
+
* Search VDAs by patient ID (exact match)
|
|
84
|
+
*/
|
|
85
|
+
searchByPatientId(patientId: string, options?: {
|
|
86
|
+
limit?: number;
|
|
87
|
+
offset?: number;
|
|
88
|
+
}): Promise<{
|
|
89
|
+
results: VDA[];
|
|
90
|
+
total: number;
|
|
91
|
+
offset: number;
|
|
92
|
+
limit: number;
|
|
93
|
+
}>;
|
|
94
|
+
/**
|
|
95
|
+
* Index VDA by API14
|
|
96
|
+
*/
|
|
97
|
+
indexByAPI14(_api14: string, _vdaId: string): Promise<void>;
|
|
98
|
+
/**
|
|
99
|
+
* Search VDAs by API14 (exact match)
|
|
100
|
+
*/
|
|
101
|
+
searchByAPI14(api14: string, options?: {
|
|
102
|
+
limit?: number;
|
|
103
|
+
offset?: number;
|
|
104
|
+
}): Promise<{
|
|
105
|
+
results: VDA[];
|
|
106
|
+
total: number;
|
|
107
|
+
offset: number;
|
|
108
|
+
limit: number;
|
|
109
|
+
}>;
|
|
110
|
+
/**
|
|
111
|
+
* Transfer ownership of a VDA
|
|
112
|
+
*/
|
|
113
|
+
transferOwnership(vdaId: string, newOwner: string): Promise<void>;
|
|
114
|
+
/**
|
|
115
|
+
* Record a payment
|
|
116
|
+
*/
|
|
117
|
+
recordPayment(_record: PaymentRecord): Promise<void>;
|
|
118
|
+
/**
|
|
119
|
+
* Get a payment record
|
|
120
|
+
*/
|
|
121
|
+
getPayment(_resourceId: string): Promise<PaymentRecord | null>;
|
|
122
|
+
/**
|
|
123
|
+
* Close the database connection pool
|
|
124
|
+
*/
|
|
125
|
+
close(): Promise<void>;
|
|
126
|
+
}
|
|
127
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,IAAI,CAAC;AAC/B,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,iBAAiB,CAAC;AAC3C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEzD;;GAEG;AACH,MAAM,WAAW,uBAAuB;IACtC;;OAEG;IACH,IAAI,EAAE,IAAI,GAAG,MAAM,CAAC;IAEpB;;OAEG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED;;;;GAIG;AACH,qBAAa,wBAAwB;IACnC,OAAO,CAAC,IAAI,CAAO;IACnB,OAAO,CAAC,WAAW,CAAU;gBAEjB,MAAM,EAAE,uBAAuB;IAkB3C;;OAEG;YACW,gBAAgB;IAmC9B;;OAEG;IACH,OAAO,CAAC,QAAQ;IAwBhB;;OAEG;IACH,OAAO,CAAC,QAAQ;IA4BhB;;OAEG;IACG,SAAS,CAAC,GAAG,EAAE,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC;IAkDvC;;OAEG;IACG,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,GAAG,IAAI,CAAC;IAWhD;;OAEG;IACG,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,GAAG,IAAI,CAAC;IAWnD;;OAEG;IACG,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IAOrD;;OAEG;IACG,uBAAuB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IAW7D;;OAEG;IACG,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAMrE;;OAEG;IACG,eAAe,CACnB,OAAO,EAAE,MAAM,EACf,OAAO,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,GAC5C,OAAO,CAAC;QAAE,OAAO,EAAE,GAAG,EAAE,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IAiC5E;;OAEG;IACG,gBAAgB,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIzE;;OAEG;IACG,iBAAiB,CACrB,SAAS,EAAE,MAAM,EACjB,OAAO,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,GAC5C,OAAO,CAAC;QAAE,OAAO,EAAE,GAAG,EAAE,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IA0B5E;;OAEG;IACG,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIjE;;OAEG;IACG,aAAa,CACjB,KAAK,EAAE,MAAM,EACb,OAAO,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,GAC5C,OAAO,CAAC;QAAE,OAAO,EAAE,GAAG,EAAE,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IA0B5E;;OAEG;IACG,iBAAiB,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IASvE;;OAEG;IACG,aAAa,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;IAQ1D;;OAEG;IACG,UAAU,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC;IAMpE;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAG7B"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,343 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @hauska-sdk/adapters-storage-postgres
|
|
3
|
+
* CNS Protocol PostgreSQL Storage Adapter
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* PostgreSQL Storage Adapter
|
|
7
|
+
*
|
|
8
|
+
* Implements the StorageAdapter interface for PostgreSQL database persistence.
|
|
9
|
+
*/
|
|
10
|
+
export class PostgreSQLStorageAdapter {
|
|
11
|
+
pool;
|
|
12
|
+
autoMigrate;
|
|
13
|
+
constructor(config) {
|
|
14
|
+
if (typeof config.pool === "string") {
|
|
15
|
+
// If connection string provided, we need pg Pool
|
|
16
|
+
// eslint-disable-next-line @typescript-eslint/no-require-imports
|
|
17
|
+
const { Pool: PgPool } = require("pg");
|
|
18
|
+
this.pool = new PgPool({ connectionString: config.pool });
|
|
19
|
+
}
|
|
20
|
+
else {
|
|
21
|
+
this.pool = config.pool;
|
|
22
|
+
}
|
|
23
|
+
this.autoMigrate = config.autoMigrate ?? false;
|
|
24
|
+
if (this.autoMigrate) {
|
|
25
|
+
this.initializeSchema().catch((err) => {
|
|
26
|
+
console.error("Failed to initialize database schema:", err);
|
|
27
|
+
});
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Initialize database schema
|
|
32
|
+
*/
|
|
33
|
+
async initializeSchema() {
|
|
34
|
+
const migrationSQL = `
|
|
35
|
+
CREATE TABLE IF NOT EXISTS vdas (
|
|
36
|
+
id UUID PRIMARY KEY,
|
|
37
|
+
asset_id UUID NOT NULL,
|
|
38
|
+
asset_type VARCHAR(50) NOT NULL,
|
|
39
|
+
address TEXT,
|
|
40
|
+
legal_desc TEXT,
|
|
41
|
+
patient_id VARCHAR(100),
|
|
42
|
+
api14 VARCHAR(50),
|
|
43
|
+
owner_wallet VARCHAR(42) NOT NULL,
|
|
44
|
+
grantor_wallet VARCHAR(42),
|
|
45
|
+
spoke VARCHAR(50) NOT NULL,
|
|
46
|
+
ipfs_cid TEXT,
|
|
47
|
+
expiry BIGINT,
|
|
48
|
+
accessible_vdas JSONB,
|
|
49
|
+
permissions JSONB,
|
|
50
|
+
metadata JSONB,
|
|
51
|
+
created_at BIGINT NOT NULL,
|
|
52
|
+
updated_at BIGINT NOT NULL
|
|
53
|
+
);
|
|
54
|
+
|
|
55
|
+
CREATE INDEX IF NOT EXISTS idx_vdas_owner ON vdas(owner_wallet);
|
|
56
|
+
CREATE INDEX IF NOT EXISTS idx_vdas_address ON vdas(address);
|
|
57
|
+
CREATE INDEX IF NOT EXISTS idx_vdas_patient_id ON vdas(patient_id);
|
|
58
|
+
CREATE INDEX IF NOT EXISTS idx_vdas_api14 ON vdas(api14);
|
|
59
|
+
CREATE INDEX IF NOT EXISTS idx_vdas_asset_type ON vdas(asset_type);
|
|
60
|
+
CREATE INDEX IF NOT EXISTS idx_vdas_spoke ON vdas(spoke);
|
|
61
|
+
CREATE INDEX IF NOT EXISTS idx_vdas_ipfs_cid ON vdas(ipfs_cid);
|
|
62
|
+
CREATE INDEX IF NOT EXISTS idx_vdas_expiry ON vdas(expiry) WHERE expiry IS NOT NULL;
|
|
63
|
+
`;
|
|
64
|
+
await this.pool.query(migrationSQL);
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Convert database row to VDA
|
|
68
|
+
*/
|
|
69
|
+
rowToVDA(row) {
|
|
70
|
+
return {
|
|
71
|
+
id: row.id,
|
|
72
|
+
metadata: {
|
|
73
|
+
assetId: row.asset_id,
|
|
74
|
+
assetType: row.asset_type,
|
|
75
|
+
address: row.address,
|
|
76
|
+
legalDesc: row.legal_desc,
|
|
77
|
+
patientId: row.patient_id,
|
|
78
|
+
api14: row.api14,
|
|
79
|
+
ownerWallet: row.owner_wallet,
|
|
80
|
+
grantorWallet: row.grantor_wallet,
|
|
81
|
+
spoke: row.spoke,
|
|
82
|
+
ipfsCid: row.ipfs_cid,
|
|
83
|
+
expiry: row.expiry,
|
|
84
|
+
accessibleVDAs: row.accessible_vdas || undefined,
|
|
85
|
+
permissions: row.permissions || undefined,
|
|
86
|
+
metadata: row.metadata || undefined,
|
|
87
|
+
createdAt: row.created_at,
|
|
88
|
+
updatedAt: row.updated_at,
|
|
89
|
+
},
|
|
90
|
+
};
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Convert VDA to database row
|
|
94
|
+
*/
|
|
95
|
+
vdaToRow(vda) {
|
|
96
|
+
return {
|
|
97
|
+
id: vda.id,
|
|
98
|
+
asset_id: vda.metadata.assetId,
|
|
99
|
+
asset_type: vda.metadata.assetType,
|
|
100
|
+
address: vda.metadata.address || null,
|
|
101
|
+
legal_desc: vda.metadata.legalDesc || null,
|
|
102
|
+
patient_id: vda.metadata.patientId || null,
|
|
103
|
+
api14: vda.metadata.api14 || null,
|
|
104
|
+
owner_wallet: vda.metadata.ownerWallet,
|
|
105
|
+
grantor_wallet: vda.metadata.grantorWallet || null,
|
|
106
|
+
spoke: vda.metadata.spoke,
|
|
107
|
+
ipfs_cid: vda.metadata.ipfsCid || null,
|
|
108
|
+
expiry: vda.metadata.expiry || null,
|
|
109
|
+
accessible_vdas: vda.metadata.accessibleVDAs
|
|
110
|
+
? vda.metadata.accessibleVDAs
|
|
111
|
+
: null,
|
|
112
|
+
permissions: vda.metadata.permissions
|
|
113
|
+
? vda.metadata.permissions
|
|
114
|
+
: null,
|
|
115
|
+
metadata: vda.metadata.metadata
|
|
116
|
+
? JSON.stringify(vda.metadata.metadata)
|
|
117
|
+
: null,
|
|
118
|
+
created_at: vda.metadata.createdAt,
|
|
119
|
+
updated_at: vda.metadata.updatedAt,
|
|
120
|
+
};
|
|
121
|
+
}
|
|
122
|
+
/**
|
|
123
|
+
* Create a VDA
|
|
124
|
+
*/
|
|
125
|
+
async createVDA(vda) {
|
|
126
|
+
const row = this.vdaToRow(vda);
|
|
127
|
+
const query = `
|
|
128
|
+
INSERT INTO vdas (
|
|
129
|
+
id, asset_id, asset_type, address, legal_desc, patient_id, api14,
|
|
130
|
+
owner_wallet, grantor_wallet, spoke, ipfs_cid, expiry,
|
|
131
|
+
accessible_vdas, permissions, metadata, created_at, updated_at
|
|
132
|
+
) VALUES (
|
|
133
|
+
$1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12, $13, $14, $15, $16, $17
|
|
134
|
+
) RETURNING *
|
|
135
|
+
`;
|
|
136
|
+
const values = [
|
|
137
|
+
row.id,
|
|
138
|
+
row.asset_id,
|
|
139
|
+
row.asset_type,
|
|
140
|
+
row.address,
|
|
141
|
+
row.legal_desc,
|
|
142
|
+
row.patient_id,
|
|
143
|
+
row.api14,
|
|
144
|
+
row.owner_wallet,
|
|
145
|
+
row.grantor_wallet,
|
|
146
|
+
row.spoke,
|
|
147
|
+
row.ipfs_cid,
|
|
148
|
+
row.expiry,
|
|
149
|
+
row.accessible_vdas,
|
|
150
|
+
row.permissions,
|
|
151
|
+
row.metadata,
|
|
152
|
+
row.created_at,
|
|
153
|
+
row.updated_at,
|
|
154
|
+
];
|
|
155
|
+
const result = await this.pool.query(query, values);
|
|
156
|
+
const created = this.rowToVDA(result.rows[0]);
|
|
157
|
+
// Index by universal keys
|
|
158
|
+
if (vda.metadata.address) {
|
|
159
|
+
await this.indexByAddress(vda.metadata.address, vda.id);
|
|
160
|
+
}
|
|
161
|
+
if (vda.metadata.patientId) {
|
|
162
|
+
await this.indexByPatientId(vda.metadata.patientId, vda.id);
|
|
163
|
+
}
|
|
164
|
+
if (vda.metadata.api14) {
|
|
165
|
+
await this.indexByAPI14(vda.metadata.api14, vda.id);
|
|
166
|
+
}
|
|
167
|
+
return created;
|
|
168
|
+
}
|
|
169
|
+
/**
|
|
170
|
+
* Get a VDA by ID
|
|
171
|
+
*/
|
|
172
|
+
async getVDA(vdaId) {
|
|
173
|
+
const query = `SELECT * FROM vdas WHERE id = $1`;
|
|
174
|
+
const result = await this.pool.query(query, [vdaId]);
|
|
175
|
+
if (result.rows.length === 0) {
|
|
176
|
+
return null;
|
|
177
|
+
}
|
|
178
|
+
return this.rowToVDA(result.rows[0]);
|
|
179
|
+
}
|
|
180
|
+
/**
|
|
181
|
+
* Get a VDA by IPFS CID
|
|
182
|
+
*/
|
|
183
|
+
async getVDAByCID(cid) {
|
|
184
|
+
const query = `SELECT * FROM vdas WHERE ipfs_cid = $1`;
|
|
185
|
+
const result = await this.pool.query(query, [cid]);
|
|
186
|
+
if (result.rows.length === 0) {
|
|
187
|
+
return null;
|
|
188
|
+
}
|
|
189
|
+
return this.rowToVDA(result.rows[0]);
|
|
190
|
+
}
|
|
191
|
+
/**
|
|
192
|
+
* List VDAs by owner wallet
|
|
193
|
+
*/
|
|
194
|
+
async listVDAsByOwner(wallet) {
|
|
195
|
+
const query = `SELECT * FROM vdas WHERE owner_wallet = $1 ORDER BY created_at DESC`;
|
|
196
|
+
const result = await this.pool.query(query, [wallet]);
|
|
197
|
+
return result.rows.map((row) => this.rowToVDA(row));
|
|
198
|
+
}
|
|
199
|
+
/**
|
|
200
|
+
* List access passes by owner wallet
|
|
201
|
+
*/
|
|
202
|
+
async listAccessPassesByOwner(wallet) {
|
|
203
|
+
const query = `
|
|
204
|
+
SELECT * FROM vdas
|
|
205
|
+
WHERE owner_wallet = $1 AND asset_type = 'access-pass'
|
|
206
|
+
ORDER BY created_at DESC
|
|
207
|
+
`;
|
|
208
|
+
const result = await this.pool.query(query, [wallet]);
|
|
209
|
+
return result.rows.map((row) => this.rowToVDA(row));
|
|
210
|
+
}
|
|
211
|
+
/**
|
|
212
|
+
* Index VDA by address
|
|
213
|
+
*/
|
|
214
|
+
async indexByAddress(_address, _vdaId) {
|
|
215
|
+
// Indexing is handled by the database index on the address column
|
|
216
|
+
// This method exists for interface compatibility
|
|
217
|
+
// We could add a separate index table here if needed for more complex queries
|
|
218
|
+
}
|
|
219
|
+
/**
|
|
220
|
+
* Search VDAs by address (supports partial matching)
|
|
221
|
+
*/
|
|
222
|
+
async searchByAddress(address, options) {
|
|
223
|
+
// Normalize address for searching (lowercase, trim)
|
|
224
|
+
const normalizedAddress = address.toLowerCase().trim();
|
|
225
|
+
// Use ILIKE for case-insensitive partial matching
|
|
226
|
+
// Match addresses that contain the search term
|
|
227
|
+
const searchPattern = `%${normalizedAddress}%`;
|
|
228
|
+
// Count total results
|
|
229
|
+
const countQuery = `SELECT COUNT(*) FROM vdas WHERE LOWER(address) LIKE $1`;
|
|
230
|
+
const countResult = await this.pool.query(countQuery, [searchPattern]);
|
|
231
|
+
const total = parseInt(countResult.rows[0].count, 10);
|
|
232
|
+
// Get paginated results
|
|
233
|
+
const limit = options?.limit ?? 100;
|
|
234
|
+
const offset = options?.offset ?? 0;
|
|
235
|
+
const query = `
|
|
236
|
+
SELECT * FROM vdas
|
|
237
|
+
WHERE LOWER(address) LIKE $1
|
|
238
|
+
ORDER BY created_at DESC
|
|
239
|
+
LIMIT $2 OFFSET $3
|
|
240
|
+
`;
|
|
241
|
+
const result = await this.pool.query(query, [searchPattern, limit, offset]);
|
|
242
|
+
return {
|
|
243
|
+
results: result.rows.map((row) => this.rowToVDA(row)),
|
|
244
|
+
total,
|
|
245
|
+
offset,
|
|
246
|
+
limit,
|
|
247
|
+
};
|
|
248
|
+
}
|
|
249
|
+
/**
|
|
250
|
+
* Index VDA by patient ID
|
|
251
|
+
*/
|
|
252
|
+
async indexByPatientId(_patientId, _vdaId) {
|
|
253
|
+
// Indexing is handled by the database index on the patient_id column
|
|
254
|
+
}
|
|
255
|
+
/**
|
|
256
|
+
* Search VDAs by patient ID (exact match)
|
|
257
|
+
*/
|
|
258
|
+
async searchByPatientId(patientId, options) {
|
|
259
|
+
// Count total results
|
|
260
|
+
const countQuery = `SELECT COUNT(*) FROM vdas WHERE patient_id = $1`;
|
|
261
|
+
const countResult = await this.pool.query(countQuery, [patientId]);
|
|
262
|
+
const total = parseInt(countResult.rows[0].count, 10);
|
|
263
|
+
// Get paginated results
|
|
264
|
+
const limit = options?.limit ?? 100;
|
|
265
|
+
const offset = options?.offset ?? 0;
|
|
266
|
+
const query = `
|
|
267
|
+
SELECT * FROM vdas
|
|
268
|
+
WHERE patient_id = $1
|
|
269
|
+
ORDER BY created_at DESC
|
|
270
|
+
LIMIT $2 OFFSET $3
|
|
271
|
+
`;
|
|
272
|
+
const result = await this.pool.query(query, [patientId, limit, offset]);
|
|
273
|
+
return {
|
|
274
|
+
results: result.rows.map((row) => this.rowToVDA(row)),
|
|
275
|
+
total,
|
|
276
|
+
offset,
|
|
277
|
+
limit,
|
|
278
|
+
};
|
|
279
|
+
}
|
|
280
|
+
/**
|
|
281
|
+
* Index VDA by API14
|
|
282
|
+
*/
|
|
283
|
+
async indexByAPI14(_api14, _vdaId) {
|
|
284
|
+
// Indexing is handled by the database index on the api14 column
|
|
285
|
+
}
|
|
286
|
+
/**
|
|
287
|
+
* Search VDAs by API14 (exact match)
|
|
288
|
+
*/
|
|
289
|
+
async searchByAPI14(api14, options) {
|
|
290
|
+
// Count total results
|
|
291
|
+
const countQuery = `SELECT COUNT(*) FROM vdas WHERE api14 = $1`;
|
|
292
|
+
const countResult = await this.pool.query(countQuery, [api14]);
|
|
293
|
+
const total = parseInt(countResult.rows[0].count, 10);
|
|
294
|
+
// Get paginated results
|
|
295
|
+
const limit = options?.limit ?? 100;
|
|
296
|
+
const offset = options?.offset ?? 0;
|
|
297
|
+
const query = `
|
|
298
|
+
SELECT * FROM vdas
|
|
299
|
+
WHERE api14 = $1
|
|
300
|
+
ORDER BY created_at DESC
|
|
301
|
+
LIMIT $2 OFFSET $3
|
|
302
|
+
`;
|
|
303
|
+
const result = await this.pool.query(query, [api14, limit, offset]);
|
|
304
|
+
return {
|
|
305
|
+
results: result.rows.map((row) => this.rowToVDA(row)),
|
|
306
|
+
total,
|
|
307
|
+
offset,
|
|
308
|
+
limit,
|
|
309
|
+
};
|
|
310
|
+
}
|
|
311
|
+
/**
|
|
312
|
+
* Transfer ownership of a VDA
|
|
313
|
+
*/
|
|
314
|
+
async transferOwnership(vdaId, newOwner) {
|
|
315
|
+
const query = `
|
|
316
|
+
UPDATE vdas
|
|
317
|
+
SET owner_wallet = $1, updated_at = $2
|
|
318
|
+
WHERE id = $3
|
|
319
|
+
`;
|
|
320
|
+
await this.pool.query(query, [newOwner, Date.now(), vdaId]);
|
|
321
|
+
}
|
|
322
|
+
/**
|
|
323
|
+
* Record a payment
|
|
324
|
+
*/
|
|
325
|
+
async recordPayment(_record) {
|
|
326
|
+
// Payment records table would need to be created separately
|
|
327
|
+
// For now, we'll throw an error indicating this needs to be implemented
|
|
328
|
+
throw new Error("Payment record storage not yet implemented in PostgreSQL adapter");
|
|
329
|
+
}
|
|
330
|
+
/**
|
|
331
|
+
* Get a payment record
|
|
332
|
+
*/
|
|
333
|
+
async getPayment(_resourceId) {
|
|
334
|
+
throw new Error("Payment record retrieval not yet implemented in PostgreSQL adapter");
|
|
335
|
+
}
|
|
336
|
+
/**
|
|
337
|
+
* Close the database connection pool
|
|
338
|
+
*/
|
|
339
|
+
async close() {
|
|
340
|
+
await this.pool.end();
|
|
341
|
+
}
|
|
342
|
+
}
|
|
343
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@hauska-sdk/adapters-storage-postgres",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "CNS Protocol PostgreSQL Storage Adapter",
|
|
5
|
+
"main": "./dist/index.js",
|
|
6
|
+
"module": "./dist/index.js",
|
|
7
|
+
"types": "./dist/index.d.ts",
|
|
8
|
+
"exports": {
|
|
9
|
+
".": {
|
|
10
|
+
"import": "./dist/index.js",
|
|
11
|
+
"require": "./dist/index.js",
|
|
12
|
+
"types": "./dist/index.d.ts"
|
|
13
|
+
}
|
|
14
|
+
},
|
|
15
|
+
"scripts": {
|
|
16
|
+
"build": "tsc",
|
|
17
|
+
"clean": "rimraf dist",
|
|
18
|
+
"test": "vitest run",
|
|
19
|
+
"test:watch": "vitest",
|
|
20
|
+
"test:coverage": "vitest run --coverage",
|
|
21
|
+
"type-check": "tsc --noEmit"
|
|
22
|
+
},
|
|
23
|
+
"dependencies": {
|
|
24
|
+
"pg": "^8.11.3",
|
|
25
|
+
"@types/pg": "^8.10.9"
|
|
26
|
+
},
|
|
27
|
+
"devDependencies": {
|
|
28
|
+
"typescript": "^5.3.3",
|
|
29
|
+
"rimraf": "^5.0.5",
|
|
30
|
+
"vitest": "^4.0.18"
|
|
31
|
+
},
|
|
32
|
+
"keywords": [
|
|
33
|
+
"cns-protocol",
|
|
34
|
+
"storage",
|
|
35
|
+
"postgres",
|
|
36
|
+
"postgresql",
|
|
37
|
+
"adapter",
|
|
38
|
+
"database"
|
|
39
|
+
],
|
|
40
|
+
"author": "Hauska SDK Team",
|
|
41
|
+
"license": "MIT",
|
|
42
|
+
"repository": {
|
|
43
|
+
"type": "git",
|
|
44
|
+
"url": "https://github.com/hauska-sdk/hauska-sdk.git",
|
|
45
|
+
"directory": "packages/adapters/storage-postgres"
|
|
46
|
+
},
|
|
47
|
+
"bugs": {
|
|
48
|
+
"url": "https://github.com/hauska-sdk/hauska-sdk/issues"
|
|
49
|
+
},
|
|
50
|
+
"homepage": "https://github.com/hauska-sdk/hauska-sdk#readme",
|
|
51
|
+
"engines": {
|
|
52
|
+
"node": ">=18.0.0",
|
|
53
|
+
"npm": ">=9.0.0"
|
|
54
|
+
},
|
|
55
|
+
"files": [
|
|
56
|
+
"dist",
|
|
57
|
+
"README.md",
|
|
58
|
+
"CHANGELOG.md"
|
|
59
|
+
],
|
|
60
|
+
"scripts": {
|
|
61
|
+
"build": "tsc",
|
|
62
|
+
"clean": "rimraf dist",
|
|
63
|
+
"test": "vitest run",
|
|
64
|
+
"test:watch": "vitest",
|
|
65
|
+
"test:coverage": "vitest run --coverage",
|
|
66
|
+
"type-check": "tsc --noEmit",
|
|
67
|
+
"prepublishOnly": "npm run build"
|
|
68
|
+
},
|
|
69
|
+
"publishConfig": {
|
|
70
|
+
"access": "public",
|
|
71
|
+
"registry": "https://registry.npmjs.org"
|
|
72
|
+
}
|
|
73
|
+
}
|