@digiteers/uloba3-sdk 1.3.7

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 (162) hide show
  1. package/.eslintrc.json +29 -0
  2. package/.github/workflows/generate-sdk.yml +126 -0
  3. package/.prettierrc +11 -0
  4. package/MIGRATION.md +118 -0
  5. package/README.md +256 -0
  6. package/dist/api/accounts.d.ts +31 -0
  7. package/dist/api/accounts.d.ts.map +1 -0
  8. package/dist/api/accounts.js +71 -0
  9. package/dist/api/accounts.js.map +1 -0
  10. package/dist/api/admin/arrangements.d.ts +41 -0
  11. package/dist/api/admin/arrangements.d.ts.map +1 -0
  12. package/dist/api/admin/arrangements.js +60 -0
  13. package/dist/api/admin/arrangements.js.map +1 -0
  14. package/dist/api/admin/assistance-types.d.ts +41 -0
  15. package/dist/api/admin/assistance-types.d.ts.map +1 -0
  16. package/dist/api/admin/assistance-types.js +60 -0
  17. package/dist/api/admin/assistance-types.js.map +1 -0
  18. package/dist/api/admin/contract-case-workflow-states.d.ts +69 -0
  19. package/dist/api/admin/contract-case-workflow-states.d.ts.map +1 -0
  20. package/dist/api/admin/contract-case-workflow-states.js +59 -0
  21. package/dist/api/admin/contract-case-workflow-states.js.map +1 -0
  22. package/dist/api/admin/contract-types.d.ts +41 -0
  23. package/dist/api/admin/contract-types.d.ts.map +1 -0
  24. package/dist/api/admin/contract-types.js +60 -0
  25. package/dist/api/admin/contract-types.js.map +1 -0
  26. package/dist/api/admin/expectation-templates.d.ts +39 -0
  27. package/dist/api/admin/expectation-templates.d.ts.map +1 -0
  28. package/dist/api/admin/expectation-templates.js +66 -0
  29. package/dist/api/admin/expectation-templates.js.map +1 -0
  30. package/dist/api/admin/index.d.ts +11 -0
  31. package/dist/api/admin/index.d.ts.map +1 -0
  32. package/dist/api/admin/index.js +24 -0
  33. package/dist/api/admin/index.js.map +1 -0
  34. package/dist/api/admin/interest-templates.d.ts +39 -0
  35. package/dist/api/admin/interest-templates.d.ts.map +1 -0
  36. package/dist/api/admin/interest-templates.js +66 -0
  37. package/dist/api/admin/interest-templates.js.map +1 -0
  38. package/dist/api/admin/organization.d.ts +15 -0
  39. package/dist/api/admin/organization.d.ts.map +1 -0
  40. package/dist/api/admin/organization.js +25 -0
  41. package/dist/api/admin/organization.js.map +1 -0
  42. package/dist/api/admin/responsibility-templates.d.ts +39 -0
  43. package/dist/api/admin/responsibility-templates.d.ts.map +1 -0
  44. package/dist/api/admin/responsibility-templates.js +66 -0
  45. package/dist/api/admin/responsibility-templates.js.map +1 -0
  46. package/dist/api/admin/salaries.d.ts +48 -0
  47. package/dist/api/admin/salaries.d.ts.map +1 -0
  48. package/dist/api/admin/salaries.js +60 -0
  49. package/dist/api/admin/salaries.js.map +1 -0
  50. package/dist/api/admin/work-schedules.d.ts +67 -0
  51. package/dist/api/admin/work-schedules.d.ts.map +1 -0
  52. package/dist/api/admin/work-schedules.js +59 -0
  53. package/dist/api/admin/work-schedules.js.map +1 -0
  54. package/dist/api/analytics.d.ts +37 -0
  55. package/dist/api/analytics.d.ts.map +1 -0
  56. package/dist/api/analytics.js +37 -0
  57. package/dist/api/analytics.js.map +1 -0
  58. package/dist/api/applications.d.ts +166 -0
  59. package/dist/api/applications.d.ts.map +1 -0
  60. package/dist/api/applications.js +156 -0
  61. package/dist/api/applications.js.map +1 -0
  62. package/dist/api/assistants.d.ts +413 -0
  63. package/dist/api/assistants.d.ts.map +1 -0
  64. package/dist/api/assistants.js +250 -0
  65. package/dist/api/assistants.js.map +1 -0
  66. package/dist/api/auth.d.ts +57 -0
  67. package/dist/api/auth.d.ts.map +1 -0
  68. package/dist/api/auth.js +46 -0
  69. package/dist/api/auth.js.map +1 -0
  70. package/dist/api/billing.d.ts +33 -0
  71. package/dist/api/billing.d.ts.map +1 -0
  72. package/dist/api/billing.js +49 -0
  73. package/dist/api/billing.js.map +1 -0
  74. package/dist/api/contract-cases.d.ts +38 -0
  75. package/dist/api/contract-cases.d.ts.map +1 -0
  76. package/dist/api/contract-cases.js +65 -0
  77. package/dist/api/contract-cases.js.map +1 -0
  78. package/dist/api/contracts.d.ts +903 -0
  79. package/dist/api/contracts.d.ts.map +1 -0
  80. package/dist/api/contracts.js +300 -0
  81. package/dist/api/contracts.js.map +1 -0
  82. package/dist/api/documents.d.ts +20 -0
  83. package/dist/api/documents.d.ts.map +1 -0
  84. package/dist/api/documents.js +27 -0
  85. package/dist/api/documents.js.map +1 -0
  86. package/dist/api/feeds.d.ts +23 -0
  87. package/dist/api/feeds.d.ts.map +1 -0
  88. package/dist/api/feeds.js +47 -0
  89. package/dist/api/feeds.js.map +1 -0
  90. package/dist/api/gdpr.d.ts +23 -0
  91. package/dist/api/gdpr.d.ts.map +1 -0
  92. package/dist/api/gdpr.js +50 -0
  93. package/dist/api/gdpr.js.map +1 -0
  94. package/dist/api/inquiries.d.ts +190 -0
  95. package/dist/api/inquiries.d.ts.map +1 -0
  96. package/dist/api/inquiries.js +173 -0
  97. package/dist/api/inquiries.js.map +1 -0
  98. package/dist/api/jobs.d.ts +169 -0
  99. package/dist/api/jobs.d.ts.map +1 -0
  100. package/dist/api/jobs.js +294 -0
  101. package/dist/api/jobs.js.map +1 -0
  102. package/dist/api/locations.d.ts +30 -0
  103. package/dist/api/locations.d.ts.map +1 -0
  104. package/dist/api/locations.js +25 -0
  105. package/dist/api/locations.js.map +1 -0
  106. package/dist/api/meetings.d.ts +109 -0
  107. package/dist/api/meetings.d.ts.map +1 -0
  108. package/dist/api/meetings.js +75 -0
  109. package/dist/api/meetings.js.map +1 -0
  110. package/dist/api/messaging.d.ts +32 -0
  111. package/dist/api/messaging.d.ts.map +1 -0
  112. package/dist/api/messaging.js +114 -0
  113. package/dist/api/messaging.js.map +1 -0
  114. package/dist/api/notes.d.ts +21 -0
  115. package/dist/api/notes.d.ts.map +1 -0
  116. package/dist/api/notes.js +38 -0
  117. package/dist/api/notes.js.map +1 -0
  118. package/dist/api/organization.d.ts +56 -0
  119. package/dist/api/organization.d.ts.map +1 -0
  120. package/dist/api/organization.js +39 -0
  121. package/dist/api/organization.js.map +1 -0
  122. package/dist/api/salaries.d.ts +24 -0
  123. package/dist/api/salaries.d.ts.map +1 -0
  124. package/dist/api/salaries.js +39 -0
  125. package/dist/api/salaries.js.map +1 -0
  126. package/dist/api/tasks.d.ts +19 -0
  127. package/dist/api/tasks.d.ts.map +1 -0
  128. package/dist/api/tasks.js +35 -0
  129. package/dist/api/tasks.js.map +1 -0
  130. package/dist/api/users.d.ts +62 -0
  131. package/dist/api/users.d.ts.map +1 -0
  132. package/dist/api/users.js +62 -0
  133. package/dist/api/users.js.map +1 -0
  134. package/dist/api-types.d.ts +1242 -0
  135. package/dist/api-types.d.ts.map +1 -0
  136. package/dist/api-types.js +5 -0
  137. package/dist/api-types.js.map +1 -0
  138. package/dist/client.d.ts +69 -0
  139. package/dist/client.d.ts.map +1 -0
  140. package/dist/client.js +142 -0
  141. package/dist/client.js.map +1 -0
  142. package/dist/components/contracts/forms/DirectContractForm.d.ts +1 -0
  143. package/dist/components/contracts/forms/DirectContractForm.d.ts.map +1 -0
  144. package/dist/components/contracts/forms/DirectContractForm.js +2 -0
  145. package/dist/components/contracts/forms/DirectContractForm.js.map +1 -0
  146. package/dist/constants.d.ts +133 -0
  147. package/dist/constants.d.ts.map +1 -0
  148. package/dist/constants.js +139 -0
  149. package/dist/constants.js.map +1 -0
  150. package/dist/index.d.ts +36 -0
  151. package/dist/index.d.ts.map +1 -0
  152. package/dist/index.js +85 -0
  153. package/dist/index.js.map +1 -0
  154. package/dist/types.d.ts +36489 -0
  155. package/dist/types.d.ts.map +1 -0
  156. package/dist/types.js +7 -0
  157. package/dist/types.js.map +1 -0
  158. package/dist/view-types.d.ts +44 -0
  159. package/dist/view-types.d.ts.map +1 -0
  160. package/dist/view-types.js +7 -0
  161. package/dist/view-types.js.map +1 -0
  162. package/package.json +85 -0
