@formant/realtime-sdk 1.2.0 → 1.3.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.
@@ -1,9 +1,3 @@
1
- /*
2
- object-assign
3
- (c) Sindre Sorhus
4
- @license MIT
5
- */
6
-
7
1
  /*!
8
2
  * The buffer module from node.js, for the browser.
9
3
  *
@@ -11,4 +5,15 @@ object-assign
11
5
  * @license MIT
12
6
  */
13
7
 
8
+ /*!
9
+ * The buffer module from node.js, for the browser.
10
+ *
11
+ * @author Feross Aboukhadijeh <https://feross.org>
12
+ * @license MIT
13
+ */
14
+
14
15
  /*! https://mths.be/punycode v1.4.1 by @mathias */
16
+
17
+ /*! ieee754. BSD-3-Clause License. Feross Aboukhadijeh <https://feross.org/opensource> */
18
+
19
+ /*! safe-buffer. MIT License. Feross Aboukhadijeh <https://feross.org/opensource> */
@@ -0,0 +1,5 @@
1
+ import { auditLogActionTypes } from "./auditLogActionTypes";
2
+ export type AuditLogActionType = (typeof auditLogActionTypes)[number];
3
+ export declare const httpMethodToAuditLogTypeMap: {
4
+ [httpMethod: string]: AuditLogActionType;
5
+ };
@@ -0,0 +1,14 @@
1
+ import { AuditLogActionType } from "./AuditLogActionType";
2
+ import { Uuid } from "./Uuid";
3
+ export interface IAuditLog {
4
+ organizationId: Uuid;
5
+ userId?: Uuid;
6
+ deviceId?: Uuid;
7
+ impersonatorUserId?: Uuid;
8
+ action: AuditLogActionType;
9
+ statusOk: boolean;
10
+ entityName: string;
11
+ entityId: Uuid;
12
+ entity?: any;
13
+ lastFiveDigitsPhoneNumber?: string;
14
+ }
@@ -0,0 +1,5 @@
1
+ export interface ICheckSsoResult {
2
+ issuer: string;
3
+ clientId: string;
4
+ isSso?: boolean;
5
+ }
@@ -1,10 +1,11 @@
1
+ import { ITagFilter } from "./ITagFilter";
1
2
  import { ITagSets } from "./ITagSets";
2
3
  import { StreamType } from "./StreamType";
3
4
  import { Uuid } from "./Uuid";
