@lssm/lib.feature-flags 0.0.0-canary-20251217063201 → 0.0.0-canary-20251217072406
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/contracts/dist/capabilities/openbanking.js +88 -1
- package/dist/contracts/dist/client/index.js +5 -1
- package/dist/contracts/dist/client/react/feature-render.js +2 -1
- package/dist/contracts/dist/client/react/form-render.js +4 -1
- package/dist/contracts/dist/client/react/index.js +4 -1
- package/dist/contracts/dist/contract-registry/index.js +1 -1
- package/dist/contracts/dist/contract-registry/schemas.js +60 -1
- package/dist/contracts/dist/docs/PUBLISHING.docblock.js +16 -76
- package/dist/contracts/dist/docs/accessibility_wcag_compliance_specs.docblock.js +16 -350
- package/dist/contracts/dist/docs/index.js +29 -1
- package/dist/contracts/dist/docs/presentations.js +71 -1
- package/dist/contracts/dist/docs/registry.js +44 -1
- package/dist/contracts/dist/docs/tech/PHASE_1_QUICKSTART.docblock.js +16 -383
- package/dist/contracts/dist/docs/tech/PHASE_2_AI_NATIVE_OPERATIONS.docblock.js +16 -68
- package/dist/contracts/dist/docs/tech/PHASE_3_AUTO_EVOLUTION.docblock.js +16 -140
- package/dist/contracts/dist/docs/tech/PHASE_4_PERSONALIZATION_ENGINE.docblock.js +16 -86
- package/dist/contracts/dist/docs/tech/PHASE_5_ZERO_TOUCH_OPERATIONS.docblock.js +16 -1
- package/dist/contracts/dist/docs/tech/auth/better-auth-nextjs.docblock.js +24 -2
- package/dist/contracts/dist/docs/tech/contracts/openapi-export.docblock.js +21 -2
- package/dist/contracts/dist/docs/tech/lifecycle-stage-system.docblock.js +16 -213
- package/dist/contracts/dist/docs/tech/llm/llm-integration.docblock.js +73 -5
- package/dist/contracts/dist/docs/tech/mcp-endpoints.docblock.js +37 -1
- package/dist/contracts/dist/docs/tech/presentation-runtime.docblock.js +16 -1
- package/dist/contracts/dist/docs/tech/schema/README.docblock.js +20 -262
- package/dist/contracts/dist/docs/tech/studio/learning-events.docblock.js +48 -1
- package/dist/contracts/dist/docs/tech/studio/learning-journeys.docblock.js +24 -2
- package/dist/contracts/dist/docs/tech/studio/platform-admin-panel.docblock.js +23 -2
- package/dist/contracts/dist/docs/tech/studio/project-access-teams.docblock.js +25 -16
- package/dist/contracts/dist/docs/tech/studio/project-routing.docblock.js +67 -1
- package/dist/contracts/dist/docs/tech/studio/sandbox-unlogged.docblock.js +22 -2
- package/dist/contracts/dist/docs/tech/studio/team-invitations.docblock.js +40 -36
- package/dist/contracts/dist/docs/tech/studio/workspace-ops.docblock.js +47 -1
- package/dist/contracts/dist/docs/tech/studio/workspaces.docblock.js +23 -2
- package/dist/contracts/dist/docs/tech/telemetry-ingest.docblock.js +36 -3
- package/dist/contracts/dist/docs/tech/templates/runtime.docblock.js +20 -1
- package/dist/contracts/dist/docs/tech/vscode-extension.docblock.js +36 -3
- package/dist/contracts/dist/docs/tech/workflows/overview.docblock.js +20 -1
- package/dist/contracts/dist/events.js +10 -1
- package/dist/contracts/dist/experiments/evaluator.js +1 -1
- package/dist/contracts/dist/index.js +71 -1
- package/dist/contracts/dist/install.js +2 -1
- package/dist/contracts/dist/integrations/contracts.js +377 -1
- package/dist/contracts/dist/integrations/index.js +18 -1
- package/dist/contracts/dist/integrations/openbanking/contracts/accounts.js +228 -1
- package/dist/contracts/dist/integrations/openbanking/contracts/balances.js +159 -1
- package/dist/contracts/dist/integrations/openbanking/contracts/index.js +3 -1
- package/dist/contracts/dist/integrations/openbanking/contracts/transactions.js +210 -1
- package/dist/contracts/dist/integrations/openbanking/models.js +242 -1
- package/dist/contracts/dist/integrations/openbanking/telemetry.js +13 -1
- package/dist/contracts/dist/integrations/providers/elevenlabs.js +52 -1
- package/dist/contracts/dist/integrations/providers/gcs-storage.js +75 -1
- package/dist/contracts/dist/integrations/providers/gmail.js +87 -1
- package/dist/contracts/dist/integrations/providers/google-calendar.js +66 -1
- package/dist/contracts/dist/integrations/providers/index.js +11 -1
- package/dist/contracts/dist/integrations/providers/mistral.js +68 -1
- package/dist/contracts/dist/integrations/providers/postmark.js +68 -1
- package/dist/contracts/dist/integrations/providers/powens.js +116 -1
- package/dist/contracts/dist/integrations/providers/qdrant.js +73 -1
- package/dist/contracts/dist/integrations/providers/registry.js +10 -1
- package/dist/contracts/dist/integrations/providers/stripe.js +83 -1
- package/dist/contracts/dist/integrations/providers/twilio-sms.js +61 -1
- package/dist/contracts/dist/jsonschema.js +1 -1
- package/dist/contracts/dist/knowledge/contracts.js +306 -1
- package/dist/contracts/dist/knowledge/index.js +7 -1
- package/dist/contracts/dist/knowledge/spaces/email-threads.js +34 -1
- package/dist/contracts/dist/knowledge/spaces/financial-docs.js +34 -1
- package/dist/contracts/dist/knowledge/spaces/financial-overview.js +38 -1
- package/dist/contracts/dist/knowledge/spaces/index.js +6 -1
- package/dist/contracts/dist/knowledge/spaces/product-canon.js +34 -1
- package/dist/contracts/dist/knowledge/spaces/support-faq.js +37 -1
- package/dist/contracts/dist/knowledge/spaces/uploaded-docs.js +34 -1
- package/dist/contracts/dist/llm/exporters.js +19 -1
- package/dist/contracts/dist/llm/index.js +2 -1
- package/dist/contracts/dist/llm/prompts.js +1 -1
- package/dist/contracts/dist/onboarding-base.js +196 -1
- package/dist/contracts/dist/openapi.js +1 -1
- package/dist/contracts/dist/ownership.js +21 -1
- package/dist/contracts/dist/presentations.js +1 -1
- package/dist/contracts/dist/presentations.v2.js +11 -1
- package/dist/contracts/dist/prompt.js +1 -1
- package/dist/contracts/dist/promptRegistry.js +1 -1
- package/dist/contracts/dist/regenerator/index.js +1 -1
- package/dist/contracts/dist/regenerator/service.js +6 -1
- package/dist/contracts/dist/registry.js +2 -1
- package/dist/contracts/dist/resources.js +1 -1
- package/dist/contracts/dist/schema/dist/EnumType.js +2 -1
- package/dist/contracts/dist/schema/dist/FieldType.js +49 -1
- package/dist/contracts/dist/schema/dist/ScalarTypeEnum.js +236 -1
- package/dist/contracts/dist/schema/dist/SchemaModel.js +34 -1
- package/dist/contracts/dist/schema/dist/entity/defineEntity.js +1 -1
- package/dist/contracts/dist/schema/dist/entity/index.js +2 -1
- package/dist/contracts/dist/schema/dist/entity/types.js +1 -1
- package/dist/contracts/dist/schema/dist/index.js +6 -1
- package/dist/contracts/dist/server/graphql-pothos.js +6 -1
- package/dist/contracts/dist/server/index.js +8 -1
- package/dist/contracts/dist/server/mcp/createMcpServer.js +4 -1
- package/dist/contracts/dist/server/mcp/registerPresentations.js +2 -1
- package/dist/contracts/dist/server/mcp/registerPrompts.js +1 -1
- package/dist/contracts/dist/server/mcp/registerResources.js +2 -1
- package/dist/contracts/dist/server/mcp/registerTools.js +1 -1
- package/dist/contracts/dist/server/provider-mcp.js +1 -1
- package/dist/contracts/dist/server/rest-elysia.js +1 -1
- package/dist/contracts/dist/server/rest-express.js +1 -1
- package/dist/contracts/dist/server/rest-generic.js +1 -1
- package/dist/contracts/dist/server/rest-next-app.js +1 -1
- package/dist/contracts/dist/server/rest-next-pages.js +1 -1
- package/dist/contracts/dist/spec.js +34 -1
- package/dist/contracts/dist/telemetry/index.js +1 -1
- package/dist/contracts/dist/telemetry/tracker.js +1 -1
- package/dist/contracts/dist/tests/index.js +1 -1
- package/dist/contracts/dist/tests/runner.js +2 -1
- package/dist/contracts/dist/workflow/index.js +1 -1
- package/dist/contracts/dist/workflow/runner.js +1 -1
- package/dist/contracts/index.d.ts +259 -259
- package/dist/contracts/index.js +910 -1
- package/dist/docs/feature-flags.docblock.js +21 -2
- package/dist/docs/index.js +1 -1
- package/dist/entities/index.d.ts +158 -158
- package/dist/entities/index.js +325 -1
- package/dist/evaluation/index.js +220 -1
- package/dist/events.d.ts +157 -157
- package/dist/events.js +459 -1
- package/dist/feature-flags.feature.js +139 -1
- package/dist/index.js +8 -1
- package/dist/schema/dist/EnumType.js +2 -1
- package/dist/schema/dist/FieldType.js +49 -1
- package/dist/schema/dist/ScalarTypeEnum.js +236 -1
- package/dist/schema/dist/SchemaModel.js +39 -1
- package/dist/schema/dist/entity/defineEntity.js +236 -1
- package/dist/schema/dist/entity/index.js +2 -1
- package/dist/schema/dist/entity/types.js +1 -1
- package/dist/schema/dist/index.js +6 -1
- package/package.json +5 -5
|
@@ -1 +1,159 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import { SchemaModel } from "../../../schema/dist/SchemaModel.js";
|
|
2
|
+
import { ScalarTypeEnum } from "../../../schema/dist/ScalarTypeEnum.js";
|
|
3
|
+
import "../../../schema/dist/index.js";
|
|
4
|
+
import { defineCommand, defineQuery } from "../../../spec.js";
|
|
5
|
+
import { AccountBalanceRecord } from "../models.js";
|
|
6
|
+
import { OPENBANKING_TELEMETRY_EVENTS } from "../telemetry.js";
|
|
7
|
+
|
|
8
|
+
//#region ../contracts/dist/integrations/openbanking/contracts/balances.js
|
|
9
|
+
const OpenBankingGetBalancesInput = new SchemaModel({
|
|
10
|
+
name: "OpenBankingGetBalancesInput",
|
|
11
|
+
description: "Parameters for retrieving bank account balances from the canonical ledger.",
|
|
12
|
+
fields: {
|
|
13
|
+
tenantId: {
|
|
14
|
+
type: ScalarTypeEnum.ID(),
|
|
15
|
+
isOptional: false
|
|
16
|
+
},
|
|
17
|
+
accountId: {
|
|
18
|
+
type: ScalarTypeEnum.ID(),
|
|
19
|
+
isOptional: false
|
|
20
|
+
},
|
|
21
|
+
balanceTypes: {
|
|
22
|
+
type: ScalarTypeEnum.String_unsecure(),
|
|
23
|
+
isArray: true,
|
|
24
|
+
isOptional: true
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
});
|
|
28
|
+
const OpenBankingGetBalancesOutput = new SchemaModel({
|
|
29
|
+
name: "OpenBankingGetBalancesOutput",
|
|
30
|
+
description: "Canonical balances for a bank account.",
|
|
31
|
+
fields: {
|
|
32
|
+
balances: {
|
|
33
|
+
type: AccountBalanceRecord,
|
|
34
|
+
isOptional: false,
|
|
35
|
+
isArray: true
|
|
36
|
+
},
|
|
37
|
+
asOf: {
|
|
38
|
+
type: ScalarTypeEnum.DateTime(),
|
|
39
|
+
isOptional: true
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
});
|
|
43
|
+
const OpenBankingRefreshBalancesInput = new SchemaModel({
|
|
44
|
+
name: "OpenBankingRefreshBalancesInput",
|
|
45
|
+
description: "Command payload to refresh balances for a bank account via the open banking provider.",
|
|
46
|
+
fields: {
|
|
47
|
+
tenantId: {
|
|
48
|
+
type: ScalarTypeEnum.ID(),
|
|
49
|
+
isOptional: false
|
|
50
|
+
},
|
|
51
|
+
accountId: {
|
|
52
|
+
type: ScalarTypeEnum.ID(),
|
|
53
|
+
isOptional: false
|
|
54
|
+
},
|
|
55
|
+
connectionId: {
|
|
56
|
+
type: ScalarTypeEnum.ID(),
|
|
57
|
+
isOptional: true
|
|
58
|
+
},
|
|
59
|
+
balanceTypes: {
|
|
60
|
+
type: ScalarTypeEnum.String_unsecure(),
|
|
61
|
+
isArray: true,
|
|
62
|
+
isOptional: true
|
|
63
|
+
},
|
|
64
|
+
forceRefresh: {
|
|
65
|
+
type: ScalarTypeEnum.Boolean(),
|
|
66
|
+
isOptional: true
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
});
|
|
70
|
+
const OpenBankingRefreshBalancesOutput = new SchemaModel({
|
|
71
|
+
name: "OpenBankingRefreshBalancesOutput",
|
|
72
|
+
description: "Result of a balance refresh against the open banking provider.",
|
|
73
|
+
fields: {
|
|
74
|
+
balances: {
|
|
75
|
+
type: AccountBalanceRecord,
|
|
76
|
+
isOptional: false,
|
|
77
|
+
isArray: true
|
|
78
|
+
},
|
|
79
|
+
refreshedAt: {
|
|
80
|
+
type: ScalarTypeEnum.DateTime(),
|
|
81
|
+
isOptional: false
|
|
82
|
+
},
|
|
83
|
+
errors: {
|
|
84
|
+
type: ScalarTypeEnum.String_unsecure(),
|
|
85
|
+
isArray: true,
|
|
86
|
+
isOptional: true
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
});
|
|
90
|
+
const OpenBankingGetBalances = defineQuery({
|
|
91
|
+
meta: {
|
|
92
|
+
name: "openbanking.balances.get",
|
|
93
|
+
version: 1,
|
|
94
|
+
description: "Retrieve the latest cached balances for a bank account.",
|
|
95
|
+
goal: "Expose current and available balances required by dashboards and analytics.",
|
|
96
|
+
context: "Used by Pocket Family Office UI surfaces and automation steps that require balance totals prior to generating summaries.",
|
|
97
|
+
owners: ["platform.finance"],
|
|
98
|
+
tags: [
|
|
99
|
+
"open-banking",
|
|
100
|
+
"powens",
|
|
101
|
+
"balances"
|
|
102
|
+
],
|
|
103
|
+
stability: "experimental"
|
|
104
|
+
},
|
|
105
|
+
io: {
|
|
106
|
+
input: OpenBankingGetBalancesInput,
|
|
107
|
+
output: OpenBankingGetBalancesOutput
|
|
108
|
+
},
|
|
109
|
+
policy: { auth: "user" }
|
|
110
|
+
});
|
|
111
|
+
const OpenBankingRefreshBalances = defineCommand({
|
|
112
|
+
meta: {
|
|
113
|
+
name: "openbanking.balances.refresh",
|
|
114
|
+
version: 1,
|
|
115
|
+
description: "Refresh balances for a bank account via the configured open banking provider.",
|
|
116
|
+
goal: "Ensure canonical balance records reflect the latest values from Powens.",
|
|
117
|
+
context: "Triggered by scheduled workflows before generating summaries or forecasting cashflow.",
|
|
118
|
+
owners: ["platform.finance"],
|
|
119
|
+
tags: [
|
|
120
|
+
"open-banking",
|
|
121
|
+
"powens",
|
|
122
|
+
"balances"
|
|
123
|
+
],
|
|
124
|
+
stability: "experimental"
|
|
125
|
+
},
|
|
126
|
+
io: {
|
|
127
|
+
input: OpenBankingRefreshBalancesInput,
|
|
128
|
+
output: OpenBankingRefreshBalancesOutput
|
|
129
|
+
},
|
|
130
|
+
policy: { auth: "admin" },
|
|
131
|
+
telemetry: {
|
|
132
|
+
success: {
|
|
133
|
+
event: { name: OPENBANKING_TELEMETRY_EVENTS.balancesRefreshed },
|
|
134
|
+
properties: ({ input, output }) => {
|
|
135
|
+
const payload = input;
|
|
136
|
+
const result = output;
|
|
137
|
+
return {
|
|
138
|
+
tenantId: payload?.tenantId,
|
|
139
|
+
accountId: payload?.accountId,
|
|
140
|
+
refreshedAt: result?.refreshedAt,
|
|
141
|
+
balanceCount: Array.isArray(result?.balances) ? result?.balances.length : void 0
|
|
142
|
+
};
|
|
143
|
+
}
|
|
144
|
+
},
|
|
145
|
+
failure: {
|
|
146
|
+
event: { name: OPENBANKING_TELEMETRY_EVENTS.balancesRefreshFailed },
|
|
147
|
+
properties: ({ input, error }) => {
|
|
148
|
+
const payload = input;
|
|
149
|
+
return {
|
|
150
|
+
tenantId: payload?.tenantId,
|
|
151
|
+
accountId: payload?.accountId,
|
|
152
|
+
error: error instanceof Error ? error.message : String(error ?? "unknown")
|
|
153
|
+
};
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
});
|
|
158
|
+
|
|
159
|
+
//#endregion
|
|
@@ -1 +1,210 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import { SchemaModel } from "../../../schema/dist/SchemaModel.js";
|
|
2
|
+
import { ScalarTypeEnum } from "../../../schema/dist/ScalarTypeEnum.js";
|
|
3
|
+
import "../../../schema/dist/index.js";
|
|
4
|
+
import { defineCommand, defineQuery } from "../../../spec.js";
|
|
5
|
+
import { BankTransactionRecord } from "../models.js";
|
|
6
|
+
import { OPENBANKING_TELEMETRY_EVENTS } from "../telemetry.js";
|
|
7
|
+
|
|
8
|
+
//#region ../contracts/dist/integrations/openbanking/contracts/transactions.js
|
|
9
|
+
const OpenBankingListTransactionsInput = new SchemaModel({
|
|
10
|
+
name: "OpenBankingListTransactionsInput",
|
|
11
|
+
description: "Parameters for listing bank transactions from the canonical ledger.",
|
|
12
|
+
fields: {
|
|
13
|
+
tenantId: {
|
|
14
|
+
type: ScalarTypeEnum.ID(),
|
|
15
|
+
isOptional: false
|
|
16
|
+
},
|
|
17
|
+
accountId: {
|
|
18
|
+
type: ScalarTypeEnum.ID(),
|
|
19
|
+
isOptional: false
|
|
20
|
+
},
|
|
21
|
+
from: {
|
|
22
|
+
type: ScalarTypeEnum.DateTime(),
|
|
23
|
+
isOptional: true
|
|
24
|
+
},
|
|
25
|
+
to: {
|
|
26
|
+
type: ScalarTypeEnum.DateTime(),
|
|
27
|
+
isOptional: true
|
|
28
|
+
},
|
|
29
|
+
cursor: {
|
|
30
|
+
type: ScalarTypeEnum.String_unsecure(),
|
|
31
|
+
isOptional: true
|
|
32
|
+
},
|
|
33
|
+
pageSize: {
|
|
34
|
+
type: ScalarTypeEnum.Int_unsecure(),
|
|
35
|
+
isOptional: true
|
|
36
|
+
},
|
|
37
|
+
direction: {
|
|
38
|
+
type: ScalarTypeEnum.String_unsecure(),
|
|
39
|
+
isOptional: true
|
|
40
|
+
},
|
|
41
|
+
minimumAmount: {
|
|
42
|
+
type: ScalarTypeEnum.Float_unsecure(),
|
|
43
|
+
isOptional: true
|
|
44
|
+
},
|
|
45
|
+
maximumAmount: {
|
|
46
|
+
type: ScalarTypeEnum.Float_unsecure(),
|
|
47
|
+
isOptional: true
|
|
48
|
+
},
|
|
49
|
+
category: {
|
|
50
|
+
type: ScalarTypeEnum.String_unsecure(),
|
|
51
|
+
isOptional: true
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
});
|
|
55
|
+
const OpenBankingListTransactionsOutput = new SchemaModel({
|
|
56
|
+
name: "OpenBankingListTransactionsOutput",
|
|
57
|
+
description: "Paginated list of transactions for a bank account.",
|
|
58
|
+
fields: {
|
|
59
|
+
transactions: {
|
|
60
|
+
type: BankTransactionRecord,
|
|
61
|
+
isOptional: false,
|
|
62
|
+
isArray: true
|
|
63
|
+
},
|
|
64
|
+
nextCursor: {
|
|
65
|
+
type: ScalarTypeEnum.String_unsecure(),
|
|
66
|
+
isOptional: true
|
|
67
|
+
},
|
|
68
|
+
hasMore: {
|
|
69
|
+
type: ScalarTypeEnum.Boolean(),
|
|
70
|
+
isOptional: true
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
});
|
|
74
|
+
const OpenBankingSyncTransactionsInput = new SchemaModel({
|
|
75
|
+
name: "OpenBankingSyncTransactionsInput",
|
|
76
|
+
description: "Command payload to synchronise transactions from the open banking provider into the canonical ledger.",
|
|
77
|
+
fields: {
|
|
78
|
+
tenantId: {
|
|
79
|
+
type: ScalarTypeEnum.ID(),
|
|
80
|
+
isOptional: false
|
|
81
|
+
},
|
|
82
|
+
accountId: {
|
|
83
|
+
type: ScalarTypeEnum.ID(),
|
|
84
|
+
isOptional: false
|
|
85
|
+
},
|
|
86
|
+
from: {
|
|
87
|
+
type: ScalarTypeEnum.DateTime(),
|
|
88
|
+
isOptional: true
|
|
89
|
+
},
|
|
90
|
+
to: {
|
|
91
|
+
type: ScalarTypeEnum.DateTime(),
|
|
92
|
+
isOptional: true
|
|
93
|
+
},
|
|
94
|
+
connectionId: {
|
|
95
|
+
type: ScalarTypeEnum.ID(),
|
|
96
|
+
isOptional: true
|
|
97
|
+
},
|
|
98
|
+
includePending: {
|
|
99
|
+
type: ScalarTypeEnum.Boolean(),
|
|
100
|
+
isOptional: true
|
|
101
|
+
},
|
|
102
|
+
backfillDays: {
|
|
103
|
+
type: ScalarTypeEnum.Int_unsecure(),
|
|
104
|
+
isOptional: true
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
});
|
|
108
|
+
const OpenBankingSyncTransactionsOutput = new SchemaModel({
|
|
109
|
+
name: "OpenBankingSyncTransactionsOutput",
|
|
110
|
+
description: "Result of a transaction synchronisation run.",
|
|
111
|
+
fields: {
|
|
112
|
+
synced: {
|
|
113
|
+
type: ScalarTypeEnum.Int_unsecure(),
|
|
114
|
+
isOptional: false
|
|
115
|
+
},
|
|
116
|
+
failed: {
|
|
117
|
+
type: ScalarTypeEnum.Int_unsecure(),
|
|
118
|
+
isOptional: false
|
|
119
|
+
},
|
|
120
|
+
earliestSyncedAt: {
|
|
121
|
+
type: ScalarTypeEnum.DateTime(),
|
|
122
|
+
isOptional: true
|
|
123
|
+
},
|
|
124
|
+
latestSyncedAt: {
|
|
125
|
+
type: ScalarTypeEnum.DateTime(),
|
|
126
|
+
isOptional: true
|
|
127
|
+
},
|
|
128
|
+
nextSinceToken: {
|
|
129
|
+
type: ScalarTypeEnum.String_unsecure(),
|
|
130
|
+
isOptional: true
|
|
131
|
+
},
|
|
132
|
+
errors: {
|
|
133
|
+
type: ScalarTypeEnum.String_unsecure(),
|
|
134
|
+
isArray: true,
|
|
135
|
+
isOptional: true
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
});
|
|
139
|
+
const OpenBankingListTransactions = defineQuery({
|
|
140
|
+
meta: {
|
|
141
|
+
name: "openbanking.transactions.list",
|
|
142
|
+
version: 1,
|
|
143
|
+
description: "List bank transactions that have been normalised into the canonical ledger.",
|
|
144
|
+
goal: "Allow downstream analytics and UI surfaces to page through canonical bank transactions.",
|
|
145
|
+
context: "Used by Pocket Family Office dashboards, reconciliation workflows, and analytics data views.",
|
|
146
|
+
owners: ["platform.finance"],
|
|
147
|
+
tags: [
|
|
148
|
+
"open-banking",
|
|
149
|
+
"powens",
|
|
150
|
+
"transactions"
|
|
151
|
+
],
|
|
152
|
+
stability: "experimental"
|
|
153
|
+
},
|
|
154
|
+
io: {
|
|
155
|
+
input: OpenBankingListTransactionsInput,
|
|
156
|
+
output: OpenBankingListTransactionsOutput
|
|
157
|
+
},
|
|
158
|
+
policy: { auth: "user" }
|
|
159
|
+
});
|
|
160
|
+
const OpenBankingSyncTransactions = defineCommand({
|
|
161
|
+
meta: {
|
|
162
|
+
name: "openbanking.transactions.sync",
|
|
163
|
+
version: 1,
|
|
164
|
+
description: "Synchronise transactions for a bank account by calling the configured open banking provider.",
|
|
165
|
+
goal: "Ensure the canonical transaction ledger stays aligned with the external provider.",
|
|
166
|
+
context: "Triggered by scheduled workflows or on-demand actions when activity is expected on an account.",
|
|
167
|
+
owners: ["platform.finance"],
|
|
168
|
+
tags: [
|
|
169
|
+
"open-banking",
|
|
170
|
+
"powens",
|
|
171
|
+
"transactions"
|
|
172
|
+
],
|
|
173
|
+
stability: "experimental"
|
|
174
|
+
},
|
|
175
|
+
io: {
|
|
176
|
+
input: OpenBankingSyncTransactionsInput,
|
|
177
|
+
output: OpenBankingSyncTransactionsOutput
|
|
178
|
+
},
|
|
179
|
+
policy: { auth: "admin" },
|
|
180
|
+
telemetry: {
|
|
181
|
+
success: {
|
|
182
|
+
event: { name: OPENBANKING_TELEMETRY_EVENTS.transactionsSynced },
|
|
183
|
+
properties: ({ input, output }) => {
|
|
184
|
+
const payload = input;
|
|
185
|
+
const result = output;
|
|
186
|
+
return {
|
|
187
|
+
tenantId: payload?.tenantId,
|
|
188
|
+
accountId: payload?.accountId,
|
|
189
|
+
synced: result?.synced,
|
|
190
|
+
failed: result?.failed,
|
|
191
|
+
earliestSyncedAt: result?.earliestSyncedAt,
|
|
192
|
+
latestSyncedAt: result?.latestSyncedAt
|
|
193
|
+
};
|
|
194
|
+
}
|
|
195
|
+
},
|
|
196
|
+
failure: {
|
|
197
|
+
event: { name: OPENBANKING_TELEMETRY_EVENTS.transactionsSyncFailed },
|
|
198
|
+
properties: ({ input, error }) => {
|
|
199
|
+
const payload = input;
|
|
200
|
+
return {
|
|
201
|
+
tenantId: payload?.tenantId,
|
|
202
|
+
accountId: payload?.accountId,
|
|
203
|
+
error: error instanceof Error ? error.message : String(error ?? "unknown")
|
|
204
|
+
};
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
});
|
|
209
|
+
|
|
210
|
+
//#endregion
|
|
@@ -1 +1,242 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import { SchemaModel } from "../../schema/dist/SchemaModel.js";
|
|
2
|
+
import { ScalarTypeEnum } from "../../schema/dist/ScalarTypeEnum.js";
|
|
3
|
+
import "../../schema/dist/index.js";
|
|
4
|
+
|
|
5
|
+
//#region ../contracts/dist/integrations/openbanking/models.js
|
|
6
|
+
const BankAccountRecord = new SchemaModel({
|
|
7
|
+
name: "BankAccountRecord",
|
|
8
|
+
description: "Canonical representation of a bank account synced from an open banking provider.",
|
|
9
|
+
fields: {
|
|
10
|
+
id: {
|
|
11
|
+
type: ScalarTypeEnum.ID(),
|
|
12
|
+
isOptional: false
|
|
13
|
+
},
|
|
14
|
+
tenantId: {
|
|
15
|
+
type: ScalarTypeEnum.ID(),
|
|
16
|
+
isOptional: false
|
|
17
|
+
},
|
|
18
|
+
userId: {
|
|
19
|
+
type: ScalarTypeEnum.ID(),
|
|
20
|
+
isOptional: false
|
|
21
|
+
},
|
|
22
|
+
connectionId: {
|
|
23
|
+
type: ScalarTypeEnum.ID(),
|
|
24
|
+
isOptional: false
|
|
25
|
+
},
|
|
26
|
+
externalId: {
|
|
27
|
+
type: ScalarTypeEnum.NonEmptyString(),
|
|
28
|
+
isOptional: false
|
|
29
|
+
},
|
|
30
|
+
institutionId: {
|
|
31
|
+
type: ScalarTypeEnum.NonEmptyString(),
|
|
32
|
+
isOptional: false
|
|
33
|
+
},
|
|
34
|
+
institutionName: {
|
|
35
|
+
type: ScalarTypeEnum.NonEmptyString(),
|
|
36
|
+
isOptional: false
|
|
37
|
+
},
|
|
38
|
+
institutionLogoUrl: {
|
|
39
|
+
type: ScalarTypeEnum.URL(),
|
|
40
|
+
isOptional: true
|
|
41
|
+
},
|
|
42
|
+
iban: {
|
|
43
|
+
type: ScalarTypeEnum.String_unsecure(),
|
|
44
|
+
isOptional: true
|
|
45
|
+
},
|
|
46
|
+
bic: {
|
|
47
|
+
type: ScalarTypeEnum.String_unsecure(),
|
|
48
|
+
isOptional: true
|
|
49
|
+
},
|
|
50
|
+
accountType: {
|
|
51
|
+
type: ScalarTypeEnum.NonEmptyString(),
|
|
52
|
+
isOptional: false
|
|
53
|
+
},
|
|
54
|
+
currency: {
|
|
55
|
+
type: ScalarTypeEnum.Currency(),
|
|
56
|
+
isOptional: false
|
|
57
|
+
},
|
|
58
|
+
displayName: {
|
|
59
|
+
type: ScalarTypeEnum.NonEmptyString(),
|
|
60
|
+
isOptional: false
|
|
61
|
+
},
|
|
62
|
+
accountNumberMasked: {
|
|
63
|
+
type: ScalarTypeEnum.String_unsecure(),
|
|
64
|
+
isOptional: true
|
|
65
|
+
},
|
|
66
|
+
productCode: {
|
|
67
|
+
type: ScalarTypeEnum.String_unsecure(),
|
|
68
|
+
isOptional: true
|
|
69
|
+
},
|
|
70
|
+
balance: {
|
|
71
|
+
type: ScalarTypeEnum.Float_unsecure(),
|
|
72
|
+
isOptional: true
|
|
73
|
+
},
|
|
74
|
+
availableBalance: {
|
|
75
|
+
type: ScalarTypeEnum.Float_unsecure(),
|
|
76
|
+
isOptional: true
|
|
77
|
+
},
|
|
78
|
+
lastSyncedAt: {
|
|
79
|
+
type: ScalarTypeEnum.DateTime(),
|
|
80
|
+
isOptional: false
|
|
81
|
+
},
|
|
82
|
+
createdAt: {
|
|
83
|
+
type: ScalarTypeEnum.DateTime(),
|
|
84
|
+
isOptional: false
|
|
85
|
+
},
|
|
86
|
+
updatedAt: {
|
|
87
|
+
type: ScalarTypeEnum.DateTime(),
|
|
88
|
+
isOptional: false
|
|
89
|
+
},
|
|
90
|
+
metadata: {
|
|
91
|
+
type: ScalarTypeEnum.JSONObject(),
|
|
92
|
+
isOptional: true
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
});
|
|
96
|
+
const BankTransactionRecord = new SchemaModel({
|
|
97
|
+
name: "BankTransactionRecord",
|
|
98
|
+
description: "Canonical transaction entry mapped from Powens into the open banking ledger.",
|
|
99
|
+
fields: {
|
|
100
|
+
id: {
|
|
101
|
+
type: ScalarTypeEnum.ID(),
|
|
102
|
+
isOptional: false
|
|
103
|
+
},
|
|
104
|
+
accountId: {
|
|
105
|
+
type: ScalarTypeEnum.ID(),
|
|
106
|
+
isOptional: false
|
|
107
|
+
},
|
|
108
|
+
tenantId: {
|
|
109
|
+
type: ScalarTypeEnum.ID(),
|
|
110
|
+
isOptional: false
|
|
111
|
+
},
|
|
112
|
+
connectionId: {
|
|
113
|
+
type: ScalarTypeEnum.ID(),
|
|
114
|
+
isOptional: false
|
|
115
|
+
},
|
|
116
|
+
externalId: {
|
|
117
|
+
type: ScalarTypeEnum.NonEmptyString(),
|
|
118
|
+
isOptional: false
|
|
119
|
+
},
|
|
120
|
+
amount: {
|
|
121
|
+
type: ScalarTypeEnum.Float_unsecure(),
|
|
122
|
+
isOptional: false
|
|
123
|
+
},
|
|
124
|
+
currency: {
|
|
125
|
+
type: ScalarTypeEnum.Currency(),
|
|
126
|
+
isOptional: false
|
|
127
|
+
},
|
|
128
|
+
date: {
|
|
129
|
+
type: ScalarTypeEnum.DateTime(),
|
|
130
|
+
isOptional: false
|
|
131
|
+
},
|
|
132
|
+
bookingDate: {
|
|
133
|
+
type: ScalarTypeEnum.DateTime(),
|
|
134
|
+
isOptional: true
|
|
135
|
+
},
|
|
136
|
+
valueDate: {
|
|
137
|
+
type: ScalarTypeEnum.DateTime(),
|
|
138
|
+
isOptional: true
|
|
139
|
+
},
|
|
140
|
+
description: {
|
|
141
|
+
type: ScalarTypeEnum.String_unsecure(),
|
|
142
|
+
isOptional: true
|
|
143
|
+
},
|
|
144
|
+
counterpartyName: {
|
|
145
|
+
type: ScalarTypeEnum.String_unsecure(),
|
|
146
|
+
isOptional: true
|
|
147
|
+
},
|
|
148
|
+
counterpartyAccount: {
|
|
149
|
+
type: ScalarTypeEnum.String_unsecure(),
|
|
150
|
+
isOptional: true
|
|
151
|
+
},
|
|
152
|
+
merchantCategoryCode: {
|
|
153
|
+
type: ScalarTypeEnum.String_unsecure(),
|
|
154
|
+
isOptional: true
|
|
155
|
+
},
|
|
156
|
+
rawCategory: {
|
|
157
|
+
type: ScalarTypeEnum.String_unsecure(),
|
|
158
|
+
isOptional: true
|
|
159
|
+
},
|
|
160
|
+
standardizedCategory: {
|
|
161
|
+
type: ScalarTypeEnum.String_unsecure(),
|
|
162
|
+
isOptional: true
|
|
163
|
+
},
|
|
164
|
+
transactionType: {
|
|
165
|
+
type: ScalarTypeEnum.NonEmptyString(),
|
|
166
|
+
isOptional: false
|
|
167
|
+
},
|
|
168
|
+
status: {
|
|
169
|
+
type: ScalarTypeEnum.NonEmptyString(),
|
|
170
|
+
isOptional: false
|
|
171
|
+
},
|
|
172
|
+
runningBalance: {
|
|
173
|
+
type: ScalarTypeEnum.Float_unsecure(),
|
|
174
|
+
isOptional: true
|
|
175
|
+
},
|
|
176
|
+
metadata: {
|
|
177
|
+
type: ScalarTypeEnum.JSONObject(),
|
|
178
|
+
isOptional: true
|
|
179
|
+
},
|
|
180
|
+
createdAt: {
|
|
181
|
+
type: ScalarTypeEnum.DateTime(),
|
|
182
|
+
isOptional: false
|
|
183
|
+
},
|
|
184
|
+
updatedAt: {
|
|
185
|
+
type: ScalarTypeEnum.DateTime(),
|
|
186
|
+
isOptional: false
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
});
|
|
190
|
+
const AccountBalanceRecord = new SchemaModel({
|
|
191
|
+
name: "AccountBalanceRecord",
|
|
192
|
+
description: "Canonical balance snapshot computed from Powens balance payloads.",
|
|
193
|
+
fields: {
|
|
194
|
+
id: {
|
|
195
|
+
type: ScalarTypeEnum.ID(),
|
|
196
|
+
isOptional: false
|
|
197
|
+
},
|
|
198
|
+
accountId: {
|
|
199
|
+
type: ScalarTypeEnum.ID(),
|
|
200
|
+
isOptional: false
|
|
201
|
+
},
|
|
202
|
+
tenantId: {
|
|
203
|
+
type: ScalarTypeEnum.ID(),
|
|
204
|
+
isOptional: false
|
|
205
|
+
},
|
|
206
|
+
connectionId: {
|
|
207
|
+
type: ScalarTypeEnum.ID(),
|
|
208
|
+
isOptional: false
|
|
209
|
+
},
|
|
210
|
+
balanceType: {
|
|
211
|
+
type: ScalarTypeEnum.NonEmptyString(),
|
|
212
|
+
isOptional: false
|
|
213
|
+
},
|
|
214
|
+
currentBalance: {
|
|
215
|
+
type: ScalarTypeEnum.Float_unsecure(),
|
|
216
|
+
isOptional: false
|
|
217
|
+
},
|
|
218
|
+
availableBalance: {
|
|
219
|
+
type: ScalarTypeEnum.Float_unsecure(),
|
|
220
|
+
isOptional: true
|
|
221
|
+
},
|
|
222
|
+
currency: {
|
|
223
|
+
type: ScalarTypeEnum.Currency(),
|
|
224
|
+
isOptional: false
|
|
225
|
+
},
|
|
226
|
+
lastUpdatedAt: {
|
|
227
|
+
type: ScalarTypeEnum.DateTime(),
|
|
228
|
+
isOptional: false
|
|
229
|
+
},
|
|
230
|
+
createdAt: {
|
|
231
|
+
type: ScalarTypeEnum.DateTime(),
|
|
232
|
+
isOptional: false
|
|
233
|
+
},
|
|
234
|
+
metadata: {
|
|
235
|
+
type: ScalarTypeEnum.JSONObject(),
|
|
236
|
+
isOptional: true
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
});
|
|
240
|
+
|
|
241
|
+
//#endregion
|
|
242
|
+
export { AccountBalanceRecord, BankAccountRecord, BankTransactionRecord };
|
|
@@ -1 +1,13 @@
|
|
|
1
|
-
|
|
1
|
+
//#region ../contracts/dist/integrations/openbanking/telemetry.js
|
|
2
|
+
const OPENBANKING_TELEMETRY_EVENTS = {
|
|
3
|
+
accountsSynced: "openbanking.accounts.synced",
|
|
4
|
+
accountsSyncFailed: "openbanking.accounts.sync_failed",
|
|
5
|
+
transactionsSynced: "openbanking.transactions.synced",
|
|
6
|
+
transactionsSyncFailed: "openbanking.transactions.sync_failed",
|
|
7
|
+
balancesRefreshed: "openbanking.balances.refreshed",
|
|
8
|
+
balancesRefreshFailed: "openbanking.balances.refresh_failed",
|
|
9
|
+
overviewGenerated: "openbanking.overview.generated"
|
|
10
|
+
};
|
|
11
|
+
|
|
12
|
+
//#endregion
|
|
13
|
+
export { OPENBANKING_TELEMETRY_EVENTS };
|
|
@@ -1 +1,52 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import { StabilityEnum } from "../../ownership.js";
|
|
2
|
+
|
|
3
|
+
//#region ../contracts/dist/integrations/providers/elevenlabs.js
|
|
4
|
+
const elevenLabsIntegrationSpec = {
|
|
5
|
+
meta: {
|
|
6
|
+
key: "ai-voice.elevenlabs",
|
|
7
|
+
version: 1,
|
|
8
|
+
category: "ai-voice",
|
|
9
|
+
displayName: "ElevenLabs Voice",
|
|
10
|
+
title: "ElevenLabs Text-to-Speech",
|
|
11
|
+
description: "ElevenLabs integration for neural voice synthesis and voice catalog access.",
|
|
12
|
+
domain: "ai",
|
|
13
|
+
owners: ["platform.ai"],
|
|
14
|
+
tags: ["voice", "tts"],
|
|
15
|
+
stability: StabilityEnum.Beta
|
|
16
|
+
},
|
|
17
|
+
supportedModes: ["managed", "byok"],
|
|
18
|
+
capabilities: { provides: [{
|
|
19
|
+
key: "ai.voice.synthesis",
|
|
20
|
+
version: 1
|
|
21
|
+
}] },
|
|
22
|
+
configSchema: {
|
|
23
|
+
schema: {
|
|
24
|
+
type: "object",
|
|
25
|
+
properties: { defaultVoiceId: {
|
|
26
|
+
type: "string",
|
|
27
|
+
description: "Optional default voice identifier for synthesis requests."
|
|
28
|
+
} }
|
|
29
|
+
},
|
|
30
|
+
example: { defaultVoiceId: "pNInz6obpgDQGcFmaJgB" }
|
|
31
|
+
},
|
|
32
|
+
secretSchema: {
|
|
33
|
+
schema: {
|
|
34
|
+
type: "object",
|
|
35
|
+
required: ["apiKey"],
|
|
36
|
+
properties: { apiKey: {
|
|
37
|
+
type: "string",
|
|
38
|
+
description: "ElevenLabs API key with text-to-speech permissions."
|
|
39
|
+
} }
|
|
40
|
+
},
|
|
41
|
+
example: { apiKey: "eleven-***" }
|
|
42
|
+
},
|
|
43
|
+
healthCheck: {
|
|
44
|
+
method: "custom",
|
|
45
|
+
timeoutMs: 4e3
|
|
46
|
+
},
|
|
47
|
+
docsUrl: "https://elevenlabs.io/docs/api-reference/text-to-speech",
|
|
48
|
+
constraints: { rateLimit: { rpm: 120 } },
|
|
49
|
+
byokSetup: { setupInstructions: "Create an ElevenLabs API key and ensure the desired voices are accessible to the key scope." }
|
|
50
|
+
};
|
|
51
|
+
|
|
52
|
+
//#endregion
|