@lssm/integration.providers-impls 1.41.0 → 1.42.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.
Files changed (99) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +4 -1
  3. package/dist/_virtual/rolldown_runtime.js +36 -1
  4. package/dist/calendar.d.ts +8 -0
  5. package/dist/calendar.d.ts.map +1 -0
  6. package/dist/calendar.js +3 -1
  7. package/dist/email.d.ts +8 -0
  8. package/dist/email.d.ts.map +1 -0
  9. package/dist/email.js +3 -1
  10. package/dist/embedding.d.ts +8 -0
  11. package/dist/embedding.d.ts.map +1 -0
  12. package/dist/embedding.js +3 -1
  13. package/dist/impls/elevenlabs-voice.d.ts +21 -0
  14. package/dist/impls/elevenlabs-voice.d.ts.map +1 -0
  15. package/dist/impls/elevenlabs-voice.js +93 -1
  16. package/dist/impls/elevenlabs-voice.js.map +1 -0
  17. package/dist/impls/gcs-storage.d.ts +25 -0
  18. package/dist/impls/gcs-storage.d.ts.map +1 -0
  19. package/dist/impls/gcs-storage.js +90 -1
  20. package/dist/impls/gcs-storage.js.map +1 -0
  21. package/dist/impls/gmail-inbound.d.ts +27 -0
  22. package/dist/impls/gmail-inbound.d.ts.map +1 -0
  23. package/dist/impls/gmail-inbound.js +201 -1
  24. package/dist/impls/gmail-inbound.js.map +1 -0
  25. package/dist/impls/gmail-outbound.d.ts +19 -0
  26. package/dist/impls/gmail-outbound.d.ts.map +1 -0
  27. package/dist/impls/gmail-outbound.js +105 -5
  28. package/dist/impls/gmail-outbound.js.map +1 -0
  29. package/dist/impls/google-calendar.d.ts +24 -0
  30. package/dist/impls/google-calendar.d.ts.map +1 -0
  31. package/dist/impls/google-calendar.js +155 -1
  32. package/dist/impls/google-calendar.js.map +1 -0
  33. package/dist/impls/index.d.ts +15 -0
  34. package/dist/impls/index.js +16 -1
  35. package/dist/impls/mistral-embedding.d.ts +24 -0
  36. package/dist/impls/mistral-embedding.d.ts.map +1 -0
  37. package/dist/impls/mistral-embedding.js +42 -1
  38. package/dist/impls/mistral-embedding.js.map +1 -0
  39. package/dist/impls/mistral-llm.d.ts +32 -0
  40. package/dist/impls/mistral-llm.d.ts.map +1 -0
  41. package/dist/impls/mistral-llm.js +248 -1
  42. package/dist/impls/mistral-llm.js.map +1 -0
  43. package/dist/impls/postmark-email.d.ts +20 -0
  44. package/dist/impls/postmark-email.d.ts.map +1 -0
  45. package/dist/impls/postmark-email.js +56 -1
  46. package/dist/impls/postmark-email.js.map +1 -0
  47. package/dist/impls/powens-client.d.ts +125 -0
  48. package/dist/impls/powens-client.d.ts.map +1 -0
  49. package/dist/impls/powens-client.js +172 -1
  50. package/dist/impls/powens-client.js.map +1 -0
  51. package/dist/impls/powens-openbanking.d.ts +28 -0
  52. package/dist/impls/powens-openbanking.d.ts.map +1 -0
  53. package/dist/impls/powens-openbanking.js +219 -1
  54. package/dist/impls/powens-openbanking.js.map +1 -0
  55. package/dist/impls/provider-factory.d.ts +27 -0
  56. package/dist/impls/provider-factory.d.ts.map +1 -0
  57. package/dist/impls/provider-factory.js +143 -1
  58. package/dist/impls/provider-factory.js.map +1 -0
  59. package/dist/impls/qdrant-vector.d.ts +25 -0
  60. package/dist/impls/qdrant-vector.d.ts.map +1 -0
  61. package/dist/impls/qdrant-vector.js +72 -1
  62. package/dist/impls/qdrant-vector.js.map +1 -0
  63. package/dist/impls/stripe-payments.d.ts +29 -0
  64. package/dist/impls/stripe-payments.d.ts.map +1 -0
  65. package/dist/impls/stripe-payments.js +203 -1
  66. package/dist/impls/stripe-payments.js.map +1 -0
  67. package/dist/impls/twilio-sms.d.ts +21 -0
  68. package/dist/impls/twilio-sms.d.ts.map +1 -0
  69. package/dist/impls/twilio-sms.js +59 -1
  70. package/dist/impls/twilio-sms.js.map +1 -0
  71. package/dist/index.d.ts +44 -0
  72. package/dist/index.d.ts.map +1 -0
  73. package/dist/index.js +69 -1
  74. package/dist/index.js.map +1 -0
  75. package/dist/llm.d.ts +8 -0
  76. package/dist/llm.d.ts.map +1 -0
  77. package/dist/llm.js +3 -1
  78. package/dist/openbanking.d.ts +8 -0
  79. package/dist/openbanking.d.ts.map +1 -0
  80. package/dist/openbanking.js +3 -1
  81. package/dist/payments.d.ts +8 -0
  82. package/dist/payments.d.ts.map +1 -0
  83. package/dist/payments.js +3 -1
  84. package/dist/runtime.d.ts +2 -0
  85. package/dist/secrets/provider.d.ts +2 -0
  86. package/dist/secrets/provider.js +3 -1
  87. package/dist/sms.d.ts +8 -0
  88. package/dist/sms.d.ts.map +1 -0
  89. package/dist/sms.js +3 -1
  90. package/dist/storage.d.ts +8 -0
  91. package/dist/storage.d.ts.map +1 -0
  92. package/dist/storage.js +3 -1
  93. package/dist/vector-store.d.ts +8 -0
  94. package/dist/vector-store.d.ts.map +1 -0
  95. package/dist/vector-store.js +3 -1
  96. package/dist/voice.d.ts +8 -0
  97. package/dist/voice.d.ts.map +1 -0
  98. package/dist/voice.js +3 -1
  99. package/package.json +46 -38