4
- export interface IFilter {
5
+ export interface IFilter extends ITagFilter {
5
6
  deviceIds?: Uuid[];
6
7
  names?: string[];
7
8
  types?: StreamType[];
8
- tags?: ITagSets | ITagSets[];
9
+ notTags?: ITagSets | ITagSets[];
9
10
  notNames?: string[];
10
11
  }
@@ -0,0 +1,4 @@
1
+ export interface IJoy {
2
+ axes: number[];
3
+ buttons: number[];
4
+ }
@@ -1,5 +1,7 @@
1
+ import { ITagFilter } from "./ITagFilter";
1
2
  export interface ILoginRequest {
2
3
  email: string;
3
4
  password: string;
4
5
  tokenExpirationSeconds?: number;
6
+ filter?: ITagFilter;
5
7
  }
@@ -0,0 +1,4 @@
1
+ import { ITagSets } from "./ITagSets";
2
+ export interface ITagFilter {
3
+ tags?: ITagSets | ITagSets[];
4
+ }
@@ -31,4 +31,6 @@ export interface IUser extends ITaggedEntity {
31
31
  units?: string;
32
32
  timezone?: string;
33
33
  allowCustomEmailConfiguration?: boolean;
34
+ title?: string | null;
35
+ description?: string | null;
34
36
  }
@@ -1,3 +1,3 @@
1
1
  export type RequireKeys<T> = {
2
- [K in keyof T & {}]: T[K];
2
+ [K in keyof Required<T>]: T[K];
3
3
  };
@@ -0,0 +1 @@
1
+ export declare const auditLogActionTypes: readonly ["create", "update", "delete", "provision", "unprovision", "sso-login", "forgot-password"];
@@ -11,6 +11,7 @@ export declare const rtcBitsetStreamType: "bitset";
11
11
  export declare const rtcTwistStreamType: "twist";
12
12
  export declare const rtcCompressedImageStreamType: "compressed-image";
13
13
  export declare const rtcH264VideoFrameStreamType: "h264-video-frame";
14
+ export declare const rtcVideoMetadataStreamType: "video-metadata";
14
15
  export declare const rtcAudioChunkStreamType: "audio-chunk";
15
16
  export declare const rtcPoseStreamType: "pose";
16
17
  export declare const rtcGoalIDStreamType: "goal-id";
@@ -21,6 +22,7 @@ export declare const rtcMarkerArrayStreamType: "marker-array";
21
22
  export declare const rtcPointStreamType: "point";
22
23
  export declare const rtcJsonStringType: "json-string";
23
24
  export declare const rtcOdometryStreamType: "odometry";
24
- export declare const rtcStreamTypes: readonly ["ping", "pong", "ping-v2", "pong-v2", "stream-control", "streams-info", "agent-info", "numeric", "boolean", "bitset", "twist", "compressed-image", "h264-video-frame", "audio-chunk", "pose", "goal-id", "joint-state", "pose-with-covariance", "point-cloud", "point", "marker-array", "json-string", "odometry"];
25
+ export declare const rtcJoyStreamType: "joy";
26
+ export declare const rtcStreamTypes: readonly ["ping", "pong", "ping-v2", "pong-v2", "stream-control", "streams-info", "agent-info", "numeric", "boolean", "bitset", "twist", "compressed-image", "h264-video-frame", "audio-chunk", "pose", "goal-id", "joint-state", "pose-with-covariance", "point-cloud", "point", "marker-array", "json-string", "odometry", "joy"];
25
27
  export declare const rtcImageStreamTypes: string[];
26
28
  export declare const rtcSystemStreamTypes: string[];
@@ -1,6 +1,6 @@
1
1
  import * as grpcWeb from 'grpc-web';
2
2
 
3
- import * as api_signaling_v1_signaling_pb from '../../../api/signaling/v1/signaling_pb';
3
+ import * as signaling_pb from './signaling_pb'; // proto import: "signaling.proto"
4
4
 
5
5
 
6
6
  export class SignalingClient {
@@ -9,65 +9,65 @@ export class SignalingClient {
9
9
  options?: null | { [index: string]: any; });
10
10
 
11
11
  getHealth(
12
- request: api_signaling_v1_signaling_pb.GetHealthRequest,
12
+ request: signaling_pb.GetHealthRequest,
13
13
  metadata: grpcWeb.Metadata | undefined,
14
14
  callback: (err: grpcWeb.RpcError,
15
- response: api_signaling_v1_signaling_pb.GetHealthResponse) => void
16
- ): grpcWeb.ClientReadableStream<api_signaling_v1_signaling_pb.GetHealthResponse>;
15
+ response: signaling_pb.GetHealthResponse) => void
16
+ ): grpcWeb.ClientReadableStream<signaling_pb.GetHealthResponse>;
17
17
 
18
18
  createPeer(
19
- request: api_signaling_v1_signaling_pb.CreatePeerRequest,
19
+ request: signaling_pb.CreatePeerRequest,
20
20
  metadata: grpcWeb.Metadata | undefined,
21
21
  callback: (err: grpcWeb.RpcError,
22
- response: api_signaling_v1_signaling_pb.CreatePeerResponse) => void
23
- ): grpcWeb.ClientReadableStream<api_signaling_v1_signaling_pb.CreatePeerResponse>;
22
+ response: signaling_pb.CreatePeerResponse) => void
23
+ ): grpcWeb.ClientReadableStream<signaling_pb.CreatePeerResponse>;
24
24
 
25
25
  deletePeer(
26
- request: api_signaling_v1_signaling_pb.DeletePeerRequest,
26
+ request: signaling_pb.DeletePeerRequest,
27
27
  metadata: grpcWeb.Metadata | undefined,
28
28
  callback: (err: grpcWeb.RpcError,
29
- response: api_signaling_v1_signaling_pb.DeletePeerResponse) => void
30
- ): grpcWeb.ClientReadableStream<api_signaling_v1_signaling_pb.DeletePeerResponse>;
29
+ response: signaling_pb.DeletePeerResponse) => void
30
+ ): grpcWeb.ClientReadableStream<signaling_pb.DeletePeerResponse>;
31
31
 
