@aws-amplify/api-graphql 4.0.1-api-v6-models.8035dfc.0 → 4.0.1-api-v6-models.3eb7748.0

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.
@@ -0,0 +1,12 @@
1
+ import { ResourcesConfig } from '@aws-amplify/core';
2
+ type GraphQLConfig = Exclude<ResourcesConfig['API'], undefined>['GraphQL'];
3
+ type ModelIntrospectionSchema = Exclude<Exclude<GraphQLConfig, undefined>['modelIntrospection'], undefined>;
4
+ type Model = ModelIntrospectionSchema['models'][string];
5
+ /**
6
+ * Given an introspection schema model, returns all owner fields.
7
+ *
8
+ * @param model Model from an introspection schema
9
+ * @returns List of owner field names
10
+ */
11
+ export declare function resolveOwnerFields(model: Model): string[];
12
+ export {};
@@ -0,0 +1,63 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.resolveOwnerFields = void 0;
4
+ var tslib_1 = require("tslib");
5
+ /**
6
+ * Given an introspection schema model, returns all owner fields.
7
+ *
8
+ * @param model Model from an introspection schema
9
+ * @returns List of owner field names
10
+ */
11
+ function resolveOwnerFields(model) {
12
+ var e_1, _a, e_2, _b;
13
+ var ownerFields = new Set();
14
+ try {
15
+ for (var _c = tslib_1.__values(model.attributes || []), _d = _c.next(); !_d.done; _d = _c.next()) {
16
+ var attr = _d.value;
17
+ if (isAuthAttribute(attr)) {
18
+ try {
19
+ for (var _e = (e_2 = void 0, tslib_1.__values(attr.properties.rules)), _f = _e.next(); !_f.done; _f = _e.next()) {
20
+ var rule = _f.value;
21
+ if (rule.allow === 'owner') {
22
+ ownerFields.add(rule.ownerField || 'owner');
23
+ }
24
+ }
25
+ }
26
+ catch (e_2_1) { e_2 = { error: e_2_1 }; }
27
+ finally {
28
+ try {
29
+ if (_f && !_f.done && (_b = _e.return)) _b.call(_e);
30
+ }
31
+ finally { if (e_2) throw e_2.error; }
32
+ }
33
+ }
34
+ }
35
+ }
36
+ catch (e_1_1) { e_1 = { error: e_1_1 }; }
37
+ finally {
38
+ try {
39
+ if (_d && !_d.done && (_a = _c.return)) _a.call(_c);
40
+ }
41
+ finally { if (e_1) throw e_1.error; }
42
+ }
43
+ return Array.from(ownerFields);
44
+ }
45
+ exports.resolveOwnerFields = resolveOwnerFields;
46
+ /**
47
+ * Type guard that identifies an auth attribute with an attached rules list that
48
+ * specifies an `allow` attribute at a minimum.
49
+ *
50
+ * @param attribute Any object. Ideally a model introspection schema model attribute
51
+ * @returns True if given object is an auth attribute
52
+ */
53
+ function isAuthAttribute(attribute) {
54
+ var _a, _b;
55
+ if ((attribute === null || attribute === void 0 ? void 0 : attribute.type) === 'auth') {
56
+ if (typeof (attribute === null || attribute === void 0 ? void 0 : attribute.properties) === 'object') {
57
+ if (Array.isArray((_a = attribute === null || attribute === void 0 ? void 0 : attribute.properties) === null || _a === void 0 ? void 0 : _a.rules)) {
58
+ return ((_b = attribute === null || attribute === void 0 ? void 0 : attribute.properties) === null || _b === void 0 ? void 0 : _b.rules).every(function (rule) { return !!rule.allow; });
59
+ }
60
+ }
61
+ }
62
+ return false;
63
+ }
@@ -4,16 +4,15 @@ import { __assign, __awaiter, __generator, __read } from "tslib";
4
4
  import { Observable } from 'rxjs';
5
5
  import { GraphQLError } from 'graphql';
6
6
  import * as url from 'url';
7
- import { v4 as uuid } from 'uuid';
8
7
  import { Buffer } from 'buffer';
9
- import { Hub, fetchAuthSession } from '@aws-amplify/core';
8
+ import { Hub, fetchAuthSession, ConsoleLogger } from '@aws-amplify/core';
10
9
  import { signRequest } from '@aws-amplify/core/internals/aws-client-utils';
11
- import { Logger, NonRetryableError, USER_AGENT_HEADER, getAmplifyUserAgent, isNonRetryableError, jitteredExponentialRetry, } from '@aws-amplify/core/internals/utils';
10
+ import { NonRetryableError, USER_AGENT_HEADER, getAmplifyUserAgent, isNonRetryableError, jitteredExponentialRetry, amplifyUuid, AmplifyUrl, } from '@aws-amplify/core/internals/utils';
12
11
  import { CONTROL_MSG, ConnectionState, } from '../../types/PubSub';
