@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.
- package/lib/Providers/AWSAppSyncRealTimeProvider/index.js +3 -4
- package/lib/internals/APIClient.d.ts +12 -0
- package/lib/internals/APIClient.js +24 -1
- package/lib/internals/InternalGraphQLAPI.js +3 -2
- package/lib/internals/generateModelsProperty.js +15 -0
- package/lib/tsconfig.tsbuildinfo +1 -1
- package/lib/utils/resolveOwnerFields.d.ts +12 -0
- package/lib/utils/resolveOwnerFields.js +63 -0
- package/lib-esm/Providers/AWSAppSyncRealTimeProvider/index.js +5 -6
- package/lib-esm/internals/APIClient.d.ts +12 -0
- package/lib-esm/internals/APIClient.js +24 -1
- package/lib-esm/internals/InternalGraphQLAPI.js +4 -3
- package/lib-esm/internals/generateModelsProperty.js +15 -0
- package/lib-esm/tsconfig.tsbuildinfo +1 -1
- package/lib-esm/utils/resolveOwnerFields.d.ts +12 -0
- package/lib-esm/utils/resolveOwnerFields.js +59 -0
- package/package.json +6 -7
- package/src/Providers/AWSAppSyncRealTimeProvider/index.ts +6 -6
- package/src/internals/APIClient.ts +27 -2
- package/src/internals/InternalGraphQLAPI.ts +4 -4
- package/src/internals/generateModelsProperty.ts +28 -1
- package/src/utils/resolveOwnerFields.ts +65 -0
|
@@ -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 {
|
|
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
|
|
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 =
|
|
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
|
|
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
|
-
|
|
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
|
|
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
|
|
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
|
|
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;
|