@fmsim/fmsim 2.0.0-beta.8 → 2.0.0-beta.80

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fmsim/fmsim",
3
- "version": "2.0.0-beta.8",
3
+ "version": "2.0.0-beta.80",
4
4
  "main": "dist-server/index.js",
5
5
  "browser": "dist-client/index.js",
6
6
  "things-factory": true,
@@ -17,7 +17,7 @@
17
17
  },
18
18
  "scripts": {
19
19
  "serve": "things-factory fmsim",
20
- "serve:dev": "npm run build:server && things-factory-dev fmsim --webpack @fmsim/builder/webpack.config.dev.js",
20
+ "serve:dev": "npm run build:server && concurrently -k -n api,board,machine,lv,webpack \"tsc -w --preserveWatchOutput -p ../api/tsconfig.json\" \"tsc -w --preserveWatchOutput -p ../board/tsconfig.json\" \"tsc -w --preserveWatchOutput -p ../machine/tsconfig.json\" \"tsc -w --preserveWatchOutput -p ../layout-view/client/tsconfig.json\" \"things-factory-dev fmsim --webpack @fmsim/builder/webpack.config.dev.js\"",
21
21
  "build": "npm run build:server && npm run build:client",
22
22
  "build:client": "npm run clean:client && npm run copy:files && (tsc --p ./client/tsconfig.json; exit 0)",
23
23
  "build:server": "npm run clean:server && (tsc --p ./server/tsconfig.json; exit 0)",
@@ -40,8 +40,8 @@
40
40
  "docker:push": "docker image push hatiolab/fmsim:latest && docker image push hatiolab/fmsim:$npm_package_version"
41
41
  },
42
42
  "dependencies": {
43
- "@fmsim/layout-view": "^2.0.0-beta.8",
44
- "@fmsim/machine": "^2.0.0-beta.7",
43
+ "@fmsim/layout-view": "^2.0.0-beta.79",
44
+ "@fmsim/machine": "^2.0.0-beta.80",
45
45
  "@operato/attachment": "^10.0.0-beta.1",
46
46
  "@operato/font": "^10.0.0-beta.1",
47
47
  "@operato/i18n": "^10.0.0-beta.1",
@@ -71,12 +71,12 @@
71
71
  "pretendard": "^1.3.9"
72
72
  },
73
73
  "devDependencies": {
74
- "@fmsim/builder": "^2.0.0-beta.7",
74
+ "@fmsim/builder": "^2.0.0-beta.75",
75
75
  "copyfiles": "^2.4.1",
76
76
  "typescript": "^5.8.2"
77
77
  },
78
78
  "resolutions": {
79
79
  "lit": "^3.0.0"
80
80
  },
81
- "gitHead": "f759e3fadd49b2476ef01a6531721b9e1d7f13eb"
81
+ "gitHead": "154b52d88246116ee030f14a0d399f6172640318"
82
82
  }
package/schema.graphql CHANGED
@@ -347,6 +347,7 @@ type Attachment {
347
347
  refType: String
348
348
  size: String!
349
349
  tags: Object
350
+ thumbnail: String
350
351
  updatedAt: DateTimeISO!
351
352
  updater: User
352
353
  }