package/.eslintrc.json ADDED
@@ -0,0 +1,29 @@
1
+ {
2
+ "parser": "@typescript-eslint/parser",
3
+ "extends": [
4
+ "eslint:recommended",
5
+ "plugin:@typescript-eslint/recommended"
6
+ ],
7
+ "parserOptions": {
8
+ "ecmaVersion": 2022,
9
+ "sourceType": "module",
10
+ "project": "./tsconfig.json"
11
+ },
12
+ "env": {
13
+ "node": true,
14
+ "es2022": true
15
+ },
16
+ "rules": {
17
+ "@typescript-eslint/no-explicit-any": "warn",
18
+ "@typescript-eslint/no-unused-vars": ["warn", { "argsIgnorePattern": "^_" }],
19
+ "@typescript-eslint/explicit-module-boundary-types": "off",
20
+ "@typescript-eslint/no-non-null-assertion": "warn",
21
+ "no-console": ["warn", { "allow": ["warn", "error", "info"] }]
22
+ },
23
+ "ignorePatterns": [
24
+ "dist/",
25
+ "node_modules/",
26
+ "*.js",
27
+ "src/types.ts"
28
+ ]
29
+ }
@@ -0,0 +1,126 @@
1
+ name: Generate SDK
2
+
3
+ on:
4
+ schedule:
5
+ # Run daily at 2 AM UTC
6
+ - cron: '0 2 * * *'
7
+ workflow_dispatch:
8
+ inputs:
9
+ api_url:
10
+ description: 'API URL to generate SDK from'
11
+ required: false
12
+ default: 'https://api.uloba3.no'
13
+ push:
14
+ branches:
15
+ - main
16
+ paths:
17
+ - 'scripts/**'
18
+ - 'src/**'
19
+ - 'package.json'
20
+
21
+ jobs:
22
+ generate:
23
+ runs-on: ubuntu-latest
24
+
25
+ steps:
26
+ - name: Checkout repository
27
+ uses: actions/checkout@v4
28
+ with:
29
+ token: ${{ secrets.GITHUB_TOKEN }}
30
+
31
+ - name: Setup Node.js
32
+ uses: actions/setup-node@v4
33
+ with:
34
+ node-version: '20'
35
+ cache: 'npm'
36
+
37
+ - name: Install dependencies
38
+ run: npm ci
39
+
40
+ - name: Generate SDK from API
41
+ env:
42
+ API_URL: ${{ github.event.inputs.api_url || 'https://api.uloba3.no' }}
43
+ run: |
44
+ echo "Generating SDK from $API_URL"
45
+ npm run generate:remote
46
+
47
+ - name: Check for changes
48
+ id: check_changes
49
+ run: |
50
+ if git diff --quiet src/types.ts; then
51
+ echo "No changes in generated types"
52
+ echo "has_changes=false" >> $GITHUB_OUTPUT
53
+ else
54
+ echo "Changes detected in generated types"
55
+ echo "has_changes=true" >> $GITHUB_OUTPUT
56
+ fi
57
+
58
+ - name: Commit and push changes
59
+ if: steps.check_changes.outputs.has_changes == 'true'
60
+ run: |
61
+ git config --local user.email "github-actions[bot]@users.noreply.github.com"
62
+ git config --local user.name "github-actions[bot]"
63
+ git add src/types.ts
64
+ git commit -m "chore: update generated SDK types [skip ci]"
65
+ git push
66
+
67
+ - name: Build SDK
68
+ run: npm run build
69
+
70
+ - name: Create release package
71
+ if: steps.check_changes.outputs.has_changes == 'true'
72
+ run: |
73
+ npm pack
74
+ echo "PACKAGE_FILE=$(ls *.tgz)" >> $GITHUB_ENV
75
+
76
+ - name: Upload package artifact
77
+ if: steps.check_changes.outputs.has_changes == 'true'
78
+ uses: actions/upload-artifact@v3
79
+ with:
80
+ name: sdk-package
81
+ path: ${{ env.PACKAGE_FILE }}
82
+
83
+ release:
84
+ needs: generate
85
+ runs-on: ubuntu-latest
86
+ if: github.event_name == 'workflow_dispatch' || github.event_name == 'push'
87
+
88
+ steps:
89
+ - name: Checkout repository
90
+ uses: actions/checkout@v4
91
+
92
+ - name: Setup Node.js
93
+ uses: actions/setup-node@v4
94
+ with:
95
+ node-version: '20'
96
+ cache: 'npm'
97
+
98
+ - name: Install dependencies
99
+ run: npm ci
100
+
101
+ - name: Build and package
102
+ run: |
103
+ npm run build
104
+ npm pack
105
+
106
+ - name: Get package version
107
+ id: package_version
108
+ run: |
109
+ echo "version=$(node -p "require('./package.json').version")" >> $GITHUB_OUTPUT
110
+
111
+ - name: Create GitHub Release
112
+ if: github.event_name == 'workflow_dispatch'
113
+ uses: softprops/action-gh-release@v1
114
+ with:
115
+ tag_name: v${{ steps.package_version.outputs.version }}
116
+ name: SDK v${{ steps.package_version.outputs.version }}
117
+ files: uloba3-sdk-*.tgz
118
+ body: |
119
+ ## SDK Release v${{ steps.package_version.outputs.version }}
120
+
121
+ Generated from API: ${{ github.event.inputs.api_url || 'https://api.uloba3.no' }}
122
+
123
+ ### Installation
124
+ ```bash
125
+ npm install https://github.com/${{ github.repository }}/releases/download/v${{ steps.package_version.outputs.version }}/uloba3-sdk-${{ steps.package_version.outputs.version }}.tgz
126
+ ```
package/.prettierrc ADDED
@@ -0,0 +1,11 @@
1
+ {
2
+ "semi": true,
3
+ "trailingComma": "none",
4
+ "singleQuote": true,
5
+ "printWidth": 100,
6
+ "tabWidth": 2,
7
+ "useTabs": false,
8
+ "bracketSpacing": true,
9
+ "arrowParens": "always",
10
+ "endOfLine": "lf"
11
+ }
package/MIGRATION.md ADDED
@@ -0,0 +1,118 @@
1
+ # SDK Migration Documentation
2
+
3
+ ## Overview
4
+ The SDK has been successfully migrated from `uloba3-backend` monorepo to its own standalone repository `uloba3-sdk`.
5
+
6
+ ## Migration Summary
7
+
8
+ ### Repository Structure
9
+ - **New Location**: `/Users/digiteers/GitHub/uloba3/uloba3-sdk`
10
+ - **Package Name**: Changed from `@uloba3-backend/sdk` to `@uloba3/sdk`
11
+ - **Version**: 1.3.6
12
+
13
+ ### Key Changes
14
+
15
+ #### 1. Package Configuration
16
+ - Standalone package.json with all necessary dependencies
17
+ - Independent TypeScript configuration
18
+ - ESLint and Prettier configurations for code quality
19
+ - Support for both yalc (local dev) and .tgz (production) workflows
20
+
21
+ #### 2. Generation Scripts
22
+ ```json
23
+ {
24
+ "generate": "npm run generate:local",
25
+ "generate:local": "openapi-typescript http://localhost:3001/api/docs/json --output ./src/types.ts",
26
+ "generate:remote": "curl -s ${API_URL}/api/docs/json > /tmp/openapi.json && openapi-typescript /tmp/openapi.json --output ./src/types.ts"
27
+ }
28
+ ```
29
+
30
+ #### 3. Publishing Workflows
31
+ - **Local Development**: `npm run publish:local` (uses yalc)
32
+ - **Production Build**: `npm run pack` (creates .tgz file)
33
+
34
+ ### uloba3-web Updates
35
+
36
+ #### Package.json Changes
37
+ ```json
38
+ // Old
39
+ "@uloba3-backend/sdk": "file:../uloba3-backend/packages/sdk"
40
+
41
+ // New
42
+ "@uloba3/sdk": "file:.yalc/@uloba3/sdk" // For local dev with yalc
43
+ // OR
44
+ "@uloba3/sdk": "file:./packages/sdk/uloba3-sdk-1.3.6.tgz" // For production
45
+ ```
46
+
47
+ #### Script Updates
48
+ - `sdk:prod`: Now references `../uloba3-sdk` instead of `../uloba3-backend/packages/sdk`
49
+ - `sdk:link`: Now uses `@uloba3/sdk` instead of `@uloba3-backend/sdk`
50
+
51
+ #### Import Updates
52
+ All imports changed from:
53
+ ```typescript
54
+ import { SomeType } from '@uloba3-backend/sdk';
55
+ ```
56
+ To:
57
+ ```typescript
58
+ import { SomeType } from '@uloba3/sdk';
59
+ ```
60
+
61
+ ### GitHub Actions
62
+ Added automated SDK generation workflow that:
63
+ - Runs daily or on manual trigger
64
+ - Fetches latest OpenAPI spec from API
65
+ - Generates TypeScript types
66
+ - Commits changes if any
67
+ - Creates releases with .tgz packages
68
+
69
+ ### Benefits of Separation
70
+
71
+ 1. **Cleaner Architecture**: SDK is now independent from backend implementation
72
+ 2. **Simpler Workflows**: SDK can be updated without touching backend code
73
+ 3. **Better Versioning**: SDK has its own version lifecycle
74
+ 4. **Reduced Complexity**: Backend monorepo is simpler without SDK
75
+ 5. **Flexible Deployment**: Can be published to npm in future if needed
76
+
77
+ ## Usage
78
+
79
+ ### For SDK Development
80
+ ```bash
81
+ cd uloba3-sdk
82
+ npm install
83
+ npm run generate # Generate from local API
84
+ npm run build # Build TypeScript
85
+ npm run publish:local # Publish to yalc
86
+ ```
87
+
88
+ ### For uloba3-web Development
89
+ ```bash
90
+ # Link SDK for local development
91
+ pnpm sdk:link
92
+
93
+ # Or use production build
94
+ pnpm sdk:prod
95
+
96
+ # Unlink when done
97
+ pnpm sdk:unlink
98
+ ```
99
+
100
+ ### For Production Deployment
101
+ The `vercel-build` script in uloba3-web will:
102
+ 1. Fetch OpenAPI spec from production API
103
+ 2. Generate types directly (fallback if SDK not available)
104
+ 3. Build the Next.js application
105
+
106
+ ## Migration Completed
107
+ - ✅ Created standalone uloba3-sdk repository
108
+ - ✅ Copied all SDK code and configurations
109
+ - ✅ Set up independent build and generation scripts
110
+ - ✅ Added GitHub Actions for automation
111
+ - ✅ Updated uloba3-web to use new SDK
112
+ - ✅ Removed SDK from backend monorepo
113
+ - ✅ Tested yalc and .tgz workflows
114
+
115
+ ## Next Steps (Optional)
116
+ 1. Push uloba3-sdk to GitHub
117
+ 2. Configure GitHub Actions secrets
118
+ 3. Consider npm publishing in future (currently using local workflows)
package/README.md ADDED
@@ -0,0 +1,256 @@
1
+ # Uloba3 SDK
2
+
3
+ TypeScript SDK for Uloba3 API - Autogenerert fra OpenAPI spesifikasjon.
4
+
5
+ ## 🎯 Formål
6
+
7
+ Dette SDK-et er et separat repository som inneholder TypeScript-klient for Uloba3 API. SDK-et genereres automatisk fra API-ets OpenAPI spesifikasjon og gir type-safe tilgang til alle API endpoints.
8
+
9
+ ### Hvorfor separat repository?
10
+ - **Uavhengighet**: SDK kan oppdateres uten å påvirke backend
11
+ - **Enklere versjonering**: SDK har sin egen versjon lifecycle
12
+ - **Renere arkitektur**: Reduserer kompleksitet i både backend og frontend
13
+ - **Fleksibilitet**: Web-prosjektet velger selv når de vil oppdatere SDK
14
+
15
+ ## 📦 Arkitektur
16
+
17
+ ```
18
+ uloba3-sdk/ # Dette repository
19
+ ├── src/ # Kildekode
20
+ │ ├── api/ # API moduler
21
+ │ ├── types.ts # Genererte typer fra OpenAPI
22
+ │ └── client.ts # API klient
23
+ ├── dist/ # Kompilert JavaScript (genereres)
24
+ └── *.tgz # Pakket versjon (genereres)
25
+
26
+ uloba3-backend/ # API som SDK genereres fra
27
+ └── apps/api/ # FastAPI applikasjon
28
+
29
+ uloba3-web/ # Frontend som bruker SDK
30
+ └── packages/sdk/ # .tgz filer for produksjon
31
+ ```
32
+
33
+ ## 🚀 Kom i gang
34
+
35
+ ### Forutsetninger
36
+ - Node.js 18+
37
+ - npm eller pnpm
38
+ - Tilgang til uloba3-backend repository
39
+ - yalc installert globalt: `npm install -g yalc`
40
+
41
+ ### Oppsett
42
+ ```bash
43
+ # Klon repository
44
+ git clone [repository-url] uloba3-sdk
45
+ cd uloba3-sdk
46
+
47
+ # Installer dependencies
48
+ npm install
49
+
50
+ # Generer SDK fra lokal API
51
+ npm run generate
52
+
53
+ # Bygg SDK
54
+ npm run build
55
+ ```
56
+
57
+ ## 🔄 Utviklingsworkflow
58
+
59
+ ### 1. Når API endres (i uloba3-backend)
60
+
61
+ ```bash
62
+ # Start API lokalt
63
+ cd uloba3-backend
64
+ pnpm dev:api # Kjører på localhost:3001
65
+
66
+ # Generer nytt SDK
67
+ cd uloba3-sdk
68
+ npm run generate # Henter OpenAPI spec og genererer typer
69
+ npm run build # Kompilerer TypeScript
70
+ ```
71
+
72
+ ### 2. For lokal utvikling (med uloba3-web)
73
+
74
+ **Metode A: Yalc (anbefalt for utvikling)**
75
+ ```bash
76
+ # I SDK directory
77
+ npm run publish:local # Publiserer til yalc
78
+
79
+ # I web prosjektet
80
+ pnpm sdk:link # Linker SDK via yalc
81
+
82
+ # OBS: Ved oppdateringer av SDK:
83
+ # 1. Gjør endringer i SDK
84
+ # 2. Kjør 'npm run publish:local' i SDK directory
85
+ # 3. SDK oppdateres automatisk i web (yalc push)
86
+ # 4. Hvis ikke, kjør 'pnpm sdk:link' på nytt i web
87
+
88
+ # Når ferdig med utvikling:
89
+ pnpm sdk:unlink # Fjerner link
90
+ ```
91
+
92
+ **Metode B: .tgz fil (for testing av produksjon)**
93
+ ```bash
94
+ # I SDK directory
95
+ npm run pack # Lager uloba3-sdk-X.X.X.tgz
96
+
97
+ # I web prosjektet
98
+ pnpm sdk:prod # Kopierer og installerer .tgz
99
+ ```
100
+
101
+ ### 3. Typisk utviklingsløype
102
+
103
+ ```mermaid
104
+ graph LR
105
+ A[Backend endring] --> B[API kjører lokalt]
106
+ B --> C[Generer SDK]
107
+ C --> D[Publiser til yalc]
108
+ D --> E[Link i web]
109
+ E --> F[Test i web]
110
+ F --> G{Fungerer?}
111
+ G -->|Nei| A
112
+ G -->|Ja| H[Commit SDK]
113
+ H --> I[Pack .tgz]
114
+ I --> J[Deploy]
115
+ ```
116
+
117
+ ### ⚠️ Viktig om Yalc
118
+
119
+ Yalc krever ofte at `pnpm sdk:link` kjøres flere ganger:
120
+ - **Første gang**: Etablerer link mellom SDK og web
121
+ - **Ved oppdateringer**: Selv om `npm run publish:local` pusher endringer, må ofte `pnpm sdk:link` kjøres på nytt i web for å få oppdateringen
122
+ - **Tips**: Hvis du ikke ser endringene dine, kjør `pnpm sdk:link` igjen
123
+
124
+ ## 📝 Scripts
125
+
126
+ | Script | Beskrivelse | Når brukes |
127
+ |--------|-------------|------------|
128
+ | `npm run generate` | Generer fra lokal API (localhost:3001) | Etter API endringer |
129
+ | `npm run generate:remote` | Generer fra ekstern API | For produksjon sync |
130
+ | `npm run build` | Kompiler TypeScript til JavaScript | Før publisering |
131
+ | `npm run publish:local` | Publiser til yalc | For lokal utvikling |
132
+ | `npm run pack` | Lag .tgz pakke | For produksjon |
133
+ | `npm run clean` | Slett dist og .tgz filer | For opprydding |
134
+ | `npm run typecheck` | Sjekk TypeScript typer | Før commit |
135
+
136
+ ## 💻 Bruk i kode
137
+
138
+ ```typescript
139
+ // Import SDK
140
+ import { ApiClient } from '@uloba3/sdk';
141
+
142
+ // Initialiser klient
143
+ const client = new ApiClient({
144
+ baseUrl: process.env.NEXT_PUBLIC_API_URL || 'http://localhost:3001',
145
+ token: 'auth-token-here',
146
+ onTokenRefresh: async () => {
147
+ // Håndter token refresh
148
+ return 'new-token';
149
+ }
150
+ });
151
+
152
+ // Bruk typed API metoder
153
+ const jobs = await client.jobs.getAll();
154
+ const application = await client.applications.create({
155
+ job_id: 'job-123',
156
+ message: 'Søknadstekst'
157
+ });
158
+ ```
159
+
160
+ ## 🏗️ Vedlikehold
161
+
162
+ ### Oppdater dependencies
163
+ ```bash
164
+ npm update
165
+ npm audit fix
166
+ ```
167
+
168
+ ### Versjonering
169
+ ```bash
170
+ # Øk versjon i package.json manuelt eller:
171
+ npm version patch # 1.0.0 -> 1.0.1
172
+ npm version minor # 1.0.0 -> 1.1.0
173
+ npm version major # 1.0.0 -> 2.0.0
174
+ ```
175
+
176
+ ### Feilsøking
177
+
178
+ **Problem: SDK oppdateres ikke i web etter publish:local**
179
+ ```bash
180
+ # Dette er normalt - yalc push oppdaterer ikke alltid package.json
181
+ # Løsning: Kjør sdk:link på nytt i web prosjektet
182
+ pnpm sdk:link
183
+
184
+ # Alternativt, force update:
185
+ yalc remove @uloba3/sdk
186
+ pnpm sdk:link
187
+ ```
188
+
189
+ **Problem: SDK er utdatert**
190
+ ```bash
191
+ cd uloba3-sdk
192
+ npm run generate
193
+ npm run build
194
+ npm run publish:local
195
+
196
+ # I web prosjektet - VIKTIG:
197
+ pnpm sdk:link # Må ofte kjøres på nytt for å få oppdateringen
198
+ ```
199
+
200
+ **Problem: Yalc link fungerer ikke**
201
+ ```bash
202
+ # I web prosjektet
203
+ yalc remove @uloba3/sdk
204
+ rm -rf node_modules/.cache
205
+ rm -rf .yalc
206
+ yalc add @uloba3/sdk
207
+ pnpm install
208
+ ```
209
+
210
+ **Problem: TypeScript feil etter generering**
211
+ ```bash
212
+ # Sjekk at API kjører
213
+ curl http://localhost:3001/api/docs/json
214
+
215
+ # Regenerer med clean build
216
+ npm run clean
217
+ npm run generate
218
+ npm run build
219
+ ```
220
+
221
+ ## 🔐 Sikkerhet
222
+
223
+ - SDK inneholder INGEN hemmeligheter eller tokens
224
+ - All autentisering håndteres av konsumenten (web-app)
225
+ - Generert kode skal ALDRI committes med sensitive data
226
+
227
+ ## 📚 API Moduler
228
+
229
+ SDK gir typed tilgang til følgende API moduler:
230
+
231
+ | Modul | Beskrivelse |
232
+ |-------|-------------|
233
+ | `accounts` | Kontohåndtering |
234
+ | `auth` | Autentisering |
235
+ | `users` | Brukerhåndtering |
236
+ | `jobs` | Jobbannonser |
237
+ | `assistants` | Assistenthåndtering |
238
+ | `applications` | Jobbsøknader |
239
+ | `inquiries` | Henvendelser |
240
+ | `contracts` | Kontrakter |
241
+ | `meetings` | Møter |
242
+ | `billing` | Fakturering |
243
+ | `analytics` | Statistikk |
244
+ | `admin` | Admin funksjoner |
245
+
246
+ ## 🤝 Bidra
247
+
248
+ 1. Gjør endringer i API (uloba3-backend)
249
+ 2. Generer nytt SDK
250
+ 3. Test grundig med yalc
251
+ 4. Commit med beskrivende melding
252
+ 5. Push til main branch
253
+
254
+ ## 📄 Lisens
255
+
256
+ Privat repository - ikke for offentlig distribusjon.
@@ -0,0 +1,31 @@
1
+ import { AxiosInstance } from 'axios';
2
+ import { Account, AccountWithRole, AccountUpdateInput, AssistanceDecision, RequestOptions } from '../api-types';
3
+ export declare class AccountsApi {
4
+ private axios;
5
+ constructor(axios: AxiosInstance);
6
+ /**
7
+ * Get all accounts for the authenticated user
8
+ */
9
+ list(options?: RequestOptions): Promise<AccountWithRole[]>;
10
+ /**
11
+ * Get a specific account by ID
12
+ */
13
+ get(id: string, options?: RequestOptions): Promise<Account>;
14
+ /**
15
+ * Update an account
16
+ */
17
+ update(id: string, data: AccountUpdateInput, options?: RequestOptions): Promise<Account>;
18
+ /**
19
+ * Soft delete an account
20
+ */
21
+ delete(id: string, options?: RequestOptions): Promise<void>;
22
+ /**
23
+ * Restore a soft deleted account
24
+ */
25
+ restore(id: string, options?: RequestOptions): Promise<Account>;
26
+ /**
27
+ * Get assistance decisions for an account
28
+ */
29
+ getAssistanceDecisions(id: string, options?: RequestOptions): Promise<AssistanceDecision[]>;
30
+ }
31
+ //# sourceMappingURL=accounts.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"accounts.d.ts","sourceRoot":"","sources":["../../src/api/accounts.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AACtC,OAAO,EACL,OAAO,EACP,eAAe,EACf,kBAAkB,EAClB,kBAAkB,EAClB,cAAc,EACf,MAAM,cAAc,CAAC;AAEtB,qBAAa,WAAW;IACV,OAAO,CAAC,KAAK;gBAAL,KAAK,EAAE,aAAa;IAExC;;OAEG;IACG,IAAI,CAAC,OAAO,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC;IAUhE;;OAEG;IACG,GAAG,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,OAAO,CAAC;IAQjE;;OAEG;IACG,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,kBAAkB,EAAE,OAAO,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,OAAO,CAAC;IAQ9F;;OAEG;IACG,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC;IAOjE;;OAEG;IACG,OAAO,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,OAAO,CAAC;IAQrE;;OAEG;IACG,sBAAsB,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,kBAAkB,EAAE,CAAC;CAUlG"}
@@ -0,0 +1,71 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.AccountsApi = void 0;
4
+ class AccountsApi {
5
+ axios;
6
+ constructor(axios) {
7
+ this.axios = axios;
8
+ }
9
+ /**
10
+ * Get all accounts for the authenticated user
11
+ */
12
+ async list(options) {
13
+ const response = await this.axios.get('/api/accounts', {
14
+ signal: options?.signal,
15
+ headers: options?.headers
16
+ });
17
+ return response.data;
18
+ }
19
+ // Account creation is disabled - accounts must be created through system administration
20
+ /**
21
+ * Get a specific account by ID
22
+ */
23
+ async get(id, options) {
24
+ const response = await this.axios.get(`/api/accounts/${id}`, {
25
+ signal: options?.signal,
26
+ headers: options?.headers
27
+ });
28
+ return response.data;
29
+ }
30
+ /**
31
+ * Update an account
32
+ */
33
+ async update(id, data, options) {
34
+ const response = await this.axios.put(`/api/accounts/${id}`, data, {
35
+ signal: options?.signal,
36
+ headers: options?.headers
37
+ });
38
+ return response.data;
39
+ }
40
+ /**
41
+ * Soft delete an account
42
+ */
43
+ async delete(id, options) {
44
+ await this.axios.delete(`/api/accounts/${id}`, {
45
+ signal: options?.signal,
46
+ headers: options?.headers
47
+ });
48
+ }
49
+ /**
50
+ * Restore a soft deleted account
51
+ */
52
+ async restore(id, options) {
53
+ const response = await this.axios.post(`/api/accounts/${id}/restore`, {}, {
54
+ signal: options?.signal,
55
+ headers: options?.headers
56
+ });
57
+ return response.data;
58
+ }
59
+ /**
60
+ * Get assistance decisions for an account
61
+ */
62
+ async getAssistanceDecisions(id, options) {
63
+ const response = await this.axios.get(`/api/accounts/${id}/assistance-decisions`, {
64
+ signal: options?.signal,
65
+ headers: options?.headers
66
+ });
67
+ return response.data;
68
+ }
69
+ }
70
+ exports.AccountsApi = AccountsApi;
71
+ //# sourceMappingURL=accounts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"accounts.js","sourceRoot":"","sources":["../../src/api/accounts.ts"],"names":[],"mappings":";;;AASA,MAAa,WAAW;IACF;IAApB,YAAoB,KAAoB;QAApB,UAAK,GAAL,KAAK,CAAe;IAAG,CAAC;IAE5C;;OAEG;IACH,KAAK,CAAC,IAAI,CAAC,OAAwB;QACjC,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,GAAG,CAAoB,eAAe,EAAE;YACxE,MAAM,EAAE,OAAO,EAAE,MAAM;YACvB,OAAO,EAAE,OAAO,EAAE,OAAO;SAC1B,CAAC,CAAC;QACH,OAAO,QAAQ,CAAC,IAAI,CAAC;IACvB,CAAC;IAED,wFAAwF;IAExF;;OAEG;IACH,KAAK,CAAC,GAAG,CAAC,EAAU,EAAE,OAAwB;QAC5C,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,GAAG,CAAU,iBAAiB,EAAE,EAAE,EAAE;YACpE,MAAM,EAAE,OAAO,EAAE,MAAM;YACvB,OAAO,EAAE,OAAO,EAAE,OAAO;SAC1B,CAAC,CAAC;QACH,OAAO,QAAQ,CAAC,IAAI,CAAC;IACvB,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,MAAM,CAAC,EAAU,EAAE,IAAwB,EAAE,OAAwB;QACzE,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,GAAG,CAAU,iBAAiB,EAAE,EAAE,EAAE,IAAI,EAAE;YAC1E,MAAM,EAAE,OAAO,EAAE,MAAM;YACvB,OAAO,EAAE,OAAO,EAAE,OAAO;SAC1B,CAAC,CAAC;QACH,OAAO,QAAQ,CAAC,IAAI,CAAC;IACvB,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,MAAM,CAAC,EAAU,EAAE,OAAwB;QAC/C,MAAM,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,iBAAiB,EAAE,EAAE,EAAE;YAC7C,MAAM,EAAE,OAAO,EAAE,MAAM;YACvB,OAAO,EAAE,OAAO,EAAE,OAAO;SAC1B,CAAC,CAAC;IACL,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,OAAO,CAAC,EAAU,EAAE,OAAwB;QAChD,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI,CAAU,iBAAiB,EAAE,UAAU,EAAE,EAAE,EAAE;YACjF,MAAM,EAAE,OAAO,EAAE,MAAM;YACvB,OAAO,EAAE,OAAO,EAAE,OAAO;SAC1B,CAAC,CAAC;QACH,OAAO,QAAQ,CAAC,IAAI,CAAC;IACvB,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,sBAAsB,CAAC,EAAU,EAAE,OAAwB;QAC/D,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,GAAG,CACnC,iBAAiB,EAAE,uBAAuB,EAC1C;YACE,MAAM,EAAE,OAAO,EAAE,MAAM;YACvB,OAAO,EAAE,OAAO,EAAE,OAAO;SAC1B,CACF,CAAC;QACF,OAAO,QAAQ,CAAC,IAAI,CAAC;IACvB,CAAC;CACF;AAxED,kCAwEC"}
@@ -0,0 +1,41 @@
1
+ import { AxiosInstance } from 'axios';
2
+ import { Arrangement, CreateArrangementDto, UpdateArrangementDto, ReorderArrangementsDto, ArrangementStats } from '../../api-types';
3
+ export declare class AdminArrangementsApi {
4
+ private axios;
5
+ constructor(axios: AxiosInstance);
6
+ /**
7
+ * List all arrangements
8
+ */
9
+ list(): Promise<{
10
+ arrangements: Arrangement[];
11
+ }>;
12
+ /**
13
+ * Get a single arrangement by ID
14
+ */
15
+ get(id: string): Promise<Arrangement>;
16
+ /**
17
+ * Create a new arrangement
18
+ */
19
+ create(data: CreateArrangementDto): Promise<Arrangement>;
20
+ /**
21
+ * Update an arrangement
22
+ */
23
+ update(id: string, data: UpdateArrangementDto): Promise<Arrangement>;
24
+ /**
25
+ * Delete an arrangement
26
+ */
27
+ delete(id: string): Promise<{
28
+ success: boolean;
29
+ }>;
30
+ /**
31
+ * Reorder arrangements
32
+ */
33
+ reorder(data: ReorderArrangementsDto): Promise<{
34
+ arrangements: Arrangement[];
35
+ }>;
36
+ /**
37
+ * Get arrangement statistics
38
+ */
39
+ getStats(id: string): Promise<ArrangementStats>;
40
+ }
41
+ //# sourceMappingURL=arrangements.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"arrangements.d.ts","sourceRoot":"","sources":["../../../src/api/admin/arrangements.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AACtC,OAAO,EACL,WAAW,EACX,oBAAoB,EACpB,oBAAoB,EACpB,sBAAsB,EACtB,gBAAgB,EACjB,MAAM,iBAAiB,CAAC;AAEzB,qBAAa,oBAAoB;IACnB,OAAO,CAAC,KAAK;gBAAL,KAAK,EAAE,aAAa;IAExC;;OAEG;IACG,IAAI,IAAI,OAAO,CAAC;QAAE,YAAY,EAAE,WAAW,EAAE,CAAA;KAAE,CAAC;IAKtD;;OAEG;IACG,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;IAK3C;;OAEG;IACG,MAAM,CAAC,IAAI,EAAE,oBAAoB,GAAG,OAAO,CAAC,WAAW,CAAC;IAK9D;;OAEG;IACG,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,oBAAoB,GAAG,OAAO,CAAC,WAAW,CAAC;IAK1E;;OAEG;IACG,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,OAAO,EAAE,OAAO,CAAA;KAAE,CAAC;IAKvD;;OAEG;IACG,OAAO,CAAC,IAAI,EAAE,sBAAsB,GAAG,OAAO,CAAC;QAAE,YAAY,EAAE,WAAW,EAAE,CAAA;KAAE,CAAC;IAKrF;;OAEG;IACG,QAAQ,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC;CAItD"}