32
32
  refreshPeer(
33
- request: api_signaling_v1_signaling_pb.RefreshPeerRequest,
33
+ request: signaling_pb.RefreshPeerRequest,
34
34
  metadata: grpcWeb.Metadata | undefined,
35
35
  callback: (err: grpcWeb.RpcError,
36
- response: api_signaling_v1_signaling_pb.RefreshPeerResponse) => void
37
- ): grpcWeb.ClientReadableStream<api_signaling_v1_signaling_pb.RefreshPeerResponse>;
36
+ response: signaling_pb.RefreshPeerResponse) => void
37
+ ): grpcWeb.ClientReadableStream<signaling_pb.RefreshPeerResponse>;
38
38
 
39
39
  getPeers(
40
- request: api_signaling_v1_signaling_pb.GetPeersRequest,
40
+ request: signaling_pb.GetPeersRequest,
41
41
  metadata: grpcWeb.Metadata | undefined,
42
42
  callback: (err: grpcWeb.RpcError,
43
- response: api_signaling_v1_signaling_pb.GetPeersResponse) => void
44
- ): grpcWeb.ClientReadableStream<api_signaling_v1_signaling_pb.GetPeersResponse>;
43
+ response: signaling_pb.GetPeersResponse) => void
44
+ ): grpcWeb.ClientReadableStream<signaling_pb.GetPeersResponse>;
45
45
 
46
46
  getIceServers(
47
- request: api_signaling_v1_signaling_pb.GetIceServersRequest,
47
+ request: signaling_pb.GetIceServersRequest,
48
48
  metadata: grpcWeb.Metadata | undefined,
49
49
  callback: (err: grpcWeb.RpcError,
50
- response: api_signaling_v1_signaling_pb.GetIceServersResponse) => void
51
- ): grpcWeb.ClientReadableStream<api_signaling_v1_signaling_pb.GetIceServersResponse>;
50
+ response: signaling_pb.GetIceServersResponse) => void
51
+ ): grpcWeb.ClientReadableStream<signaling_pb.GetIceServersResponse>;
52
52
 
53
53
  sendSignal(
54
- request: api_signaling_v1_signaling_pb.SendSignalRequest,
54
+ request: signaling_pb.SendSignalRequest,
55
55
  metadata: grpcWeb.Metadata | undefined,
56
56
  callback: (err: grpcWeb.RpcError,
57
- response: api_signaling_v1_signaling_pb.SendSignalResponse) => void
58
- ): grpcWeb.ClientReadableStream<api_signaling_v1_signaling_pb.SendSignalResponse>;
57
+ response: signaling_pb.SendSignalResponse) => void
58
+ ): grpcWeb.ClientReadableStream<signaling_pb.SendSignalResponse>;
59
59
 
60
60
  receiveSignalStream(
61
- request: api_signaling_v1_signaling_pb.ReceiveSignalStreamRequest,
61
+ request: signaling_pb.ReceiveSignalStreamRequest,
62
62
  metadata?: grpcWeb.Metadata
63
- ): grpcWeb.ClientReadableStream<api_signaling_v1_signaling_pb.ReceiveSignalStreamResponse>;
63
+ ): grpcWeb.ClientReadableStream<signaling_pb.ReceiveSignalStreamResponse>;
64
64
 
65
65
  getSessions(
66
- request: api_signaling_v1_signaling_pb.GetSessionsRequest,
66
+ request: signaling_pb.GetSessionsRequest,
67
67
  metadata: grpcWeb.Metadata | undefined,
68
68
  callback: (err: grpcWeb.RpcError,
69
- response: api_signaling_v1_signaling_pb.GetSessionsResponse) => void
70
- ): grpcWeb.ClientReadableStream<api_signaling_v1_signaling_pb.GetSessionsResponse>;
69
+ response: signaling_pb.GetSessionsResponse) => void
70
+ ): grpcWeb.ClientReadableStream<signaling_pb.GetSessionsResponse>;
71
71
 
72
72
  }
73
73
 
@@ -77,49 +77,49 @@ export class SignalingPromiseClient {
77
77
  options?: null | { [index: string]: any; });
78
78
 