@@ -1 +1,172 @@
1
- import{URL as e}from"node:url";const t={sandbox:`https://api-sandbox.powens.com/v2`,production:`https://api.powens.com/v2`};var n=class extends Error{status;code;requestId;response;constructor(e,t,n,r,i){super(e),this.name=`PowensClientError`,this.status=t,this.code=n,this.requestId=r,this.response=i}},r=class{clientId;clientSecret;apiKey;fetchImpl;logger;defaultTimeoutMs;token;baseUrl;constructor(e){this.clientId=e.clientId,this.clientSecret=e.clientSecret,this.apiKey=e.apiKey,this.fetchImpl=e.fetchImpl??fetch,this.logger=e.logger,this.defaultTimeoutMs=e.defaultTimeoutMs??15e3,this.baseUrl=e.baseUrl??t[e.environment]??t.production}async listAccounts(e){let t={cursor:e.cursor,limit:e.limit,include_balances:e.includeBalances,institution_uuid:e.institutionUuid};return await this.request({method:`GET`,path:`/users/${encodeURIComponent(e.userUuid)}/accounts`,searchParams:t})}async getAccount(e){return this.request({method:`GET`,path:`/accounts/${encodeURIComponent(e)}`})}async listTransactions(e){let t={cursor:e.cursor,limit:e.limit,from:e.from,to:e.to,include_pending:e.includePending};return this.request({method:`GET`,path:`/accounts/${encodeURIComponent(e.accountUuid)}/transactions`,searchParams:t})}async getBalances(e){return this.request({method:`GET`,path:`/accounts/${encodeURIComponent(e)}/balances`})}async getConnectionStatus(e){return this.request({method:`GET`,path:`/connections/${encodeURIComponent(e)}`})}async request(t){let r=new e(t.path,this.baseUrl);if(t.searchParams)for(let[e,n]of Object.entries(t.searchParams))n!=null&&r.searchParams.set(e,String(n));let i={Accept:`application/json`,"Content-Type":`application/json`,...t.headers};this.apiKey&&(i[`x-api-key`]=this.apiKey),t.skipAuth||(i.Authorization=`Bearer ${await this.ensureAccessToken()}`);let a=new AbortController,o=setTimeout(()=>a.abort(),t.timeoutMs??this.defaultTimeoutMs);try{let e=await this.fetchImpl(r,{method:t.method,headers:i,body:t.body?JSON.stringify(t.body):void 0,signal:a.signal}),o=e.headers.get(`x-request-id`)??void 0;if(!e.ok){let t;try{t=await e.json()}catch{}let r=typeof t==`object`&&t?t:void 0,i=typeof r?.message==`string`?r.message:`Powens API request failed with status ${e.status}`,a=typeof r?.code==`string`?r.code:void 0;throw new n(i,e.status,a,o,t)}if(e.status===204)return;try{return await e.json()}catch(t){throw this.logger?.error?.(`[PowensClient] Failed to parse JSON response`,t),new n(`Failed to parse Powens response payload as JSON`,e.status,void 0,o)}}catch(e){throw e instanceof n?e:e.name===`AbortError`?new n(`Powens API request timed out after ${t.timeoutMs??this.defaultTimeoutMs}ms`,408):(this.logger?.error?.(`[PowensClient] Request failed`,e),new n(e.message??`Powens API request failed`,500))}finally{clearTimeout(o)}}async ensureAccessToken(){return this.token&&Date.now()<this.token.expiresAt-5e3||(this.token=await this.fetchAccessToken()),this.token.accessToken}async fetchAccessToken(){let t=new e(`/oauth/token`,this.baseUrl),r=Buffer.from(`${this.clientId}:${this.clientSecret}`,`utf-8`).toString(`base64`),i=await this.fetchImpl(t,{method:`POST`,headers:{Authorization:`Basic ${r}`,"Content-Type":`application/x-www-form-urlencoded`,Accept:`application/json`},body:new URLSearchParams({grant_type:`client_credentials`}).toString()});if(!i.ok){let e;try{e=await i.json()}catch{}let t=typeof e==`object`&&e?e:void 0;throw new n(typeof t?.error_description==`string`?t.error_description:`Failed to obtain Powens access token`,i.status,void 0,void 0,e)}let a=await i.json(),o=Date.now()+a.expires_in*1e3;return this.logger?.debug?.(`[PowensClient] Received access token`,{expiresIn:a.expires_in}),{accessToken:a.access_token,expiresAt:o,scope:a.scope}}};export{r as PowensClient,n as PowensClientError};
1
+ import { URL } from "node:url";
2
+
3
+ //#region src/impls/powens-client.ts
4
+ const POWENS_BASE_URL = {
5
+ sandbox: "https://api-sandbox.powens.com/v2",
6
+ production: "https://api.powens.com/v2"
7
+ };
8
+ var PowensClientError = class extends Error {
9
+ status;
10
+ code;
11
+ requestId;
12
+ response;
13
+ constructor(message, status, code, requestId, response) {
14
+ super(message);
15
+ this.name = "PowensClientError";
16
+ this.status = status;
17
+ this.code = code;
18
+ this.requestId = requestId;
19
+ this.response = response;
20
+ }
21
+ };
22
+ var PowensClient = class {
23
+ clientId;
24
+ clientSecret;
25
+ apiKey;
26
+ fetchImpl;
27
+ logger;
28
+ defaultTimeoutMs;
29
+ token;
30
+ baseUrl;
31
+ constructor(options) {
32
+ this.clientId = options.clientId;
33
+ this.clientSecret = options.clientSecret;
34
+ this.apiKey = options.apiKey;
35
+ this.fetchImpl = options.fetchImpl ?? fetch;
36
+ this.logger = options.logger;
37
+ this.defaultTimeoutMs = options.defaultTimeoutMs ?? 15e3;
38
+ this.baseUrl = options.baseUrl ?? POWENS_BASE_URL[options.environment] ?? POWENS_BASE_URL.production;
39
+ }
40
+ async listAccounts(params) {
41
+ const searchParams = {
42
+ cursor: params.cursor,
43
+ limit: params.limit,
44
+ include_balances: params.includeBalances,
45
+ institution_uuid: params.institutionUuid
46
+ };
47
+ return await this.request({
48
+ method: "GET",
49
+ path: `/users/${encodeURIComponent(params.userUuid)}/accounts`,
50
+ searchParams
51
+ });
52
+ }
53
+ async getAccount(accountUuid) {
54
+ return this.request({
55
+ method: "GET",
56
+ path: `/accounts/${encodeURIComponent(accountUuid)}`
57
+ });
58
+ }
59
+ async listTransactions(params) {
60
+ const searchParams = {
61
+ cursor: params.cursor,
62
+ limit: params.limit,
63
+ from: params.from,
64
+ to: params.to,
65
+ include_pending: params.includePending
66
+ };
67
+ return this.request({
68
+ method: "GET",
69
+ path: `/accounts/${encodeURIComponent(params.accountUuid)}/transactions`,
70
+ searchParams
71
+ });
72
+ }
73
+ async getBalances(accountUuid) {
74
+ return this.request({
75
+ method: "GET",
76
+ path: `/accounts/${encodeURIComponent(accountUuid)}/balances`
77
+ });
78
+ }
79
+ async getConnectionStatus(connectionUuid) {
80
+ return this.request({
81
+ method: "GET",
82
+ path: `/connections/${encodeURIComponent(connectionUuid)}`
83
+ });
84
+ }
85
+ async request(options) {
86
+ const url = new URL(options.path, this.baseUrl);
87
+ if (options.searchParams) for (const [key, value] of Object.entries(options.searchParams)) {
88
+ if (value === void 0 || value === null) continue;
89
+ url.searchParams.set(key, String(value));
90
+ }
91
+ const headers = {
92
+ Accept: "application/json",
93
+ "Content-Type": "application/json",
94
+ ...options.headers
95
+ };
96
+ if (this.apiKey) headers["x-api-key"] = this.apiKey;
97
+ if (!options.skipAuth) headers.Authorization = `Bearer ${await this.ensureAccessToken()}`;
98
+ const controller = new AbortController();
99
+ const timeout = setTimeout(() => controller.abort(), options.timeoutMs ?? this.defaultTimeoutMs);
100
+ try {
101
+ const response = await this.fetchImpl(url, {
102
+ method: options.method,
103
+ headers,
104
+ body: options.body ? JSON.stringify(options.body) : void 0,
105
+ signal: controller.signal
106
+ });
107
+ const requestId = response.headers.get("x-request-id") ?? void 0;
108
+ if (!response.ok) {
109
+ let errorBody;
110
+ try {
111
+ errorBody = await response.json();
112
+ } catch {}
113
+ const errorObject = typeof errorBody === "object" && errorBody !== null ? errorBody : void 0;
114
+ const message = typeof errorObject?.message === "string" ? errorObject.message : `Powens API request failed with status ${response.status}`;
115
+ const code = typeof errorObject?.code === "string" ? errorObject.code : void 0;
116
+ throw new PowensClientError(message, response.status, code, requestId, errorBody);
117
+ }
118
+ if (response.status === 204) return;
119
+ try {
120
+ return await response.json();
121
+ } catch (error) {
122
+ this.logger?.error?.("[PowensClient] Failed to parse JSON response", error);
123
+ throw new PowensClientError("Failed to parse Powens response payload as JSON", response.status, void 0, requestId);
124
+ }
125
+ } catch (error) {
126
+ if (error instanceof PowensClientError) throw error;
127
+ if (error.name === "AbortError") throw new PowensClientError(`Powens API request timed out after ${options.timeoutMs ?? this.defaultTimeoutMs}ms`, 408);
128
+ this.logger?.error?.("[PowensClient] Request failed", error);
129
+ throw new PowensClientError(error.message ?? "Powens API request failed", 500);
130
+ } finally {
131
+ clearTimeout(timeout);
132
+ }
133
+ }
134
+ async ensureAccessToken() {
135
+ if (this.token && Date.now() < this.token.expiresAt - 5e3) return this.token.accessToken;
136
+ this.token = await this.fetchAccessToken();
137
+ return this.token.accessToken;
138
+ }
139
+ async fetchAccessToken() {
140
+ const url = new URL("/oauth/token", this.baseUrl);
141
+ const basicAuth = Buffer.from(`${this.clientId}:${this.clientSecret}`, "utf-8").toString("base64");
142
+ const response = await this.fetchImpl(url, {
143
+ method: "POST",
144
+ headers: {
145
+ Authorization: `Basic ${basicAuth}`,
146
+ "Content-Type": "application/x-www-form-urlencoded",
147
+ Accept: "application/json"
148
+ },
149
+ body: new URLSearchParams({ grant_type: "client_credentials" }).toString()
150
+ });
151
+ if (!response.ok) {
152
+ let errorBody;
153
+ try {
154
+ errorBody = await response.json();
155
+ } catch {}
156
+ const errorObject = typeof errorBody === "object" && errorBody !== null ? errorBody : void 0;
157
+ throw new PowensClientError(typeof errorObject?.error_description === "string" ? errorObject.error_description : "Failed to obtain Powens access token", response.status, void 0, void 0, errorBody);
158
+ }
159
+ const payload = await response.json();
160
+ const expiresAt = Date.now() + payload.expires_in * 1e3;
161
+ this.logger?.debug?.("[PowensClient] Received access token", { expiresIn: payload.expires_in });
162
+ return {
163
+ accessToken: payload.access_token,
164
+ expiresAt,
165
+ scope: payload.scope
166
+ };
167
+ }
168
+ };
169
+
170
+ //#endregion
171
+ export { PowensClient, PowensClientError };
172
+ //# sourceMappingURL=powens-client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"powens-client.js","names":["POWENS_BASE_URL: Record<PowensEnvironment, string>","searchParams: Record<string, string | number | boolean | undefined>","headers: Record<string, string>","requestId: string | undefined","errorBody: unknown","message: string"],"sources":["../../src/impls/powens-client.ts"],"sourcesContent":["import { URL } from 'node:url';\n\nexport type PowensEnvironment = 'sandbox' | 'production';\n\nconst POWENS_BASE_URL: Record<PowensEnvironment, string> = {\n sandbox: 'https://api-sandbox.powens.com/v2',\n production: 'https://api.powens.com/v2',\n};\n\nexport interface PowensClientOptions {\n clientId: string;\n clientSecret: string;\n apiKey?: string;\n environment: PowensEnvironment;\n baseUrl?: string;\n fetchImpl?: typeof fetch;\n defaultTimeoutMs?: number;\n logger?: {\n debug?: (...args: unknown[]) => void;\n warn?: (...args: unknown[]) => void;\n error?: (...args: unknown[]) => void;\n };\n}\n\ninterface PowensOAuthTokenResponse {\n access_token: string;\n expires_in: number;\n scope?: string;\n token_type: string;\n}\n\ninterface PowensOAuthToken {\n accessToken: string;\n expiresAt: number;\n scope?: string;\n}\n\nexport interface PowensAccount {\n uuid: string;\n reference: string;\n userUuid: string;\n institution: {\n id: string;\n name: string;\n logoUrl?: string;\n };\n name: string;\n iban?: string;\n bic?: string;\n currency?: string;\n balance?: number;\n availableBalance?: number;\n type?: string;\n status?: string;\n metadata?: Record<string, unknown>;\n}\n\nexport interface PowensAccountListResponse {\n accounts: PowensAccount[];\n pagination?: {\n nextCursor?: string;\n hasMore?: boolean;\n };\n}\n\nexport interface PowensTransaction {\n uuid: string;\n accountUuid: string;\n amount: number;\n currency: string;\n direction: 'credit' | 'debit';\n description?: string;\n category?: string;\n rawLabel?: string;\n bookingDate?: string;\n valueDate?: string;\n status?: string;\n merchantName?: string;\n merchantCategoryCode?: string;\n counterpartyName?: string;\n counterpartyAccount?: string;\n metadata?: Record<string, unknown>;\n}\n\nexport interface PowensTransactionListResponse {\n transactions: PowensTransaction[];\n pagination?: {\n nextCursor?: string;\n hasMore?: boolean;\n };\n}\n\nexport interface PowensBalance {\n accountUuid: string;\n type: string;\n amount: number;\n currency: string;\n updatedAt: string;\n metadata?: Record<string, unknown>;\n}\n\nexport interface PowensConnectionStatusResponse {\n connectionUuid: string;\n status: 'healthy' | 'error' | 'revoked' | 'pending';\n lastAttemptAt?: string;\n errorCode?: string;\n errorMessage?: string;\n metadata?: Record<string, unknown>;\n}\n\nexport class PowensClientError extends Error {\n readonly status: number;\n readonly code?: string;\n readonly requestId?: string;\n readonly response?: unknown;\n\n constructor(\n message: string,\n status: number,\n code?: string,\n requestId?: string,\n response?: unknown\n ) {\n super(message);\n this.name = 'PowensClientError';\n this.status = status;\n this.code = code;\n this.requestId = requestId;\n this.response = response;\n }\n}\n\ninterface RequestOptions {\n method: string;\n path: string;\n searchParams?: Record<string, string | number | boolean | undefined>;\n body?: Record<string, unknown> | undefined;\n headers?: Record<string, string | undefined>;\n timeoutMs?: number;\n skipAuth?: boolean;\n}\n\nexport class PowensClient {\n private readonly clientId: string;\n private readonly clientSecret: string;\n private readonly apiKey?: string;\n private readonly fetchImpl: typeof fetch;\n private readonly logger?: PowensClientOptions['logger'];\n private readonly defaultTimeoutMs: number;\n private token?: PowensOAuthToken;\n private readonly baseUrl: string;\n\n constructor(options: PowensClientOptions) {\n this.clientId = options.clientId;\n this.clientSecret = options.clientSecret;\n this.apiKey = options.apiKey;\n this.fetchImpl = options.fetchImpl ?? fetch;\n this.logger = options.logger;\n this.defaultTimeoutMs = options.defaultTimeoutMs ?? 15000;\n this.baseUrl =\n options.baseUrl ??\n POWENS_BASE_URL[options.environment] ??\n POWENS_BASE_URL.production;\n }\n\n async listAccounts(params: {\n userUuid: string;\n cursor?: string;\n limit?: number;\n includeBalances?: boolean;\n institutionUuid?: string;\n }): Promise<PowensAccountListResponse> {\n const searchParams: Record<string, string | number | boolean | undefined> =\n {\n cursor: params.cursor,\n limit: params.limit,\n include_balances: params.includeBalances,\n institution_uuid: params.institutionUuid,\n };\n const response = await this.request<PowensAccountListResponse>({\n method: 'GET',\n path: `/users/${encodeURIComponent(params.userUuid)}/accounts`,\n searchParams,\n });\n return response;\n }\n\n async getAccount(accountUuid: string): Promise<PowensAccount> {\n return this.request<PowensAccount>({\n method: 'GET',\n path: `/accounts/${encodeURIComponent(accountUuid)}`,\n });\n }\n\n async listTransactions(params: {\n accountUuid: string;\n cursor?: string;\n limit?: number;\n from?: string;\n to?: string;\n includePending?: boolean;\n }): Promise<PowensTransactionListResponse> {\n const searchParams: Record<string, string | number | boolean | undefined> =\n {\n cursor: params.cursor,\n limit: params.limit,\n from: params.from,\n to: params.to,\n include_pending: params.includePending,\n };\n return this.request<PowensTransactionListResponse>({\n method: 'GET',\n path: `/accounts/${encodeURIComponent(params.accountUuid)}/transactions`,\n searchParams,\n });\n }\n\n async getBalances(accountUuid: string): Promise<PowensBalance[]> {\n return this.request<PowensBalance[]>({\n method: 'GET',\n path: `/accounts/${encodeURIComponent(accountUuid)}/balances`,\n });\n }\n\n async getConnectionStatus(\n connectionUuid: string\n ): Promise<PowensConnectionStatusResponse> {\n return this.request<PowensConnectionStatusResponse>({\n method: 'GET',\n path: `/connections/${encodeURIComponent(connectionUuid)}`,\n });\n }\n\n private async request<T>(options: RequestOptions): Promise<T> {\n const url = new URL(options.path, this.baseUrl);\n if (options.searchParams) {\n for (const [key, value] of Object.entries(options.searchParams)) {\n if (value === undefined || value === null) continue;\n url.searchParams.set(key, String(value));\n }\n }\n\n const headers: Record<string, string> = {\n Accept: 'application/json',\n 'Content-Type': 'application/json',\n ...options.headers,\n };\n\n if (this.apiKey) {\n headers['x-api-key'] = this.apiKey;\n }\n\n if (!options.skipAuth) {\n const token = await this.ensureAccessToken();\n headers.Authorization = `Bearer ${token}`;\n }\n\n const controller = new AbortController();\n const timeout = setTimeout(\n () => controller.abort(),\n options.timeoutMs ?? this.defaultTimeoutMs\n );\n\n try {\n const response = await this.fetchImpl(url, {\n method: options.method,\n headers,\n body: options.body ? JSON.stringify(options.body) : undefined,\n signal: controller.signal,\n });\n\n const requestId: string | undefined =\n response.headers.get('x-request-id') ?? undefined;\n\n if (!response.ok) {\n let errorBody: unknown;\n try {\n errorBody = await response.json();\n } catch {\n // ignore parsing errors\n }\n const errorObject =\n typeof errorBody === 'object' && errorBody !== null\n ? (errorBody as Record<string, unknown>)\n : undefined;\n const message: string =\n typeof errorObject?.message === 'string'\n ? errorObject.message\n : `Powens API request failed with status ${response.status}`;\n const code =\n typeof errorObject?.code === 'string' ? errorObject.code : undefined;\n throw new PowensClientError(\n message,\n response.status,\n code,\n requestId,\n errorBody\n );\n }\n\n if (response.status === 204) {\n return undefined as T;\n }\n\n try {\n return (await response.json()) as T;\n } catch (error) {\n this.logger?.error?.(\n '[PowensClient] Failed to parse JSON response',\n error\n );\n throw new PowensClientError(\n 'Failed to parse Powens response payload as JSON',\n response.status,\n undefined,\n requestId\n );\n }\n } catch (error) {\n if (error instanceof PowensClientError) {\n throw error;\n }\n if ((error as Error).name === 'AbortError') {\n throw new PowensClientError(\n `Powens API request timed out after ${options.timeoutMs ?? this.defaultTimeoutMs}ms`,\n 408\n );\n }\n this.logger?.error?.('[PowensClient] Request failed', error);\n throw new PowensClientError(\n (error as Error).message ?? 'Powens API request failed',\n 500\n );\n } finally {\n clearTimeout(timeout);\n }\n }\n\n private async ensureAccessToken(): Promise<string> {\n if (this.token && Date.now() < this.token.expiresAt - 5000) {\n return this.token.accessToken;\n }\n this.token = await this.fetchAccessToken();\n return this.token.accessToken;\n }\n\n private async fetchAccessToken(): Promise<PowensOAuthToken> {\n const url = new URL('/oauth/token', this.baseUrl);\n const basicAuth = Buffer.from(\n `${this.clientId}:${this.clientSecret}`,\n 'utf-8'\n ).toString('base64');\n\n const response = await this.fetchImpl(url, {\n method: 'POST',\n headers: {\n Authorization: `Basic ${basicAuth}`,\n 'Content-Type': 'application/x-www-form-urlencoded',\n Accept: 'application/json',\n },\n body: new URLSearchParams({\n grant_type: 'client_credentials',\n }).toString(),\n });\n\n if (!response.ok) {\n let errorBody: unknown;\n try {\n errorBody = await response.json();\n } catch {\n // ignore\n }\n const errorObject =\n typeof errorBody === 'object' && errorBody !== null\n ? (errorBody as Record<string, unknown>)\n : undefined;\n const message: string =\n typeof errorObject?.error_description === 'string'\n ? errorObject.error_description\n : 'Failed to obtain Powens access token';\n throw new PowensClientError(\n message,\n response.status,\n undefined,\n undefined,\n errorBody\n );\n }\n\n const payload = (await response.json()) as PowensOAuthTokenResponse;\n const expiresAt = Date.now() + payload.expires_in * 1000;\n this.logger?.debug?.('[PowensClient] Received access token', {\n expiresIn: payload.expires_in,\n });\n return {\n accessToken: payload.access_token,\n expiresAt,\n scope: payload.scope,\n };\n }\n}\n"],"mappings":"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"}
@@ -0,0 +1,28 @@
1
+ import { openbanking_d_exports } from "../openbanking.js";
2
+ import { PowensClientOptions } from "./powens-client.js";
3
+
4
+ //#region src/impls/powens-openbanking.d.ts
5
+ type PowensOpenBankingProviderOptions = PowensClientOptions;
6
+ declare class PowensOpenBankingProvider implements openbanking_d_exports.OpenBankingProvider {
7
+ private readonly client;
8
+ private readonly logger?;
9
+ constructor(options: PowensOpenBankingProviderOptions);
10
+ listAccounts(params: openbanking_d_exports.OpenBankingListAccountsParams): Promise<openbanking_d_exports.OpenBankingListAccountsResult>;
11
+ getAccountDetails(params: openbanking_d_exports.OpenBankingGetAccountDetailsParams): Promise<openbanking_d_exports.OpenBankingAccountDetails>;
12
+ listTransactions(params: openbanking_d_exports.OpenBankingListTransactionsParams): Promise<openbanking_d_exports.OpenBankingListTransactionsResult>;
13
+ getBalances(params: openbanking_d_exports.OpenBankingGetBalancesParams): Promise<openbanking_d_exports.OpenBankingAccountBalance[]>;
14
+ getConnectionStatus(params: openbanking_d_exports.OpenBankingGetConnectionStatusParams): Promise<openbanking_d_exports.OpenBankingConnectionStatus>;
15
+ private mapAccount;
16
+ private mapAccountDetails;
17
+ private mapTransaction;
18
+ private mapBalance;
19
+ private toContext;
20
+ private mapOwnership;
21
+ private mapAccountStatus;
22
+ private mapTransactionStatus;
23
+ private mapConnectionStatus;
24
+ private handleError;
25
+ }
26
+ //#endregion
27
+ export { PowensOpenBankingProvider, PowensOpenBankingProviderOptions };
28
+ //# sourceMappingURL=powens-openbanking.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"powens-openbanking.d.ts","names":[],"sources":["../../src/impls/powens-openbanking.ts"],"sourcesContent":[],"mappings":";;;;KAyBY,gCAAA,GAAmC;cAOlC,yBAAA,YAAqC,qBAAA,CAAA;EAPtC,iBAAA,MAAA;EAOC,iBAAA,MAAA;EAIU,WAAA,CAAA,OAAA,EAAA,gCAAA;EAMX,YAAA,CAAA,MAAA,EAAA,qBAAA,CAAA,6BAAA,CAAA,EACP,OADO,CACC,qBAAA,CAAA,6BADD,CAAA;EACC,iBAAA,CAAA,MAAA,EA6BD,qBAAA,CAAA,kCA7BC,CAAA,EA8BR,OA9BQ,CA8BA,qBAAA,CAAA,yBA9BA,CAAA;EAAR,gBAAA,CAAA,MAAA,EAyCO,qBAAA,CAAA,iCAzCP,CAAA,EA0CA,OA1CA,CA0CQ,qBAAA,CAAA,iCA1CR,CAAA;EA6BO,WAAA,CAAA,MAAA,EAqCA,qBAAA,CAAA,4BArCA,CAAA,EAsCP,OAtCO,CAsCC,qBAAA,CAAA,yBAtCD,EAAA,CAAA;EACC,mBAAA,CAAA,MAAA,EAsDD,qBAAA,CAAA,oCAtDC,CAAA,EAuDR,OAvDQ,CAuDA,qBAAA,CAAA,2BAvDA,CAAA;EAAR,QAAA,UAAA;EAWO,QAAA,iBAAA;EACC,QAAA,cAAA;EAAR,QAAA,UAAA;EAwBO,QAAA,SAAA;EACC,QAAA,YAAA;EAAR,QAAA,gBAAA;EAiBO,QAAA,oBAAA;EACC,QAAA,mBAAA;EAAR,QAAA,WAAA"}
@@ -1 +1,219 @@
1
- import{PowensClient as e,PowensClientError as t}from"./powens-client.js";var n=class{client;logger;constructor(t){this.client=new e(t),this.logger=t.logger}async listAccounts(e){if(!e.userId)throw new t(`Powens account listing requires the upstream userId mapped to Powens user UUID.`,400);let n=this.toContext(e.tenantId,e.connectionId);try{let t=await this.client.listAccounts({userUuid:e.userId,cursor:e.cursor,limit:e.pageSize,includeBalances:e.includeBalances,institutionUuid:e.institutionId});return{accounts:t.accounts.map(e=>this.mapAccount(e,n)),nextCursor:t.pagination?.nextCursor,hasMore:t.pagination?.hasMore}}catch(e){this.handleError(`listAccounts`,e)}}async getAccountDetails(e){let t=this.toContext(e.tenantId,e.connectionId);try{let n=await this.client.getAccount(e.accountId);return this.mapAccountDetails(n,t)}catch(e){this.handleError(`getAccountDetails`,e)}}async listTransactions(e){let t=this.toContext(e.tenantId,e.connectionId);try{let n=await this.client.listTransactions({accountUuid:e.accountId,cursor:e.cursor,limit:e.pageSize,from:e.from,to:e.to,includePending:e.includePending});return{transactions:n.transactions.map(e=>this.mapTransaction(e,t)),nextCursor:n.pagination?.nextCursor,hasMore:n.pagination?.hasMore}}catch(e){this.handleError(`listTransactions`,e)}}async getBalances(e){let t=this.toContext(e.tenantId,e.connectionId);try{return(await this.client.getBalances(e.accountId)).filter(t=>e.balanceTypes?.length?e.balanceTypes.includes(t.type):!0).map(e=>this.mapBalance(e,t))}catch(e){this.handleError(`getBalances`,e)}}async getConnectionStatus(e){try{let t=await this.client.getConnectionStatus(e.connectionId);return{connectionId:e.connectionId,tenantId:e.tenantId,status:this.mapConnectionStatus(t.status),lastCheckedAt:t.lastAttemptAt,errorCode:t.errorCode,errorMessage:t.errorMessage,details:t.metadata}}catch(e){this.handleError(`getConnectionStatus`,e)}}mapAccount(e,t){return{id:e.uuid,externalId:e.reference??e.uuid,tenantId:t.tenantId,connectionId:t.connectionId,userId:e.userUuid,displayName:e.name,institutionId:e.institution.id,institutionName:e.institution.name,institutionLogoUrl:e.institution.logoUrl,accountType:e.type??`unknown`,iban:e.iban,bic:e.bic,currency:e.currency??`EUR`,accountNumberMasked:e.metadata?.account_number_masked,ownership:this.mapOwnership(e.metadata?.ownership),status:this.mapAccountStatus(e.status),lastSyncedAt:e.metadata?.last_sync_at,metadata:e.metadata}}mapAccountDetails(e,t){return{...this.mapAccount(e,t),productCode:e.metadata?.product_code,openedAt:e.metadata?.opened_at,closedAt:e.metadata?.closed_at,availableBalance:e.availableBalance??void 0,currentBalance:e.balance??void 0,creditLimit:e.metadata?.credit_limit,customFields:e.metadata}}mapTransaction(e,t){return{id:e.uuid,externalId:e.uuid,tenantId:t.tenantId,accountId:e.accountUuid,connectionId:t.connectionId,amount:e.amount,currency:e.currency,direction:e.direction===`credit`?`credit`:`debit`,description:e.description??e.rawLabel,bookingDate:e.bookingDate,valueDate:e.valueDate,postedAt:e.bookingDate,category:e.category,rawCategory:e.rawLabel,merchantName:e.merchantName,merchantCategoryCode:e.merchantCategoryCode,counterpartyName:e.counterpartyName,counterpartyAccount:e.counterpartyAccount,reference:e.metadata?.reference,status:this.mapTransactionStatus(e.status),metadata:e.metadata}}mapBalance(e,t){return{accountId:e.accountUuid,connectionId:t.connectionId,tenantId:t.tenantId,type:e.type??`current`,currency:e.currency??`EUR`,amount:e.amount,lastUpdatedAt:e.updatedAt,metadata:e.metadata}}toContext(e,t){return{tenantId:e,connectionId:t}}mapOwnership(e){switch(e?.toLowerCase()){case`individual`:case`personal`:return`individual`;case`joint`:return`joint`;case`business`:case`corporate`:return`business`;default:return`unknown`}}mapAccountStatus(e){switch(e?.toLowerCase()){case`active`:case`enabled`:return`active`;case`disabled`:case`inactive`:return`inactive`;case`closed`:return`closed`;case`suspended`:return`suspended`;default:return`active`}}mapTransactionStatus(e){switch(e?.toLowerCase()){case`pending`:case`authorised`:return`pending`;case`booked`:case`posted`:return`booked`;case`cancelled`:case`rejected`:return`cancelled`;default:return`booked`}}mapConnectionStatus(e){switch(e){case`healthy`:return`healthy`;case`pending`:return`degraded`;case`error`:return`error`;case`revoked`:return`disconnected`;default:return`degraded`}}handleError(e,n){throw n instanceof t?(this.logger?.error?.(`[PowensOpenBankingProvider] ${e} failed`,{status:n.status,code:n.code,requestId:n.requestId,message:n.message}),n):(this.logger?.error?.(`[PowensOpenBankingProvider] ${e} failed with unexpected error`,n),n instanceof Error?n:Error(`Powens operation "${e}" failed`))}};export{n as PowensOpenBankingProvider};
1
+ import { PowensClient, PowensClientError } from "./powens-client.js";
2
+
3
+ //#region src/impls/powens-openbanking.ts
4
+ var PowensOpenBankingProvider = class {
5
+ client;
6
+ logger;
7
+ constructor(options) {
8
+ this.client = new PowensClient(options);
9
+ this.logger = options.logger;
10
+ }
11
+ async listAccounts(params) {
12
+ if (!params.userId) throw new PowensClientError("Powens account listing requires the upstream userId mapped to Powens user UUID.", 400);
13
+ const context = this.toContext(params.tenantId, params.connectionId);
14
+ try {
15
+ const response = await this.client.listAccounts({
16
+ userUuid: params.userId,
17
+ cursor: params.cursor,
18
+ limit: params.pageSize,
19
+ includeBalances: params.includeBalances,
20
+ institutionUuid: params.institutionId
21
+ });
22
+ return {
23
+ accounts: response.accounts.map((account) => this.mapAccount(account, context)),
24
+ nextCursor: response.pagination?.nextCursor,
25
+ hasMore: response.pagination?.hasMore
26
+ };
27
+ } catch (error) {
28
+ this.handleError("listAccounts", error);
29
+ }
30
+ }
31
+ async getAccountDetails(params) {
32
+ const context = this.toContext(params.tenantId, params.connectionId);
33
+ try {
34
+ const account = await this.client.getAccount(params.accountId);
35
+ return this.mapAccountDetails(account, context);
36
+ } catch (error) {
37
+ this.handleError("getAccountDetails", error);
38
+ }
39
+ }
40
+ async listTransactions(params) {
41
+ const context = this.toContext(params.tenantId, params.connectionId);
42
+ try {
43
+ const response = await this.client.listTransactions({
44
+ accountUuid: params.accountId,
45
+ cursor: params.cursor,
46
+ limit: params.pageSize,
47
+ from: params.from,
48
+ to: params.to,
49
+ includePending: params.includePending
50
+ });
51
+ return {
52
+ transactions: response.transactions.map((transaction) => this.mapTransaction(transaction, context)),
53
+ nextCursor: response.pagination?.nextCursor,
54
+ hasMore: response.pagination?.hasMore
55
+ };
56
+ } catch (error) {
57
+ this.handleError("listTransactions", error);
58
+ }
59
+ }
60
+ async getBalances(params) {
61
+ const context = this.toContext(params.tenantId, params.connectionId);
62
+ try {
63
+ return (await this.client.getBalances(params.accountId)).filter((balance) => params.balanceTypes?.length ? params.balanceTypes.includes(String(balance.type)) : true).map((balance) => this.mapBalance(balance, context));
64
+ } catch (error) {
65
+ this.handleError("getBalances", error);
66
+ }
67
+ }
68
+ async getConnectionStatus(params) {
69
+ try {
70
+ const status = await this.client.getConnectionStatus(params.connectionId);
71
+ return {
72
+ connectionId: params.connectionId,
73
+ tenantId: params.tenantId,
74
+ status: this.mapConnectionStatus(status.status),
75
+ lastCheckedAt: status.lastAttemptAt,
76
+ errorCode: status.errorCode,
77
+ errorMessage: status.errorMessage,
78
+ details: status.metadata
79
+ };
80
+ } catch (error) {
81
+ this.handleError("getConnectionStatus", error);
82
+ }
83
+ }
84
+ mapAccount(account, context) {
85
+ return {
86
+ id: account.uuid,
87
+ externalId: account.reference ?? account.uuid,
88
+ tenantId: context.tenantId,
89
+ connectionId: context.connectionId,
90
+ userId: account.userUuid,
91
+ displayName: account.name,
92
+ institutionId: account.institution.id,
93
+ institutionName: account.institution.name,
94
+ institutionLogoUrl: account.institution.logoUrl,
95
+ accountType: account.type ?? "unknown",
96
+ iban: account.iban,
97
+ bic: account.bic,
98
+ currency: account.currency ?? "EUR",
99
+ accountNumberMasked: account.metadata?.account_number_masked,
100
+ ownership: this.mapOwnership(account.metadata?.ownership),
101
+ status: this.mapAccountStatus(account.status),
102
+ lastSyncedAt: account.metadata?.last_sync_at,
103
+ metadata: account.metadata
104
+ };
105
+ }
106
+ mapAccountDetails(account, context) {
107
+ return {
108
+ ...this.mapAccount(account, context),
109
+ productCode: account.metadata?.product_code,
110
+ openedAt: account.metadata?.opened_at,
111
+ closedAt: account.metadata?.closed_at,
112
+ availableBalance: account.availableBalance ?? void 0,
113
+ currentBalance: account.balance ?? void 0,
114
+ creditLimit: account.metadata?.credit_limit,
115
+ customFields: account.metadata
116
+ };
117
+ }
118
+ mapTransaction(transaction, context) {
119
+ return {
120
+ id: transaction.uuid,
121
+ externalId: transaction.uuid,
122
+ tenantId: context.tenantId,
123
+ accountId: transaction.accountUuid,
124
+ connectionId: context.connectionId,
125
+ amount: transaction.amount,
126
+ currency: transaction.currency,
127
+ direction: transaction.direction === "credit" ? "credit" : "debit",
128
+ description: transaction.description ?? transaction.rawLabel,
129
+ bookingDate: transaction.bookingDate,
130
+ valueDate: transaction.valueDate,
131
+ postedAt: transaction.bookingDate,
132
+ category: transaction.category,
133
+ rawCategory: transaction.rawLabel,
134
+ merchantName: transaction.merchantName,
135
+ merchantCategoryCode: transaction.merchantCategoryCode,
136
+ counterpartyName: transaction.counterpartyName,
137
+ counterpartyAccount: transaction.counterpartyAccount,
138
+ reference: transaction.metadata?.reference,
139
+ status: this.mapTransactionStatus(transaction.status),
140
+ metadata: transaction.metadata
141
+ };
142
+ }
143
+ mapBalance(balance, context) {
144
+ return {
145
+ accountId: balance.accountUuid,
146
+ connectionId: context.connectionId,
147
+ tenantId: context.tenantId,
148
+ type: balance.type ?? "current",
149
+ currency: balance.currency ?? "EUR",
150
+ amount: balance.amount,
151
+ lastUpdatedAt: balance.updatedAt,
152
+ metadata: balance.metadata
153
+ };
154
+ }
155
+ toContext(tenantId, connectionId) {
156
+ return {
157
+ tenantId,
158
+ connectionId
159
+ };
160
+ }
161
+ mapOwnership(value) {
162
+ switch (value?.toLowerCase()) {
163
+ case "individual":
164
+ case "personal": return "individual";
165
+ case "joint": return "joint";
166
+ case "business":
167
+ case "corporate": return "business";
168
+ default: return "unknown";
169
+ }
170
+ }
171
+ mapAccountStatus(status) {
172
+ switch (status?.toLowerCase()) {
173
+ case "active":
174
+ case "enabled": return "active";
175
+ case "disabled":
176
+ case "inactive": return "inactive";
177
+ case "closed": return "closed";
178
+ case "suspended": return "suspended";
179
+ default: return "active";
180
+ }
181
+ }
182
+ mapTransactionStatus(status) {
183
+ switch (status?.toLowerCase()) {
184
+ case "pending":
185
+ case "authorised": return "pending";
186
+ case "booked":
187
+ case "posted": return "booked";
188
+ case "cancelled":
189
+ case "rejected": return "cancelled";
190
+ default: return "booked";
191
+ }
192
+ }
193
+ mapConnectionStatus(status) {
194
+ switch (status) {
195
+ case "healthy": return "healthy";
196
+ case "pending": return "degraded";
197
+ case "error": return "error";
198
+ case "revoked": return "disconnected";
199
+ default: return "degraded";
200
+ }
201
+ }
202
+ handleError(operation, error) {
203
+ if (error instanceof PowensClientError) {
204
+ this.logger?.error?.(`[PowensOpenBankingProvider] ${operation} failed`, {
205
+ status: error.status,
206
+ code: error.code,
207
+ requestId: error.requestId,
208
+ message: error.message
209
+ });
210
+ throw error;
211
+ }
212
+ this.logger?.error?.(`[PowensOpenBankingProvider] ${operation} failed with unexpected error`, error);
213
+ throw error instanceof Error ? error : /* @__PURE__ */ new Error(`Powens operation "${operation}" failed`);
214
+ }
215
+ };
216
+
217
+ //#endregion
218
+ export { PowensOpenBankingProvider };
219
+ //# sourceMappingURL=powens-openbanking.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"powens-openbanking.js","names":[],"sources":["../../src/impls/powens-openbanking.ts"],"sourcesContent":["import type {\n OpenBankingAccountBalance,\n OpenBankingAccountDetails,\n OpenBankingAccountSummary,\n OpenBankingConnectionStatus,\n OpenBankingGetAccountDetailsParams,\n OpenBankingGetBalancesParams,\n OpenBankingGetConnectionStatusParams,\n OpenBankingListAccountsParams,\n OpenBankingListAccountsResult,\n OpenBankingListTransactionsParams,\n OpenBankingListTransactionsResult,\n OpenBankingProvider,\n OpenBankingTransaction,\n} from '../openbanking';\nimport {\n PowensClient,\n PowensClientError,\n type PowensClientOptions,\n type PowensAccount,\n type PowensTransaction,\n type PowensBalance,\n type PowensConnectionStatusResponse,\n} from './powens-client';\n\nexport type PowensOpenBankingProviderOptions = PowensClientOptions;\n\ninterface ProviderContext {\n tenantId: string;\n connectionId: string;\n}\n\nexport class PowensOpenBankingProvider implements OpenBankingProvider {\n private readonly client: PowensClient;\n private readonly logger?: PowensClientOptions['logger'];\n\n constructor(options: PowensOpenBankingProviderOptions) {\n this.client = new PowensClient(options);\n this.logger = options.logger;\n }\n\n async listAccounts(\n params: OpenBankingListAccountsParams\n ): Promise<OpenBankingListAccountsResult> {\n if (!params.userId) {\n throw new PowensClientError(\n 'Powens account listing requires the upstream userId mapped to Powens user UUID.',\n 400\n );\n }\n const context = this.toContext(params.tenantId, params.connectionId);\n try {\n const response = await this.client.listAccounts({\n userUuid: params.userId,\n cursor: params.cursor,\n limit: params.pageSize,\n includeBalances: params.includeBalances,\n institutionUuid: params.institutionId,\n });\n return {\n accounts: response.accounts.map((account) =>\n this.mapAccount(account, context)\n ),\n nextCursor: response.pagination?.nextCursor,\n hasMore: response.pagination?.hasMore,\n };\n } catch (error) {\n this.handleError('listAccounts', error);\n }\n }\n\n async getAccountDetails(\n params: OpenBankingGetAccountDetailsParams\n ): Promise<OpenBankingAccountDetails> {\n const context = this.toContext(params.tenantId, params.connectionId);\n try {\n const account = await this.client.getAccount(params.accountId);\n return this.mapAccountDetails(account, context);\n } catch (error) {\n this.handleError('getAccountDetails', error);\n }\n }\n\n async listTransactions(\n params: OpenBankingListTransactionsParams\n ): Promise<OpenBankingListTransactionsResult> {\n const context = this.toContext(params.tenantId, params.connectionId);\n try {\n const response = await this.client.listTransactions({\n accountUuid: params.accountId,\n cursor: params.cursor,\n limit: params.pageSize,\n from: params.from,\n to: params.to,\n includePending: params.includePending,\n });\n return {\n transactions: response.transactions.map((transaction) =>\n this.mapTransaction(transaction, context)\n ),\n nextCursor: response.pagination?.nextCursor,\n hasMore: response.pagination?.hasMore,\n };\n } catch (error) {\n this.handleError('listTransactions', error);\n }\n }\n\n async getBalances(\n params: OpenBankingGetBalancesParams\n ): Promise<OpenBankingAccountBalance[]> {\n const context = this.toContext(params.tenantId, params.connectionId);\n try {\n const balances = await this.client.getBalances(params.accountId);\n return balances\n .filter((balance) =>\n params.balanceTypes?.length\n ? params.balanceTypes.includes(String(balance.type))\n : true\n )\n .map((balance) => this.mapBalance(balance, context));\n } catch (error) {\n this.handleError('getBalances', error);\n }\n }\n\n async getConnectionStatus(\n params: OpenBankingGetConnectionStatusParams\n ): Promise<OpenBankingConnectionStatus> {\n try {\n const status = await this.client.getConnectionStatus(params.connectionId);\n return {\n connectionId: params.connectionId,\n tenantId: params.tenantId,\n status: this.mapConnectionStatus(status.status),\n lastCheckedAt: status.lastAttemptAt,\n errorCode: status.errorCode,\n errorMessage: status.errorMessage,\n details: status.metadata,\n };\n } catch (error) {\n this.handleError('getConnectionStatus', error);\n }\n }\n\n private mapAccount(\n account: PowensAccount,\n context: ProviderContext\n ): OpenBankingAccountSummary {\n return {\n id: account.uuid,\n externalId: account.reference ?? account.uuid,\n tenantId: context.tenantId,\n connectionId: context.connectionId,\n userId: account.userUuid,\n displayName: account.name,\n institutionId: account.institution.id,\n institutionName: account.institution.name,\n institutionLogoUrl: account.institution.logoUrl,\n accountType: account.type ?? 'unknown',\n iban: account.iban,\n bic: account.bic,\n currency: account.currency ?? 'EUR',\n accountNumberMasked: account.metadata?.account_number_masked as\n | string\n | undefined,\n ownership: this.mapOwnership(\n account.metadata?.ownership as string | undefined\n ),\n status: this.mapAccountStatus(account.status),\n lastSyncedAt: account.metadata?.last_sync_at as string | undefined,\n metadata: account.metadata,\n };\n }\n\n private mapAccountDetails(\n account: PowensAccount,\n context: ProviderContext\n ): OpenBankingAccountDetails {\n return {\n ...this.mapAccount(account, context),\n productCode: account.metadata?.product_code as string | undefined,\n openedAt: account.metadata?.opened_at as string | undefined,\n closedAt: account.metadata?.closed_at as string | undefined,\n availableBalance: account.availableBalance ?? undefined,\n currentBalance: account.balance ?? undefined,\n creditLimit: account.metadata?.credit_limit as number | undefined,\n customFields: account.metadata,\n };\n }\n\n private mapTransaction(\n transaction: PowensTransaction,\n context: ProviderContext\n ): OpenBankingTransaction {\n return {\n id: transaction.uuid,\n externalId: transaction.uuid,\n tenantId: context.tenantId,\n accountId: transaction.accountUuid,\n connectionId: context.connectionId,\n amount: transaction.amount,\n currency: transaction.currency,\n direction: transaction.direction === 'credit' ? 'credit' : 'debit',\n description: transaction.description ?? transaction.rawLabel,\n bookingDate: transaction.bookingDate,\n valueDate: transaction.valueDate,\n postedAt: transaction.bookingDate,\n category: transaction.category,\n rawCategory: transaction.rawLabel,\n merchantName: transaction.merchantName,\n merchantCategoryCode: transaction.merchantCategoryCode,\n counterpartyName: transaction.counterpartyName,\n counterpartyAccount: transaction.counterpartyAccount,\n reference: transaction.metadata?.reference as string | undefined,\n status: this.mapTransactionStatus(transaction.status),\n metadata: transaction.metadata,\n };\n }\n\n private mapBalance(\n balance: PowensBalance,\n context: ProviderContext\n ): OpenBankingAccountBalance {\n return {\n accountId: balance.accountUuid,\n connectionId: context.connectionId,\n tenantId: context.tenantId,\n type: (balance.type ?? 'current') as OpenBankingAccountBalance['type'],\n currency: balance.currency ?? 'EUR',\n amount: balance.amount,\n lastUpdatedAt: balance.updatedAt,\n metadata: balance.metadata,\n };\n }\n\n private toContext(tenantId: string, connectionId: string): ProviderContext {\n return { tenantId, connectionId };\n }\n\n private mapOwnership(value: string | undefined) {\n switch (value?.toLowerCase()) {\n case 'individual':\n case 'personal':\n return 'individual';\n case 'joint':\n return 'joint';\n case 'business':\n case 'corporate':\n return 'business';\n default:\n return 'unknown';\n }\n }\n\n private mapAccountStatus(status?: string) {\n switch (status?.toLowerCase()) {\n case 'active':\n case 'enabled':\n return 'active';\n case 'disabled':\n case 'inactive':\n return 'inactive';\n case 'closed':\n return 'closed';\n case 'suspended':\n return 'suspended';\n default:\n return 'active';\n }\n }\n\n private mapTransactionStatus(status?: string) {\n switch (status?.toLowerCase()) {\n case 'pending':\n case 'authorised':\n return 'pending';\n case 'booked':\n case 'posted':\n return 'booked';\n case 'cancelled':\n case 'rejected':\n return 'cancelled';\n default:\n return 'booked';\n }\n }\n\n private mapConnectionStatus(\n status: PowensConnectionStatusResponse['status']\n ): OpenBankingConnectionStatus['status'] {\n switch (status) {\n case 'healthy':\n return 'healthy';\n case 'pending':\n return 'degraded';\n case 'error':\n return 'error';\n case 'revoked':\n return 'disconnected';\n default:\n return 'degraded';\n }\n }\n\n private handleError(operation: string, error: unknown): never {\n if (error instanceof PowensClientError) {\n this.logger?.error?.(`[PowensOpenBankingProvider] ${operation} failed`, {\n status: error.status,\n code: error.code,\n requestId: error.requestId,\n message: error.message,\n });\n throw error;\n }\n this.logger?.error?.(\n `[PowensOpenBankingProvider] ${operation} failed with unexpected error`,\n error\n );\n throw error instanceof Error\n ? error\n : new Error(`Powens operation \"${operation}\" failed`);\n }\n}\n"],"mappings":";;;AAgCA,IAAa,4BAAb,MAAsE;CACpE,AAAiB;CACjB,AAAiB;CAEjB,YAAY,SAA2C;AACrD,OAAK,SAAS,IAAI,aAAa,QAAQ;AACvC,OAAK,SAAS,QAAQ;;CAGxB,MAAM,aACJ,QACwC;AACxC,MAAI,CAAC,OAAO,OACV,OAAM,IAAI,kBACR,mFACA,IACD;EAEH,MAAM,UAAU,KAAK,UAAU,OAAO,UAAU,OAAO,aAAa;AACpE,MAAI;GACF,MAAM,WAAW,MAAM,KAAK,OAAO,aAAa;IAC9C,UAAU,OAAO;IACjB,QAAQ,OAAO;IACf,OAAO,OAAO;IACd,iBAAiB,OAAO;IACxB,iBAAiB,OAAO;IACzB,CAAC;AACF,UAAO;IACL,UAAU,SAAS,SAAS,KAAK,YAC/B,KAAK,WAAW,SAAS,QAAQ,CAClC;IACD,YAAY,SAAS,YAAY;IACjC,SAAS,SAAS,YAAY;IAC/B;WACM,OAAO;AACd,QAAK,YAAY,gBAAgB,MAAM;;;CAI3C,MAAM,kBACJ,QACoC;EACpC,MAAM,UAAU,KAAK,UAAU,OAAO,UAAU,OAAO,aAAa;AACpE,MAAI;GACF,MAAM,UAAU,MAAM,KAAK,OAAO,WAAW,OAAO,UAAU;AAC9D,UAAO,KAAK,kBAAkB,SAAS,QAAQ;WACxC,OAAO;AACd,QAAK,YAAY,qBAAqB,MAAM;;;CAIhD,MAAM,iBACJ,QAC4C;EAC5C,MAAM,UAAU,KAAK,UAAU,OAAO,UAAU,OAAO,aAAa;AACpE,MAAI;GACF,MAAM,WAAW,MAAM,KAAK,OAAO,iBAAiB;IAClD,aAAa,OAAO;IACpB,QAAQ,OAAO;IACf,OAAO,OAAO;IACd,MAAM,OAAO;IACb,IAAI,OAAO;IACX,gBAAgB,OAAO;IACxB,CAAC;AACF,UAAO;IACL,cAAc,SAAS,aAAa,KAAK,gBACvC,KAAK,eAAe,aAAa,QAAQ,CAC1C;IACD,YAAY,SAAS,YAAY;IACjC,SAAS,SAAS,YAAY;IAC/B;WACM,OAAO;AACd,QAAK,YAAY,oBAAoB,MAAM;;;CAI/C,MAAM,YACJ,QACsC;EACtC,MAAM,UAAU,KAAK,UAAU,OAAO,UAAU,OAAO,aAAa;AACpE,MAAI;AAEF,WADiB,MAAM,KAAK,OAAO,YAAY,OAAO,UAAU,EAE7D,QAAQ,YACP,OAAO,cAAc,SACjB,OAAO,aAAa,SAAS,OAAO,QAAQ,KAAK,CAAC,GAClD,KACL,CACA,KAAK,YAAY,KAAK,WAAW,SAAS,QAAQ,CAAC;WAC/C,OAAO;AACd,QAAK,YAAY,eAAe,MAAM;;;CAI1C,MAAM,oBACJ,QACsC;AACtC,MAAI;GACF,MAAM,SAAS,MAAM,KAAK,OAAO,oBAAoB,OAAO,aAAa;AACzE,UAAO;IACL,cAAc,OAAO;IACrB,UAAU,OAAO;IACjB,QAAQ,KAAK,oBAAoB,OAAO,OAAO;IAC/C,eAAe,OAAO;IACtB,WAAW,OAAO;IAClB,cAAc,OAAO;IACrB,SAAS,OAAO;IACjB;WACM,OAAO;AACd,QAAK,YAAY,uBAAuB,MAAM;;;CAIlD,AAAQ,WACN,SACA,SAC2B;AAC3B,SAAO;GACL,IAAI,QAAQ;GACZ,YAAY,QAAQ,aAAa,QAAQ;GACzC,UAAU,QAAQ;GAClB,cAAc,QAAQ;GACtB,QAAQ,QAAQ;GAChB,aAAa,QAAQ;GACrB,eAAe,QAAQ,YAAY;GACnC,iBAAiB,QAAQ,YAAY;GACrC,oBAAoB,QAAQ,YAAY;GACxC,aAAa,QAAQ,QAAQ;GAC7B,MAAM,QAAQ;GACd,KAAK,QAAQ;GACb,UAAU,QAAQ,YAAY;GAC9B,qBAAqB,QAAQ,UAAU;GAGvC,WAAW,KAAK,aACd,QAAQ,UAAU,UACnB;GACD,QAAQ,KAAK,iBAAiB,QAAQ,OAAO;GAC7C,cAAc,QAAQ,UAAU;GAChC,UAAU,QAAQ;GACnB;;CAGH,AAAQ,kBACN,SACA,SAC2B;AAC3B,SAAO;GACL,GAAG,KAAK,WAAW,SAAS,QAAQ;GACpC,aAAa,QAAQ,UAAU;GAC/B,UAAU,QAAQ,UAAU;GAC5B,UAAU,QAAQ,UAAU;GAC5B,kBAAkB,QAAQ,oBAAoB;GAC9C,gBAAgB,QAAQ,WAAW;GACnC,aAAa,QAAQ,UAAU;GAC/B,cAAc,QAAQ;GACvB;;CAGH,AAAQ,eACN,aACA,SACwB;AACxB,SAAO;GACL,IAAI,YAAY;GAChB,YAAY,YAAY;GACxB,UAAU,QAAQ;GAClB,WAAW,YAAY;GACvB,cAAc,QAAQ;GACtB,QAAQ,YAAY;GACpB,UAAU,YAAY;GACtB,WAAW,YAAY,cAAc,WAAW,WAAW;GAC3D,aAAa,YAAY,eAAe,YAAY;GACpD,aAAa,YAAY;GACzB,WAAW,YAAY;GACvB,UAAU,YAAY;GACtB,UAAU,YAAY;GACtB,aAAa,YAAY;GACzB,cAAc,YAAY;GAC1B,sBAAsB,YAAY;GAClC,kBAAkB,YAAY;GAC9B,qBAAqB,YAAY;GACjC,WAAW,YAAY,UAAU;GACjC,QAAQ,KAAK,qBAAqB,YAAY,OAAO;GACrD,UAAU,YAAY;GACvB;;CAGH,AAAQ,WACN,SACA,SAC2B;AAC3B,SAAO;GACL,WAAW,QAAQ;GACnB,cAAc,QAAQ;GACtB,UAAU,QAAQ;GAClB,MAAO,QAAQ,QAAQ;GACvB,UAAU,QAAQ,YAAY;GAC9B,QAAQ,QAAQ;GAChB,eAAe,QAAQ;GACvB,UAAU,QAAQ;GACnB;;CAGH,AAAQ,UAAU,UAAkB,cAAuC;AACzE,SAAO;GAAE;GAAU;GAAc;;CAGnC,AAAQ,aAAa,OAA2B;AAC9C,UAAQ,OAAO,aAAa,EAA5B;GACE,KAAK;GACL,KAAK,WACH,QAAO;GACT,KAAK,QACH,QAAO;GACT,KAAK;GACL,KAAK,YACH,QAAO;GACT,QACE,QAAO;;;CAIb,AAAQ,iBAAiB,QAAiB;AACxC,UAAQ,QAAQ,aAAa,EAA7B;GACE,KAAK;GACL,KAAK,UACH,QAAO;GACT,KAAK;GACL,KAAK,WACH,QAAO;GACT,KAAK,SACH,QAAO;GACT,KAAK,YACH,QAAO;GACT,QACE,QAAO;;;CAIb,AAAQ,qBAAqB,QAAiB;AAC5C,UAAQ,QAAQ,aAAa,EAA7B;GACE,KAAK;GACL,KAAK,aACH,QAAO;GACT,KAAK;GACL,KAAK,SACH,QAAO;GACT,KAAK;GACL,KAAK,WACH,QAAO;GACT,QACE,QAAO;;;CAIb,AAAQ,oBACN,QACuC;AACvC,UAAQ,QAAR;GACE,KAAK,UACH,QAAO;GACT,KAAK,UACH,QAAO;GACT,KAAK,QACH,QAAO;GACT,KAAK,UACH,QAAO;GACT,QACE,QAAO;;;CAIb,AAAQ,YAAY,WAAmB,OAAuB;AAC5D,MAAI,iBAAiB,mBAAmB;AACtC,QAAK,QAAQ,QAAQ,+BAA+B,UAAU,UAAU;IACtE,QAAQ,MAAM;IACd,MAAM,MAAM;IACZ,WAAW,MAAM;IACjB,SAAS,MAAM;IAChB,CAAC;AACF,SAAM;;AAER,OAAK,QAAQ,QACX,+BAA+B,UAAU,gCACzC,MACD;AACD,QAAM,iBAAiB,QACnB,wBACA,IAAI,MAAM,qBAAqB,UAAU,UAAU"}
@@ -0,0 +1,27 @@
1
+ import { email_d_exports } from "../email.js";
2
+ import { embedding_d_exports } from "../embedding.js";
3
+ import { voice_d_exports } from "../voice.js";
4
+ import { storage_d_exports } from "../storage.js";
5
+ import { payments_d_exports } from "../payments.js";
6
+ import { sms_d_exports } from "../sms.js";
7
+ import { vector_store_d_exports } from "../vector-store.js";
8
+ import { llm_d_exports } from "../llm.js";
9
+ import { openbanking_d_exports } from "../openbanking.js";
10
+ import { IntegrationContext } from "@lssm/integration.runtime/runtime";
11
+
12
+ //#region src/impls/provider-factory.d.ts
13
+ declare class IntegrationProviderFactory {
14
+ createPaymentsProvider(context: IntegrationContext): Promise<payments_d_exports.PaymentsProvider>;
15
+ createEmailOutboundProvider(context: IntegrationContext): Promise<email_d_exports.EmailOutboundProvider>;
16
+ createSmsProvider(context: IntegrationContext): Promise<sms_d_exports.SmsProvider>;
17
+ createVectorStoreProvider(context: IntegrationContext): Promise<vector_store_d_exports.VectorStoreProvider>;
18
+ createObjectStorageProvider(context: IntegrationContext): Promise<storage_d_exports.ObjectStorageProvider>;
19
+ createVoiceProvider(context: IntegrationContext): Promise<voice_d_exports.VoiceProvider>;
20
+ createLlmProvider(context: IntegrationContext): Promise<llm_d_exports.LLMProvider>;
21
+ createEmbeddingProvider(context: IntegrationContext): Promise<embedding_d_exports.EmbeddingProvider>;
22
+ createOpenBankingProvider(context: IntegrationContext): Promise<openbanking_d_exports.OpenBankingProvider>;
23
+ private loadSecrets;
24
+ }
25
+ //#endregion
26
+ export { IntegrationProviderFactory };
27
+ //# sourceMappingURL=provider-factory.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"provider-factory.d.ts","names":[],"sources":["../../src/impls/provider-factory.ts"],"sourcesContent":[],"mappings":";;;;;;;;;;;;cA0Ba,0BAAA;kCAEA,qBACR,QAAQ,kBAAA,CAAA;EAHA,2BAAA,CAAA,OAA0B,EAsB1B,kBAtB0B,CAAA,EAuBlC,OAvBkC,CAuB1B,eAAA,CAAA,qBAvB0B,CAAA;EAE1B,iBAAA,CAAA,OAAA,EA2CsB,kBA3CtB,CAAA,EA2C2C,OA3C3C,CA2CmD,aAAA,CAAA,WA3CnD,CAAA;EACA,yBAAA,CAAA,OAAA,EAmEA,kBAnEA,CAAA,EAoER,OApEQ,CAoEA,sBAAA,CAAA,mBApEA,CAAA;EAAR,2BAAA,CAAA,OAAA,EAwFQ,kBAxFR,CAAA,EAyFA,OAzFA,CAyFQ,iBAAA,CAAA,qBAzFR,CAAA;EAmBQ,mBAAA,CAAA,OAAA,EA8FA,kBA9FA,CAAA,EA+FR,OA/FQ,CA+FA,eAAA,CAAA,aA/FA,CAAA;EACA,iBAAA,CAAA,OAAA,EAkHsB,kBAlHtB,CAAA,EAkH2C,OAlH3C,CAkHmD,aAAA,CAAA,WAlHnD,CAAA;EAAR,uBAAA,CAAA,OAAA,EAsIQ,kBAtIR,CAAA,EAuIA,OAvIA,CAuIQ,mBAAA,CAAA,iBAvIR,CAAA;EAsB8B,yBAAA,CAAA,OAAA,EAsItB,kBAtIsB,CAAA,EAuI9B,OAvI8B,CAuItB,qBAAA,CAAA,mBAvIsB,CAAA;EAA6B,QAAA,WAAA"}