13
12
  import { AMPLIFY_SYMBOL, AWS_APPSYNC_REALTIME_HEADERS, CONNECTION_INIT_TIMEOUT, DEFAULT_KEEP_ALIVE_TIMEOUT, DEFAULT_KEEP_ALIVE_ALERT_TIMEOUT, MAX_DELAY_MS, MESSAGE_TYPES, NON_RETRYABLE_CODES, SOCKET_STATUS, START_ACK_TIMEOUT, SUBSCRIPTION_STATUS, CONNECTION_STATE_CHANGE, } from '../constants';
14
13
  import { ConnectionStateMonitor, CONNECTION_CHANGE, } from '../../utils/ConnectionStateMonitor';
15
14
  import { ReconnectEvent, ReconnectionMonitor, } from '../../utils/ReconnectionMonitor';
16
- var logger = new Logger('AWSAppSyncRealTimeProvider');
15
+ var logger = new ConsoleLogger('AWSAppSyncRealTimeProvider');
17
16
  var dispatchApiEvent = function (payload) {
18
17
  Hub.dispatch('api', payload, 'PubSub', AMPLIFY_SYMBOL);
19
18
  };
@@ -95,7 +94,7 @@ var AWSAppSyncRealTimeProvider = /** @class */ (function () {
95
94
  }
96
95
  else {
97
96
  var subscriptionStartActive_1 = false;
98
- var subscriptionId_1 = uuid();
97
+ var subscriptionId_1 = amplifyUuid();
99
98
  var startSubscription_1 = function () {
100
99
  if (!subscriptionStartActive_1) {
101
100
  subscriptionStartActive_1 = true;
@@ -776,7 +775,7 @@ var AWSAppSyncRealTimeProvider = /** @class */ (function () {
776
775
  signed_params = signRequest({
777
776
  headers: request.headers,
778
777
  method: request.method,
779
- url: new URL(request.url),
778
+ url: new AmplifyUrl(request.url),
780
779
  body: request.data,
781
780
  }, {
782
781
  // TODO: What do we need to do to remove these !'s?
@@ -30,6 +30,18 @@ export declare const graphQLOperationsInfo: {
30
30
  operationPrefix: "list";
31
31
  usePlural: boolean;
32
32
  };
33
+ ONCREATE: {
34
+ operationPrefix: "onCreate";
35
+ usePlural: boolean;
36
+ };
37
+ ONUPDATE: {
38
+ operationPrefix: "onUpdate";
39
+ usePlural: boolean;
40
+ };
41
+ ONDELETE: {
42
+ operationPrefix: "onDelete";
43
+ usePlural: boolean;
44
+ };
33
45
  };
34
46
  export type ModelOperation = keyof typeof graphQLOperationsInfo;
35
47
  /**
@@ -1,4 +1,7 @@
1
1
  import { __assign, __read, __spreadArray, __values } from "tslib";
2
+ // Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
3
+ // SPDX-License-Identifier: Apache-2.0
4
+ import { resolveOwnerFields } from '../utils/resolveOwnerFields';
2
5
  var connectionType = {
3
6
  HAS_ONE: 'HAS_ONE',
4
7
  HAS_MANY: 'HAS_MANY',
@@ -134,17 +137,26 @@ export var graphQLOperationsInfo = {
134
137
  UPDATE: { operationPrefix: 'update', usePlural: false },
135
138
  DELETE: { operationPrefix: 'delete', usePlural: false },
136
139
  LIST: { operationPrefix: 'list', usePlural: true },
140
+ ONCREATE: { operationPrefix: 'onCreate', usePlural: false },
141
+ ONUPDATE: { operationPrefix: 'onUpdate', usePlural: false },
142
+ ONDELETE: { operationPrefix: 'onDelete', usePlural: false },
137
143
  };
138
144
  var graphQLDocumentsCache = new Map();
139
145
  var SELECTION_SET_ALL_NESTED = '*';
140
146
  function defaultSelectionSetForModel(modelDefinition) {
147
+ // fields that are explicitly part of the graphql schema; not
148
+ // inferred from owner auth rules.
141
149
  var fields = modelDefinition.fields;
142
- return Object.values(fields)
150
+ var explicitFields = Object.values(fields)
143
151
  .map(function (_a) {
144
152
  var type = _a.type, name = _a.name;
145
153
  return typeof type === 'string' && name;
146
154
  }) // Default selection set omits model fields
147
155
  .filter(Boolean);
156
+ // fields used for owner auth rules that may or may not also
157
+ // be explicit on the model.
158
+ var ownerFields = resolveOwnerFields(modelDefinition);
159
+ return Array.from(new Set(explicitFields.concat(ownerFields)));
148
160
  }
149
161
  var FIELD_IR = '';
150
162
  /**
@@ -317,6 +329,14 @@ export function generateGraphQLDocument(modelIntrospection, modelName, modelOper
317
329
  });
318
330
  graphQLOperationType !== null && graphQLOperationType !== void 0 ? graphQLOperationType : (graphQLOperationType = 'query');
319
331
  graphQLSelectionSet !== null && graphQLSelectionSet !== void 0 ? graphQLSelectionSet : (graphQLSelectionSet = "items { ".concat(selectionSetFields, " }"));
332
+ case 'ONCREATE':
333
+ case 'ONUPDATE':
334
+ case 'ONDELETE':
335
+ graphQLArguments !== null && graphQLArguments !== void 0 ? graphQLArguments : (graphQLArguments = {
336
+ filter: "ModelSubscription".concat(name, "FilterInput"),
337
+ });
338
+ graphQLOperationType !== null && graphQLOperationType !== void 0 ? graphQLOperationType : (graphQLOperationType = 'subscription');
339
+ graphQLSelectionSet !== null && graphQLSelectionSet !== void 0 ? graphQLSelectionSet : (graphQLSelectionSet = selectionSetFields);
320
340
  }
321
341
  var graphQLDocument = "".concat(graphQLOperationType).concat(graphQLArguments
322
342
  ? "(".concat(Object.entries(graphQLArguments).map(function (_a) {
@@ -364,6 +384,9 @@ export function buildGraphQLVariables(modelDefinition, operation, arg, modelIntr
364
384
  }
365
385
  break;
366
386
  case 'LIST':
387
+ case 'ONCREATE':
388
+ case 'ONUPDATE':
389
+ case 'ONDELETE':
367
390
  if (arg === null || arg === void 0 ? void 0 : arg.filter) {
368
391
  variables = { filter: arg.filter };
369
392
  }
@@ -2,14 +2,15 @@ import { __assign, __awaiter, __generator, __read } from "tslib";
2
2
  // Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
3
3
  // SPDX-License-Identifier: Apache-2.0
4
4
  import { print, parse, GraphQLError, } from 'graphql';
5
- import { ConsoleLogger as Logger, getAmplifyUserAgent, } from '@aws-amplify/core/internals/utils';
5
+ import { ConsoleLogger } from '@aws-amplify/core';
6
+ import { getAmplifyUserAgent, AmplifyUrl, } from '@aws-amplify/core/internals/utils';
6
7
  import { GraphQLAuthError, } from '../types';
7
8
  import { isCancelError as isCancelErrorREST } from '@aws-amplify/api-rest';
8
9
  import { post, cancel as cancelREST, updateRequestToBeCancellable, } from '@aws-amplify/api-rest/internals';
9
10
  import { AWSAppSyncRealTimeProvider } from '../Providers/AWSAppSyncRealTimeProvider';
10
11
  import { resolveConfig, resolveLibraryOptions } from '../utils';
11
12
  var USER_AGENT_HEADER = 'x-amz-user-agent';
12
- var logger = new Logger('GraphQLAPI');
13
+ var logger = new ConsoleLogger('GraphQLAPI');
13
14
  export var graphqlOperation = function (query, variables, authToken) {
14
15
  if (variables === void 0) { variables = {}; }
15
16
  return ({
@@ -235,7 +236,7 @@ var InternalGraphQLAPIClass = /** @class */ (function () {
235
236
  case 9:
236
237
  _m.trys.push([9, 12, , 13]);
237
238
  return [4 /*yield*/, this._api.post({
238
- url: new URL(endpoint),
239
+ url: new AmplifyUrl(endpoint),
239
240
  options: {
240
241
  headers: headers,
241
242
  body: body,
@@ -1,5 +1,6 @@
1
1
  import { __awaiter, __generator, __read, __values } from "tslib";
2
2
  import { initializeModel, generateGraphQLDocument, buildGraphQLVariables, graphQLOperationsInfo, flattenItems, } from './APIClient';
3
+ import { map } from 'rxjs';
3
4
  export function generateModelsProperty(client, params) {
4
5
  var e_1, _a;
5
6
  var _this = this;
@@ -78,6 +79,20 @@ export function generateModelsProperty(client, params) {
78
79
  });
79
80
  }); };
80
81
  }
82
+ else if (['ONCREATE', 'ONUPDATE', 'ONDELETE'].includes(operation)) {
83
+ models[name_1][operationPrefix] = function (arg, options) {
84
+ var query = generateGraphQLDocument(modelIntrospection.models, name_1, operation);
85
+ var variables = buildGraphQLVariables(model, operation, arg, modelIntrospection);
86
+ var observable = client.graphql({
87
+ query: query,
88
+ variables: variables,
89
+ });
90
+ return observable.pipe(map(function (value) {
91
+ var _a = __read(Object.keys(value.data), 1), key = _a[0];
92
+ return value.data[key];
93
+ }));
94
+ };
95
+ }
81
96
  else {
82
97
  models[name_1][operationPrefix] = function (arg, options) { return __awaiter(_this, void 0, void 0, function () {
83
98
  var query, variables, _a, data, extensions, _b, key_2, flattenedResult, _c, initialized, error_2;