79
79
  getHealth(
80
- request: api_signaling_v1_signaling_pb.GetHealthRequest,
80
+ request: signaling_pb.GetHealthRequest,
81
81
  metadata?: grpcWeb.Metadata
82
- ): Promise<api_signaling_v1_signaling_pb.GetHealthResponse>;
82
+ ): Promise<signaling_pb.GetHealthResponse>;
83
83
 
84
84
  createPeer(
85
- request: api_signaling_v1_signaling_pb.CreatePeerRequest,
85
+ request: signaling_pb.CreatePeerRequest,
86
86
  metadata?: grpcWeb.Metadata
87
- ): Promise<api_signaling_v1_signaling_pb.CreatePeerResponse>;
87
+ ): Promise<signaling_pb.CreatePeerResponse>;
88
88
 
89
89
  deletePeer(
90
- request: api_signaling_v1_signaling_pb.DeletePeerRequest,
90
+ request: signaling_pb.DeletePeerRequest,
91
91
  metadata?: grpcWeb.Metadata
92
- ): Promise<api_signaling_v1_signaling_pb.DeletePeerResponse>;
92
+ ): Promise<signaling_pb.DeletePeerResponse>;
93
93
 
94
94
  refreshPeer(
95
- request: api_signaling_v1_signaling_pb.RefreshPeerRequest,
95
+ request: signaling_pb.RefreshPeerRequest,
96
96
  metadata?: grpcWeb.Metadata
97
- ): Promise<api_signaling_v1_signaling_pb.RefreshPeerResponse>;
97
+ ): Promise<signaling_pb.RefreshPeerResponse>;
98
98
 
99
99
  getPeers(
100
- request: api_signaling_v1_signaling_pb.GetPeersRequest,
100
+ request: signaling_pb.GetPeersRequest,
101
101
  metadata?: grpcWeb.Metadata
102
- ): Promise<api_signaling_v1_signaling_pb.GetPeersResponse>;
102
+ ): Promise<signaling_pb.GetPeersResponse>;
103
103
 
104
104
  getIceServers(
105
- request: api_signaling_v1_signaling_pb.GetIceServersRequest,
105
+ request: signaling_pb.GetIceServersRequest,
106
106
  metadata?: grpcWeb.Metadata
107
- ): Promise<api_signaling_v1_signaling_pb.GetIceServersResponse>;
107
+ ): Promise<signaling_pb.GetIceServersResponse>;
108
108
 
109
109
  sendSignal(
110
- request: api_signaling_v1_signaling_pb.SendSignalRequest,
110
+ request: signaling_pb.SendSignalRequest,
111
111
  metadata?: grpcWeb.Metadata
112
- ): Promise<api_signaling_v1_signaling_pb.SendSignalResponse>;
112
+ ): Promise<signaling_pb.SendSignalResponse>;
113
113
 
114
114
  receiveSignalStream(
115
- request: api_signaling_v1_signaling_pb.ReceiveSignalStreamRequest,
115
+ request: signaling_pb.ReceiveSignalStreamRequest,
116
116
  metadata?: grpcWeb.Metadata
117
- ): grpcWeb.ClientReadableStream<api_signaling_v1_signaling_pb.ReceiveSignalStreamResponse>;
117
+ ): grpcWeb.ClientReadableStream<signaling_pb.ReceiveSignalStreamResponse>;
118
118
 
119
119
  getSessions(
120
- request: api_signaling_v1_signaling_pb.GetSessionsRequest,
120
+ request: signaling_pb.GetSessionsRequest,
121
121
  metadata?: grpcWeb.Metadata
122
- ): Promise<api_signaling_v1_signaling_pb.GetSessionsResponse>;
122
+ ): Promise<signaling_pb.GetSessionsResponse>;
123
123
 
124
124
  }
125
125
 
@@ -6,9 +6,9 @@
6
6
 
7
7
  // Code generated by protoc-gen-grpc-web. DO NOT EDIT.
8
8
  // versions:
9
- // protoc-gen-grpc-web v1.4.1
9
+ // protoc-gen-grpc-web v1.5.0
10
10
  // protoc v3.19.1
11
- // source: api/signaling/v1/signaling.proto
11
+ // source: signaling.proto
12
12
 
13
13
 
14
14
  /* eslint-disable */
