@ofidj/contracts 3.6.22 → 3.6.24
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 +20 -0
- package/README.md +20 -0
- package/bpInfo.js +1 -1
- package/fidj-api/FidjApiAccountRecovery.d.ts +7 -0
- package/fidj-api/FidjApiAccountRecovery.js +3 -0
- package/fidj-api/FidjApiAccountRecovery.js.map +1 -0
- package/fidj-api/FidjApiAppsDetailsResponse.d.ts +12 -5
- package/fidj-api/FidjApiAppsMeDetailsResponse.d.ts +8 -0
- package/fidj-api/FidjApiAppsUsersResponse.d.ts +22 -2
- package/fidj-api/FidjApiConsentsResponse.d.ts +1 -0
- package/fidj-api/FidjApiGroups.d.ts +16 -0
- package/fidj-api/FidjApiGroups.js +3 -0
- package/fidj-api/FidjApiGroups.js.map +1 -0
- package/fidj-api/FidjApiPrivacyResponse.d.ts +68 -0
- package/fidj-api/FidjApiPrivacyResponse.js +3 -0
- package/fidj-api/FidjApiPrivacyResponse.js.map +1 -0
- package/fidj-api/FidjApiUsersMeUpdateRequest.d.ts +1 -0
- package/fidj-api/identity.d.ts +62 -0
- package/fidj-api/identity.js +3 -0
- package/fidj-api/identity.js.map +1 -0
- package/fidj-api/index.d.ts +4 -0
- package/fidj-api/index.js +4 -0
- package/fidj-api/index.js.map +1 -1
- package/package.json +3 -3
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,21 @@
|
|
|
1
|
+
## Sandbox build isolation
|
|
2
|
+
|
|
3
|
+
- Compile contracts without ambient consumer test globals so nested checkouts build consistently under API and Angular workspaces.
|
|
4
|
+
|
|
1
5
|
# Changelog
|
|
2
6
|
|
|
7
|
+
- Add typed OIDC, organization/member/group/access and external-provider capability contracts.
|
|
8
|
+
|
|
9
|
+
- Correct owner user-list payloads and expose closing-app status.
|
|
10
|
+
|
|
11
|
+
- Add app groups, handler readiness and automatic erasure retry receipt contracts.
|
|
12
|
+
|
|
13
|
+
- Connect generated app data export/erasure, durable retry state and scoped completion receipts.
|
|
14
|
+
|
|
15
|
+
- Add shared-account password recovery and email verification integration.
|
|
16
|
+
|
|
17
|
+
- Local scenario: include Fidj in privacy, distinguish platform membership, and connect Alex’s personal and Studio Notes owner journeys.
|
|
18
|
+
|
|
3
19
|
All notable changes to this project will be documented in this file.
|
|
4
20
|
|
|
5
21
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
|
@@ -7,6 +23,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
7
23
|
|
|
8
24
|
## [Unreleased]
|
|
9
25
|
|
|
26
|
+
### Local validation milestone (3.6.24)
|
|
27
|
+
|
|
28
|
+
- Add app identity to consent responses and typed personal-app, export and erasure payloads.
|
|
29
|
+
|
|
10
30
|
## [3.6.22] - 2026-05-28
|
|
11
31
|
|
|
12
32
|
### Changed
|
package/README.md
CHANGED
|
@@ -32,3 +32,23 @@ npm run build # Compile TypeScript
|
|
|
32
32
|
npm run bp:style:fix # Lint + format
|
|
33
33
|
npm run bp:bump # Version bump + git tag
|
|
34
34
|
```
|
|
35
|
+
|
|
36
|
+
## Account lifecycle
|
|
37
|
+
|
|
38
|
+
`FidjApiResetPasswordRequest` and `FidjApiVerifyEmailRequest` describe the one-use password reset and explicit email confirmation payloads. Recovery operates on the shared account; consent and erasure remain scoped to each app.
|
|
39
|
+
|
|
40
|
+
App-data rights responses include optional `applicationData`, connection status and user-scoped `FidjApiPrivacyReceipt` records. App data and Fidj data have independent pending/completed outcomes.
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
The development contracts include `FidjApiGroup`, owner group writes with an optimistic `version`, per-user group relationships, handler readiness, and erasure receipt retry/needs-attention states. Group member IDs identify app contracts, not global users.
|
|
44
|
+
|
|
45
|
+
Authenticated `PUT /me` password changes require `{currentPassword, password}`. They apply the same password limits as reset, revoke existing sessions, and invalidate outstanding reset links. Sign in again after success. Name-only updates do not change credentials.
|
|
46
|
+
|
|
47
|
+
|
|
48
|
+
Owner details include `deletionPending`. Owner user-list contracts now describe the actual limited profile/role objects and per-app consent summary, replacing the old string-only declarations. This is a coordinated development-contract correction.
|
|
49
|
+
|
|
50
|
+
## Identity and tenant beta
|
|
51
|
+
|
|
52
|
+
`FidjApiOidcConfiguration`, `FidjApiOrganization`, `FidjApiOrganizationAccess`, `FidjOrganizationMember`, `FidjOrganizationGroup` and `FidjApiExternalProvider` describe the coordinated identity expansion. Organization members identify app contracts; roles and suspension are tenant-scoped. External capability flags distinguish linking/revoking a Fidj grant from provider-account deletion, which is unsupported.
|
|
53
|
+
|
|
54
|
+
App-session details may include authoritative `subject`, `username` and `appId` for an OIDC access token. Shared-account deletion now requires the principal session and `{confirm: 'delete-account'}`. Ordinary app sessions cannot change the global profile or enumerate other memberships.
|
package/bpInfo.js
CHANGED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FidjApiAccountRecovery.js","sourceRoot":"","sources":["../../src/fidj-api/FidjApiAccountRecovery.ts"],"names":[],"mappings":""}
|
|
@@ -5,11 +5,18 @@ export interface FidjApiAppsDetailsResponse {
|
|
|
5
5
|
owner: string;
|
|
6
6
|
title: string;
|
|
7
7
|
description?: string;
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
8
|
+
deletionPending?: boolean;
|
|
9
|
+
rolesByDefault: {
|
|
10
|
+
type: string;
|
|
11
|
+
description?: string;
|
|
12
|
+
}[];
|
|
13
|
+
rolesAvailable: {
|
|
14
|
+
type: string;
|
|
15
|
+
description?: string;
|
|
16
|
+
}[];
|
|
17
|
+
homes?: FidjApiAppUrl[];
|
|
18
|
+
githubs?: FidjApiAppUrl[];
|
|
19
|
+
endpoints?: FidjApiAppUrl[];
|
|
13
20
|
urls?: FidjApiAppUrl[];
|
|
14
21
|
tti_hours?: number;
|
|
15
22
|
salt?: string;
|
|
@@ -1,7 +1,27 @@
|
|
|
1
1
|
export interface FidjApiAppsUsersResponse {
|
|
2
2
|
users: {
|
|
3
|
-
|
|
4
|
-
|
|
3
|
+
_id: string;
|
|
4
|
+
owner: {
|
|
5
|
+
_id: string;
|
|
6
|
+
name: string;
|
|
7
|
+
username: string;
|
|
8
|
+
poc?: {
|
|
9
|
+
email?: string;
|
|
10
|
+
};
|
|
11
|
+
emailVerified?: boolean;
|
|
12
|
+
};
|
|
13
|
+
roles: {
|
|
14
|
+
_id?: string;
|
|
15
|
+
type: string;
|
|
16
|
+
description?: string;
|
|
17
|
+
}[];
|
|
5
18
|
endDate?: string;
|
|
19
|
+
deletionPending?: boolean;
|
|
20
|
+
consent?: {
|
|
21
|
+
terms: boolean;
|
|
22
|
+
analytics: boolean;
|
|
23
|
+
communications: boolean;
|
|
24
|
+
optionalData: boolean;
|
|
25
|
+
} | null;
|
|
6
26
|
}[];
|
|
7
27
|
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
export interface FidjApiGroup {
|
|
2
|
+
id: string;
|
|
3
|
+
name: string;
|
|
4
|
+
roles: string[];
|
|
5
|
+
members: string[];
|
|
6
|
+
version: number;
|
|
7
|
+
}
|
|
8
|
+
export interface FidjApiGroupsResponse {
|
|
9
|
+
groups: FidjApiGroup[];
|
|
10
|
+
}
|
|
11
|
+
export interface FidjApiGroupWriteRequest {
|
|
12
|
+
name: string;
|
|
13
|
+
roles: string[];
|
|
14
|
+
members: string[];
|
|
15
|
+
version?: number;
|
|
16
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FidjApiGroups.js","sourceRoot":"","sources":["../../src/fidj-api/FidjApiGroups.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import { FidjApiConsentsResponse } from './FidjApiConsentsResponse';
|
|
2
|
+
import { FidjApiConsentHistoryEntry } from './FidjApiConsentsHistoryResponse';
|
|
3
|
+
export interface FidjApiPrivacyAppsResponse {
|
|
4
|
+
requests?: FidjApiPrivacyReceipt[];
|
|
5
|
+
apps: {
|
|
6
|
+
id: string;
|
|
7
|
+
title: string;
|
|
8
|
+
description?: string;
|
|
9
|
+
roles: string[];
|
|
10
|
+
owned: boolean;
|
|
11
|
+
platform: boolean;
|
|
12
|
+
deletionPending: boolean;
|
|
13
|
+
appDataConnected?: boolean;
|
|
14
|
+
consent: FidjApiConsentsResponse;
|
|
15
|
+
}[];
|
|
16
|
+
}
|
|
17
|
+
export interface FidjApiPrivacyErasureRequest {
|
|
18
|
+
confirm: string;
|
|
19
|
+
}
|
|
20
|
+
export interface FidjApiPrivacyErasureResponse {
|
|
21
|
+
requestId?: string;
|
|
22
|
+
appData?: 'completed' | 'pending' | 'not_connected';
|
|
23
|
+
status: 'completed' | 'pending';
|
|
24
|
+
appId: string;
|
|
25
|
+
coverage?: string;
|
|
26
|
+
message?: string;
|
|
27
|
+
}
|
|
28
|
+
export interface FidjApiPrivacyExportResponse {
|
|
29
|
+
applicationData?: Record<string, unknown>;
|
|
30
|
+
exportedAt: string;
|
|
31
|
+
coverage: string;
|
|
32
|
+
app: {
|
|
33
|
+
id: string;
|
|
34
|
+
title: string;
|
|
35
|
+
};
|
|
36
|
+
identity: {
|
|
37
|
+
name: string;
|
|
38
|
+
email?: string;
|
|
39
|
+
};
|
|
40
|
+
membership: {
|
|
41
|
+
roles: string[];
|
|
42
|
+
joinedAt?: string;
|
|
43
|
+
groups?: {
|
|
44
|
+
name: string;
|
|
45
|
+
roles: string[];
|
|
46
|
+
}[];
|
|
47
|
+
};
|
|
48
|
+
consent: FidjApiConsentsResponse;
|
|
49
|
+
history: FidjApiConsentHistoryEntry[];
|
|
50
|
+
}
|
|
51
|
+
export interface FidjApiPrivacyReceipt {
|
|
52
|
+
appTitle?: string;
|
|
53
|
+
nextAttemptAt?: string;
|
|
54
|
+
needsAttention?: boolean;
|
|
55
|
+
requestId: string;
|
|
56
|
+
appId: string;
|
|
57
|
+
status: 'completed' | 'pending';
|
|
58
|
+
appData: 'completed' | 'pending';
|
|
59
|
+
fidjData: 'completed' | 'pending';
|
|
60
|
+
completedAt?: string;
|
|
61
|
+
}
|
|
62
|
+
export interface FidjApiPrivacyReadinessResponse {
|
|
63
|
+
appId: string;
|
|
64
|
+
status: 'ready' | 'not_connected' | 'unavailable';
|
|
65
|
+
checkedAt: string;
|
|
66
|
+
capabilities: ('export' | 'erase')[];
|
|
67
|
+
message?: string;
|
|
68
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FidjApiPrivacyResponse.js","sourceRoot":"","sources":["../../src/fidj-api/FidjApiPrivacyResponse.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
export interface FidjApiOidcConfiguration {
|
|
2
|
+
clientId: string;
|
|
3
|
+
redirectUris: string[];
|
|
4
|
+
enabled: boolean;
|
|
5
|
+
issuer: string | null;
|
|
6
|
+
termsUri?: string;
|
|
7
|
+
privacyUri?: string;
|
|
8
|
+
termsVersion?: string;
|
|
9
|
+
}
|
|
10
|
+
export type FidjOrganizationRole = 'Owner' | 'Administrator' | 'Editor' | 'Viewer';
|
|
11
|
+
export interface FidjOrganizationMember {
|
|
12
|
+
contractId: string;
|
|
13
|
+
roles: FidjOrganizationRole[];
|
|
14
|
+
status: 'active' | 'suspended';
|
|
15
|
+
}
|
|
16
|
+
export interface FidjOrganizationGroup {
|
|
17
|
+
id?: string;
|
|
18
|
+
name: string;
|
|
19
|
+
roles: Array<'Editor' | 'Viewer'>;
|
|
20
|
+
members: string[];
|
|
21
|
+
}
|
|
22
|
+
export interface FidjApiOrganization {
|
|
23
|
+
id: string;
|
|
24
|
+
name: string;
|
|
25
|
+
version: number;
|
|
26
|
+
members: FidjOrganizationMember[];
|
|
27
|
+
groups: FidjOrganizationGroup[];
|
|
28
|
+
}
|
|
29
|
+
export interface FidjApiOrganizationAccess {
|
|
30
|
+
organization: {
|
|
31
|
+
id: string;
|
|
32
|
+
name: string;
|
|
33
|
+
};
|
|
34
|
+
access: {
|
|
35
|
+
roles: FidjOrganizationRole[];
|
|
36
|
+
permissions: string[];
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
export interface FidjApiExternalProvider {
|
|
40
|
+
id: 'google' | 'meta';
|
|
41
|
+
name: string;
|
|
42
|
+
connectAvailable: boolean;
|
|
43
|
+
status: 'connected' | 'disconnect_pending' | 'not_connected' | 'guidance_only';
|
|
44
|
+
capabilities: {
|
|
45
|
+
linkIdentity: boolean;
|
|
46
|
+
disconnectGrant: boolean;
|
|
47
|
+
deleteProviderAccount: false;
|
|
48
|
+
};
|
|
49
|
+
deleteAccountUrl: string;
|
|
50
|
+
scope: string;
|
|
51
|
+
}
|
|
52
|
+
export interface FidjApiOrganizationInvitationRequest {
|
|
53
|
+
email: string;
|
|
54
|
+
role: "Editor" | "Viewer";
|
|
55
|
+
}
|
|
56
|
+
export interface FidjApiOrganizationInvitationResponse {
|
|
57
|
+
invitationUrl: string;
|
|
58
|
+
expiresInDays: number;
|
|
59
|
+
}
|
|
60
|
+
export interface FidjApiDeleteAccountRequest {
|
|
61
|
+
confirm: "delete-account";
|
|
62
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"identity.js","sourceRoot":"","sources":["../../src/fidj-api/identity.ts"],"names":[],"mappings":""}
|
package/fidj-api/index.d.ts
CHANGED
|
@@ -24,3 +24,7 @@ export * from './FidjApiContractsCreateRequest';
|
|
|
24
24
|
export * from './FidjApiContractsUpdateRequest';
|
|
25
25
|
export * from './FidjApiTokensCreateRequest';
|
|
26
26
|
export * from './FidjApiTokensCreateResponse';
|
|
27
|
+
export * from './FidjApiPrivacyResponse';
|
|
28
|
+
export * from './FidjApiAccountRecovery';
|
|
29
|
+
export * from './FidjApiGroups';
|
|
30
|
+
export * from "./identity";
|
package/fidj-api/index.js
CHANGED
|
@@ -47,4 +47,8 @@ __exportStar(require("./FidjApiContractsUpdateRequest"), exports);
|
|
|
47
47
|
// Tokens
|
|
48
48
|
__exportStar(require("./FidjApiTokensCreateRequest"), exports);
|
|
49
49
|
__exportStar(require("./FidjApiTokensCreateResponse"), exports);
|
|
50
|
+
__exportStar(require("./FidjApiPrivacyResponse"), exports);
|
|
51
|
+
__exportStar(require("./FidjApiAccountRecovery"), exports);
|
|
52
|
+
__exportStar(require("./FidjApiGroups"), exports);
|
|
53
|
+
__exportStar(require("./identity"), exports);
|
|
50
54
|
//# sourceMappingURL=index.js.map
|
package/fidj-api/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/fidj-api/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,SAAS;AACT,0DAAwC;AACxC,yDAAuC;AAEvC,OAAO;AACP,6DAA2C;AAC3C,8DAA4C;AAE5C,QAAQ;AACR,8DAA4C;AAC5C,+DAA6C;AAC7C,2DAAyC;AACzC,kEAAgD;AAChD,gEAA8C;AAC9C,8DAA4C;AAE5C,kBAAkB;AAClB,4DAA0C;AAC1C,iEAA+C;AAC/C,mEAAiD;AAEjD,OAAO;AACP,6DAA2C;AAC3C,8DAA4C;AAC5C,8DAA4C;AAC5C,+DAA6C;AAC7C,6DAA2C;AAC3C,6DAA2C;AAC3C,mEAAiD;AACjD,iEAA+C;AAE/C,YAAY;AACZ,iEAA+C;AAC/C,kEAAgD;AAChD,kEAAgD;AAEhD,SAAS;AACT,+DAA6C;AAC7C,gEAA8C"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/fidj-api/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,SAAS;AACT,0DAAwC;AACxC,yDAAuC;AAEvC,OAAO;AACP,6DAA2C;AAC3C,8DAA4C;AAE5C,QAAQ;AACR,8DAA4C;AAC5C,+DAA6C;AAC7C,2DAAyC;AACzC,kEAAgD;AAChD,gEAA8C;AAC9C,8DAA4C;AAE5C,kBAAkB;AAClB,4DAA0C;AAC1C,iEAA+C;AAC/C,mEAAiD;AAEjD,OAAO;AACP,6DAA2C;AAC3C,8DAA4C;AAC5C,8DAA4C;AAC5C,+DAA6C;AAC7C,6DAA2C;AAC3C,6DAA2C;AAC3C,mEAAiD;AACjD,iEAA+C;AAE/C,YAAY;AACZ,iEAA+C;AAC/C,kEAAgD;AAChD,kEAAgD;AAEhD,SAAS;AACT,+DAA6C;AAC7C,gEAA8C;AAE9C,2DAAyC;AAEzC,2DAAyC;AAEzC,kDAAgC;AAEhC,6CAA2B"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ofidj/contracts",
|
|
3
|
-
"version": "3.6.
|
|
3
|
+
"version": "3.6.24",
|
|
4
4
|
"author": "contact@fidj.ovh",
|
|
5
5
|
"description": "TypeScript API contracts for Fidj services - request/response interfaces for REST endpoints",
|
|
6
6
|
"keywords": [
|
|
@@ -23,8 +23,8 @@
|
|
|
23
23
|
"publishConfig": {
|
|
24
24
|
"access": "public"
|
|
25
25
|
},
|
|
26
|
-
"main": "./
|
|
27
|
-
"types": "./
|
|
26
|
+
"main": "./index.js",
|
|
27
|
+
"types": "./index.d.ts",
|
|
28
28
|
"scripts": {
|
|
29
29
|
"bp:_clean": "rm -rf package-lock.json node_modules .gen .logs .nyc_output .logs .output.txt .coverage .angular dist disti www && npm i",
|
|
30
30
|
"bp:bump": "OLD_VERSION=\"v$(node -e \"console.log(require('./package.json').version)\")\" && VERSION=\"$(npm version patch --no-git-tag-version)\" && echo \"export const bpInfo = {version: '$VERSION'};\" > ./src/bpInfo.ts && git tag $OLD_VERSION && git checkout -b $VERSION && git push origin refs/heads/$VERSION:$VERSION --tags && git push --set-upstream origin $VERSION",
|