@@ -655,6 +656,16 @@ type Board {
655
656
  """A list of play groups that this board is a part of."""
656
657
  playGroups: [PlayGroup!]
657
658
 
659
+ """
660
+ Sort order for display. Lower values appear first. Supports fractional values for insertion.
661
+ """
662
+ sortOrder: Float
663
+
664
+ """
665
+ Source ImportSession id (board-import) when this board was generated from a drawing/image import.
666
+ """
667
+ sourceImportSessionId: String
668
+
658
669
  """The state of the board, can be 'draft' or 'released'."""
659
670
  state: String
660
671
 
@@ -706,6 +717,16 @@ type BoardFavorite {
706
717
  """A list of play groups that this board is a part of."""
707
718
  playGroups: [PlayGroup!]
708
719
 
720
+ """
721
+ Sort order for display. Lower values appear first. Supports fractional values for insertion.
722
+ """
723
+ sortOrder: Float
724
+
725
+ """
726
+ Source ImportSession id (board-import) when this board was generated from a drawing/image import.
727
+ """
728
+ sourceImportSessionId: String
729
+
709
730
  """The state of the board, can be 'draft' or 'released'."""
710
731
  state: String
711
732
 
@@ -1390,6 +1411,27 @@ type DomainList {
1390
1411
  total: Int
1391
1412
  }
1392
1413
 
1414
+ """An ownership record binding a User to a Domain (multi-owner support)."""
1415
+ type DomainOwner {
1416
+ """Domain that the user owns."""
1417
+ domain: Domain!
1418
+
1419
+ """When the ownership was granted."""
1420
+ grantedAt: DateTimeISO!
1421
+
1422
+ """User who granted this ownership (audit)."""
1423
+ grantedBy: User
1424
+
1425
+ """Unique identifier."""
1426
+ id: ID!
1427
+
1428
+ """Optional reason/memo for granting ownership."""
1429
+ reason: String
1430
+
1431
+ """User who owns the domain."""
1432
+ user: User!
1433
+ }
1434
+
1393
1435
  """Input type for updating an existing domain entity."""
1394
1436
  input DomainPatch {
1395
1437
  """Additional attributes for the domain in key-value pairs."""
@@ -2354,6 +2396,18 @@ input MenuPatch {
2354
2396
  totalProp: String
2355
2397
  }
2356
2398
 
2399
+ type MockEntities {
2400
+ ports: [String!]!
2401
+ stockers: [String!]!
2402
+ vehicles: MockVehicles!
2403
+ zones: [String!]!
2404
+ }
2405
+
2406
+ type MockVehicles {
2407
+ agvs: [String!]!
2408
+ ohts: [String!]!
2409
+ }
2410
+
2357
2411
  type Mutation {
2358
2412
  """
2359
2413
  Activates a user account in the current domain. Use this mutation to enable a user who was previously inactive.
@@ -2363,10 +2417,18 @@ type Mutation {
2363
2417
  username: String!
2364
2418
  ): Boolean!
2365
2419
 
2420
+ """Add a user as owner of the current domain."""
2421
+ addDomainOwner(reason: String, username: String!): DomainOwner!
2422
+
2366
2423
  """
2367
2424
  Attaches an existing contact to an employee. The contact is identified by its ID and the employee is identified by their ID.
2368
2425
  """
2369
2426
  attachContact(contactId: String!, id: String!): Employee!
2427
+
2428
+ """
2429
+ 썸네일이 없는 기존 첨부파일들에 대해 서버에서 썸네일을 일괄 생성한다. 한 호출당 limit 개까지만 처리하며, remaining > 0 이면 반복 호출 필요.
2430
+ """
2431
+ backfillAttachmentThumbnails(limit: Int = 20): ThumbnailBackfillResult!
2370
2432
  cancelInvitation(email: EmailAddress!, reference: String!, type: String!): Boolean!
2371
2433
 
2372
2434
  """To clear translations cache"""
@@ -2968,8 +3030,14 @@ type Mutation {
2968
3030
 
2969
3031
  """Releases a board, making it public and creating a version history."""
2970
3032
  releaseBoard(id: String!): Board!
3033
+
3034
+ """Remove a user from the owners of the current domain."""
3035
+ removeDomainOwner(reason: String, username: String!): Boolean!
2971
3036
  renewApplicationAccessToken(id: String!, scope: String!): AccessToken!
2972
3037
 
3038
+ """Reorders a board between two adjacent boards by ID."""
3039
+ reorderBoard(id: String!, nextId: String, prevId: String): Boolean!
3040
+
2973
3041
  """Sets the custom playback order for boards in a play group."""
2974
3042
  reorderPlayGroup(boardIds: [String!]!, id: String!): PlayGroup!
2975
3043
 
@@ -4535,6 +4603,27 @@ input PlayGroupPatch {
4535
4603
  name: String
4536
4604
  }
4537
4605
 
4606
+ type PlaybackRecord {
4607
+ data: String!
4608
+ time: String!
4609
+ type: String!
4610
+ }
4611
+
4612
+ type PlaybackResponse {
4613
+ errorMessage: String
4614
+ playback: PlaybackResult
4615
+ status: Boolean!
4616
+ }
4617
+
4618
+ type PlaybackResult {
4619
+ scenarios: [PlaybackScenarioType!]!
4620
+ }
4621
+
4622
+ type PlaybackScenarioType {
4623
+ scenarioName: String!
4624
+ snapshots: [PlaybackRecord!]!
4625
+ }
4626
+
4538
4627
  """
4539
4628
  A privilege that can be granted to roles to control access to resources.
4540
4629
  """
@@ -4798,8 +4887,14 @@ type Query {
4798
4887
  sortings: [Sorting!]
4799
4888
  ): AuthProviderList!
4800
4889
 
4801
- """Finds a single board by its ID."""
4802
- board(id: String!): Board!
4890
+ """
4891
+ Finds a single board by its ID. If cachedUpdatedAt matches, model is omitted.
4892
+ """
4893
+ board(
4894
+ """Client cache timestamp — if matches, model field is omitted"""
4895
+ cachedUpdatedAt: String
4896
+ id: String!
4897
+ ): Board!
4803
4898
 
4804
4899
  """Finds a single board by its name."""
4805
4900
  boardByName(name: String!): Board
@@ -4873,6 +4968,11 @@ type Query {
4873
4968
  sortings: [Sorting!]
4874
4969
  ): BoardList!
4875
4970
 
4971
+ """
4972
+ Retrieves boards that have been updated or soft-deleted since the given timestamp.
4973
+ """
4974
+ boardsUpdatedSince(since: DateTimeISO!): [Board!]!
4975
+
4876
4976
  """
4877
4977
  Checks if the system is configured to provide a default password for new users.
4878
4978
  """
@@ -5052,6 +5152,9 @@ type Query {
5052
5152
  sortings: [Sorting!]
5053
5153
  ): DomainLinkList!
5054
5154
 
5155
+ """List owners of the current domain."""
5156
+ domainOwners: [DomainOwner!]!
5157
+
5055
5158
  """
5056
5159
  Fetches the list of available domain types from configuration. Only superusers are granted this privilege.
5057
5160
  """
@@ -5249,6 +5352,9 @@ type Query {
5249
5352
  invitation(email: EmailAddress!, reference: String!, type: String!): Invitation!
5250
5353
  invitations(reference: String!, type: String!): InvitationList!
5251
5354
 
5355
+ """Check if a user is an owner of the current domain."""
5356
+ isDomainOwner(username: String!): Boolean!
5357
+
5252
5358
  """To fetch multiple LoginHistories"""
5253
5359
  loginHistories(
5254
5360
  """An array of filter conditions to apply to the list query."""
@@ -5589,6 +5695,12 @@ type Query {
5589
5695
  sortings: [Sorting!]
5590
5696
  ): PlayGroupList!
5591
5697
 
5698
+ """Playback 데이터 조회 (목업)"""
5699
+ playback(count: Int, endTime: String, includeSnapshot: Boolean = true, startTime: String!): PlaybackResponse!
5700
+
5701
+ """목업 엔티티 목록 (보드 작화용)"""
5702
+ playbackEntities: MockEntities!
5703
+
5592
5704
  """To fetch a UserPreference"""
5593
5705
  preference(id: String!): UserPreference
5594
5706
 
@@ -6620,6 +6732,21 @@ input ThemePatch {
6620
6732
  value: Object
6621
6733
  }
6622
6734
 
6735
+ """썸네일 백필 결과"""
6736
+ type ThumbnailBackfillResult {
6737
+ """이번 호출에서 처리 시도한 첨부 개수"""
6738
+ attempted: Int!
6739
+
6740
+ """실패(생성 실패/콘텐츠 없음 등) 개수"""
6741
+ failed: Int!
6742
+
6743
+ """이번 처리 후에도 남아있는 썸네일 미생성 후보 개수 (대략치). 0 이면 완료"""
6744
+ remaining: Int!
6745
+
6746
+ """썸네일 생성·저장 성공 개수"""
6747
+ succeeded: Int!
6748
+ }
6749
+
6623
6750
  """The `Upload` scalar type represents a file upload."""
6624
6751
  scalar Upload
6625
6752
 
@@ -27,7 +27,6 @@
27
27
 
28
28
  <script src="https://ajax.googleapis.com/ajax/libs/webfont/1.6.26/webfont.js"></script>
29
29
 
30
- <script src="/fmsim/node_modules/@hatiolab/things-scene/things-scene-min.js"></script>
31
30
  <script src="/fmsim/scene-viewer.js"></script>
32
31
  </head>
33
32
  <body>
@@ -48,7 +48,6 @@
48
48
  })
49
49
  }
50
50
  </script>
51
- <script src="/fmsim/node_modules/@hatiolab/things-scene/things-scene-min.js"></script>
52
51
  <script src="/fmsim/headless-scene-components.js"></script>
53
52
 
54
53
  <script>
@@ -45,7 +45,6 @@
45
45
  })
46
46
  }
47
47
  </script>
48
- <script src="/fmsim/node_modules/@hatiolab/things-scene/things-scene-min.js"></script>
49
48
  <script src="/fmsim/headless-scene-components.js"></script>
50
49
 
51
50
  <script>