@@ -1,6 +1,6 @@
1
1
  import * as jspb from 'google-protobuf'
2
2
 
3
- import * as google_protobuf_wrappers_pb from 'google-protobuf/google/protobuf/wrappers_pb';
3
+ import * as google_protobuf_wrappers_pb from 'google-protobuf/google/protobuf/wrappers_pb'; // proto import: "google/protobuf/wrappers.proto"
4
4
 
5
5
 
6
6
  export class Peer extends jspb.Message {
@@ -1,4 +1,4 @@
1
- // source: protos/api/signaling/v1/signaling.proto
1
+ // source: signaling.proto
2
2
  /**
3
3
  * @fileoverview
4
4
  * @enhanceable
@@ -13,13 +13,13 @@
13
13
 
14
14
  var jspb = require('google-protobuf');
15
15
  var goog = jspb;
16
- var global =
17
- (typeof globalThis !== 'undefined' && globalThis) ||
18
- (typeof window !== 'undefined' && window) ||
19
- (typeof global !== 'undefined' && global) ||
20
- (typeof self !== 'undefined' && self) ||
21
- (function () { return this; }).call(null) ||
22
- Function('return this')();
16
+ var global = (function() {
17
+ if (this) { return this; }
18
+ if (typeof window !== 'undefined') { return window; }
19
+ if (typeof global !== 'undefined') { return global; }
20
+ if (typeof self !== 'undefined') { return self; }
21
+ return Function('return this')();
22
+ }.call(null));
23
23
 
24
24
  var google_protobuf_wrappers_pb = require('google-protobuf/google/protobuf/wrappers_pb.js');
25
25
  goog.object.extend(proto, google_protobuf_wrappers_pb);
@@ -4,4 +4,6 @@ export interface IRTCStatsIceCandidatePair {
4
4
  localCandidateId: string;
5
5
  remoteCandidateId: string;
6
6
  nominated: boolean;
7
+ bytesReceived: number;
8
+ bytesSent: number;
7
9
  }
@@ -1,7 +1,9 @@
1
1
  import { IRTCStatsIceCandidate } from "./IRTCStatsIceCandidate";
2
+ import { IRTCStatsIceCandidatePair } from "./IRTCStatsIceCandidatePair";
2
3
  import { IRTCStatsTransport } from "./IRTCStatsTransport";
3
4
  export interface IRtcConnectionStatsInfo {
4
5
  transport: IRTCStatsTransport;
5
6
  localCandidate: IRTCStatsIceCandidate;
6
7
  remoteCandidate: IRTCStatsIceCandidate;
8
+ candidatePair: IRTCStatsIceCandidatePair;
7
9
  }
@@ -3,6 +3,7 @@ import { ICompressedImage } from "../../model/ICompressedImage";
3
3
  import { IGoalID } from "../../model/IGoalID";
4
4
  import { IH264VideoFrame } from "../../model/IH264VideoFrame";
5
5
  import { IJointState } from "../../model/IJointState";
6
+ import { IJoy } from "../../model/IJoy";
6
7
  import { IJsonString } from "../../model/IJsonString";
7
8
  import { IMarker3DArray } from "../../model/IMarker3DArray";
8
9
  import { IOdometry } from "../../model/IOdometry";
@@ -39,6 +40,9 @@ export interface IRtcStreamPayload {
39
40
  pose?: ITransform;
40
41
  goalID?: IGoalID;
41
42
  h264VideoFrame?: IH264VideoFrame;
43
+ videoMetadata?: {
44
+ [key: string]: string;
45
+ };
42
46
  audioChunk?: IAudioChunk;
43
47
  jointState?: IJointState;
44
48
  poseWithCovariance?: IPoseWithCovariance;
@@ -47,4 +51,5 @@ export interface IRtcStreamPayload {
47
51
  markerArray?: IMarker3DArray;
48
52
  jsonString?: IJsonString;
49
53
  odometry?: IOdometry;
54
+ joy?: IJoy;
50
55
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@formant/realtime-sdk",
3
- "version": "1.2.0",
3
+ "version": "1.3.1",
4
4
  "license": "MIT",
5
5
  "main": "./dist/index.js",
6
6
  "types": "./dist/realtime-sdk/src/index.d.ts",
@@ -8,15 +8,17 @@
8
8
  "dist"
9
9
  ],
10
10
  "scripts": {
11
- "clean": "rm -rf dist",
11
+ "clean": "rimraf dist",
12
12
  "compile": "tsc",
13
- "build": "yarn maybe-make-protos && env $(grep -v '^#' src/config/production.env) webpack",
13
+ "build": "yarn maybe-make-protos && env $(node ../../scripts/webpack4-node-18-support.js && grep -v '^#' src/config/production.env) webpack",
14
14
  "postbuild": "tsc --emitDeclarationOnly --declaration --declarationDir ./dist --skipLibCheck && tsc-alias",
15
- "maybe-make-protos": "if [ -z ${LERNA_PACKAGE_NAME} ]; then cd ../../../ && make protos && cd -; fi"
15
+ "maybe-make-protos": "if [ -z ${LERNA_PACKAGE_NAME} ]; then cd ../../../ && make protos_ts && cd -; fi"
16
16
  },
17
17
  "dependencies": {
18
- "env-var": "^7.3.1",
19
- "@types/google-protobuf": "~3.7.0"
18
+ "@types/generic-pool": "^3.8.1",
19
+ "@types/google-protobuf": "~3.7.0",
20
+ "env-var": "^7.4.0",
21
+ "generic-pool": "^3.9.0"
20
22
  },
21
23
  "devDependencies": {
22
24
  "@formant/client": "*",
@@ -24,16 +26,32 @@
24
26
  "@formant/model": "*",
25
27
  "@formant/protos": "*",
26
28
  "@formant/rtc-client": "*",
29
+ "assert": "^2.1.0",
30
+ "browserify-zlib": "^0.2.0",
31
+ "buffer": "^6.0.3",
27
32
  "circular-dependency-plugin": "^5.2.2",
28
33
  "copy-webpack-plugin": "^6.4.1",
34
+ "crypto-browserify": "^3.12.0",
29
35
  "file-loader": "^5.1.0",
30
36
  "fork-ts-checker-webpack-plugin": "^6.5.3",
37
+ "https-browserify": "^1.0.0",
38
+ "os-browserify": "^0.3.0",
39
+ "path-browserify": "^1.0.1",
40
+ "process": "^0.11.10",
41
+ "rimraf": "^5.0.1",
42
+ "stream-browserify": "^3.0.0",
43
+ "stream-http": "^3.2.0",
31
44
  "terser-webpack-plugin": "^2.3.5",
32
- "ts-loader": "^6.2.1",
45
+ "ts-loader": "^9.5.0",
33
46
  "tsc-alias": "^1.4.1",
34
- "webpack": "^4.42.0",
35
- "webpack-bundle-analyzer": "^3.6.1"
47
+ "url": "^0.11.3",
48
+ "webpack": "^5.88.2",
49
+ "webpack-bundle-analyzer": "^4.9.0",
50
+ "webpack-filter-warnings-plugin": "^1.2.1"
36
51
  },
37
52
  "author": "",
38
- "description": ""
53
+ "description": "",
54
+ "engines": {
55
+ "node": "^16.13.0 || ^18.12.0"
56
+ }
39
57
  }
@@ -1,25 +0,0 @@
1
- load("@rules_proto//proto:defs.bzl", "proto_library")
2
- load("@io_bazel_rules_go//go:def.bzl", "go_library")
3
- load("@io_bazel_rules_go//proto:def.bzl", "go_proto_library")
4
-
5
- proto_library(
6
- name = "signaling_proto",
7
- srcs = ["signaling.proto"],
8
- visibility = ["//visibility:public"],
9
- deps = ["@com_google_protobuf//:wrappers_proto"],
10
- )
11
-
12
- go_proto_library(
13
- name = "signaling_go_proto",
14
- compilers = ["@io_bazel_rules_go//proto:go_grpc"],
15
- importpath = "github.com/FormantIO/genproto/go/v1/api/signaling",
16
- proto = ":signaling_proto",
17
- visibility = ["//visibility:public"],
18
- )
19
-
20
- go_library(
21
- name = "signaling",
22
- embed = [":signaling_go_proto"],
23
- importpath = "github.com/FormantIO/genproto/go/v1/api/signaling",
24
- visibility = ["//visibility:public"],
25
- )
File without changes